Caves, village forms and biome edges
Research notes for three follow-ups to the geo-world demo (geography.md, settling.md): caves made by the rock instead of by noise, villages whose form comes from their site, and biome edges that blend instead of running straight along world cells. Sources are linked inline. Claims read only in a search-result summary, not on the page, are marked “(via search summary)”. Text marked (inference) is reasoning, not a sourced fact. Timings marked “measured” are from the demo in headless Chrome on the same 2019 Intel i9-9880H laptop the other study pages use.
Caves
How real caves form
Karst. Most solutional caves are in limestone; some are in dolomite, chalk, marble, gypsum and salt. Rain and soil water carry carbonic acid (H₂O + CO₂ → H₂CO₃, then CaCO₃ + H₂CO₃ → Ca²⁺ + 2HCO₃⁻; most of the CO₂ comes from the soil), and the water works along bedding planes, faults and joints until the crevices become caves. Passages below the water table are flooded (Wikipedia, Solutional cave; Wikipedia, Karst). About 20% of the United States is underlain by karst, about 40% of its drinking groundwater comes from karst aquifers, and many spring outlets are cave entrances (NPS, Karst landscapes). Hypogenic caves dissolve from below instead: Carlsbad Caverns and Lechuguilla are thought to have formed from H₂S rising off petroleum, making sulfuric acid (Wikipedia, Solutional cave).
Palmer 1991, “Origin and morphology of limestone caves”, GSA Bulletin 103:1–21 (abstract read; full text not reached) (USF repository; DOI):
- Caves grow along the flow paths that carry the most water with the most dissolving power. The passages that win the flow grow faster; the others stall.
- Once flow is large, wall retreat levels off at about 0.01 to 0.1 cm a year, a limit set by the chemistry. Most caves take about 10,000 to 100,000 years to grow large enough for a person.
- The recharge decides the pattern. Sinkhole (point) recharge makes branchwork caves, whose tributaries join downstream into fewer, larger passages. Diffuse recharge, and floodwater or rising water, make network mazes, anastomotic mazes and spongework. Rising thermal or H₂S-rich water makes ramiform caves.
- Structure and stratigraphy steer a cave’s direction and extent, but don’t alone decide branchwork against maze.
How common each pattern is. In Palmer’s sample of about 500 caves: about 57% branchwork, 17% network maze, 14% a single rudimentary passage, 5% ramiform or spongework and 3% anastomotic, matching “within 1% all known caves in the world >3 km long” (quoted by Dom and Wicks 2003, J. Cave and Karst Studies 65(3):155–159, via search summary; the PDF returned 403, and whether the shares are by count or by length wasn’t confirmed) (PDF). Dom and Wicks’s own count of 633 Missouri caves found branchwork at 71.7%, 83.4% and 84.4% in three karst areas, which they put down to point recharge running along bedding-plane partings (abstract).
Mazes form in two settings (Palmer 1975, “The Origin of Maze Caves”, abstract): diffuse recharge, where every fracture gets water and they all grow at similar rates, as under a permeable insoluble caprock or in isolated hills of soluble rock; and floodwater, where water ponds behind constrictions at peak flow and quickly cuts blind fissures and diversion mazes (USF repository).
Levels. Audra and Palmer (2015) sort epigenic caves into juvenile (perched above an impermeable bed), looping (epiphreatic loops from variable recharge), water-table and equilibrium types (abstract). Ford and Ewers’s four-state model ties the depth of phreatic loops to how many fissures the rock has (via search summary) (McMaster). A keyhole passage is a phreatic tube with a vadose trench cut in its floor; cave levels record stands of a base-level river, and Palmer ties Mammoth Cave’s sharp levels to “intermittent episodes of rapid valley entrenchment” of the Green River (via search summary) (Palmer 1987). No primary number for typical passage diameters or gradients was found.
Where they open and drain. Dolines (closed depressions that drain underground), poljes, ponors where surface water sinks, and rivers that sink and rise again: the Ljubljanica, “the river of seven names”, and the Popo Agie, which rises about 800 m down its canyon (Wikipedia, Karst). Sinkholes are usually “tens to hundreds of meters” across and deep, and karst can hold “thousands of sinkholes within a small area” (Wikipedia, Sinkhole). Poljes run 5 to 400 km², flat-floored, and many flood in the wet season because their ponors can’t take the flow (Wikipedia, Polje). The type spring, Fontaine de Vaucluse, is the single outlet of a 1,100 km² basin, about 21 m³/s on average; a robot reached 308 m down its flooded shaft (Wikipedia). So a karst cave runs from many dolines to few springs, and the springs sit at base level: the valley floor, the sea, or the top of an impermeable bed (inference from the above).
Speleothems. “Degassing is the one main cause of calcite deposition”: water entering a cave carries far more CO₂ than the cave air, loses it, and drops calcite. Stalactites often line up along ceiling fractures, stalagmites form where the drops land, flowstone where water runs down walls; the oldest dated stalagmite is about 2.2 million years old (NPS, Great Basin). Degassing needs air, so speleothems belong in the dry (vadose) passages, the abandoned upper levels (inference).
Lava tubes. They start as ankle-to-knee-deep pahoehoe, “inflated” by lava injected into the molten interior to flows a few meters thick; flow concentrates into narrow paths as the rest freezes, and “a river of lava flowing under an insulating crust is a lava tube”; where the roof falls in, it leaves a skylight (USGS). Tubes also form when a channel crusts over from its levees inward. They are up to 15 m wide and 1 to 15 m below the surface; the Mauna Loa 1859 tube reaches the sea about 50 km from its vent, and tubes drain downslope when the supply stops (Wikipedia, Lava tube). Kazumura Cave in Hawaiʻi is 65.5 km long with 1,101 m of vertical extent, in a flow about 500 years old (Wikipedia). So a tube is shallow, follows the surface downslope from a vent, and opens through skylights (inference).
Sea, talus and glacier caves. Waves cut sea caves along weak zones (faults and dikes in igneous rock, bedding planes and contacts in sedimentary rock), helped by compressed air and abrasion; caves facing the prevailing swell grow larger; collapses leave littoral sinkholes and stacks; Norway has raised sea caves over 100 ft above today’s sea (Wikipedia, Sea cave). Talus caves are voids among boulders in scree under cliffs, most likely in competent rock such as granite or gneiss; most are short, but Bodagrottorna runs about 2.6 km (Wikipedia, Talus cave). Glacier caves are melted by water running through or under the ice, often from a moulin to the snout; “ice cave” properly means a bedrock cave that holds ice (Wikipedia, Glacier cave).
How games and tools make caves
| System | How | Notes |
|---|---|---|
| Dwarf Fortress | CAVERN_LAYER_COUNT 3 by default (not counting the magma sea and bottom layer); per layer, openness 0–100 and passage density 0–100 (low openness and high density give “a maze-like network of small criss-crossing passages”), water 0–100; LEVELS_ABOVE_LAYER_1..5 set the stone between layers (DF wiki) |
Layers are horizontal and world-wide, not tied to the rock above |
| Minecraft 1.18 noise caves | Cheese caves keep one side of a 3D noise threshold (the largest, with noise pillars); spaghetti caves keep “the edge of black and white”, a band near the threshold; noodle caves are thinner, 1–5 blocks wide. Carver caves, the old “worm” caves, are added after terrain: an ellipsoid room plus trunks and branches thick in the middle, from Y = −56 to 180. Aquifers: 16×12×16 cells, each flooded, partly flooded or dry (Minecraft Wiki, Cave) | Per block, no global pass; no relation to drainage |
| Perlin worms (libnoise) | Each worm’s segment angles come from a 3-octave Perlin module sampled along a sliding line (via search summary) (libnoise) | The ancestor of carver caves |
| Noita | A biome map image assigns a biome per pixel; each biome is filled with “corner-based herringbone Wang tiles” from Sean Barrett’s stb library, colors standing for materials; a pathfinder checks the result and regenerates if there’s no way through; hand-made pixel scenes go on top (noita.wiki.gg staging page; GDC 2019). Herringbone tiles can be generated in any order and look less grid-like than square Wang tiles (Barrett) | Authored tiles, so caves read as designed |
| Terraria | 109 passes in 1.4.4.9, among them “Tunnels”, “Small Holes”, “Dirt Layer Caves”, “Rock Layer Caves”, “Surface Caves” (straight or zig-zag), “Mountain Caves” and “Create Ocean Caves” (Terraria wiki). WorldGen.TileRunner(x, y, strength, steps, type, ...) is a randomly steered blob walk; type −1 carves (tModLoader) |
Which passes call TileRunner wasn’t confirmed |
| Spelunky | A 4×4 grid of 10×8-tile rooms; the solution path starts in the top row and rolls 1–5 each step (1–2 left, 3–4 right, 5 down); room types 1–3 guarantee exits; 8–16 templates per type, with probabilistic tiles and 5×3 obstacle chunks (Kazemi; part 2) | A guaranteed path, not geology |
| Cellular automata | Fill 50% with rock, then n passes of “rock if at least 5 of 8 neighbors are rock”; 0.41 ms per 50×50 in C# (Johnson et al. 2010) | Blobby rooms, no direction |
| Agent diggers | Agents “dig paths into a primeval mass of matter” (PCG book, ch. 3, via search summary) (Liapis) | |
| World Machine, Gaea | Classic World Machine is heightfield-only, so no caves (via search summary); build 4059 (2026) adds a vector displacement datatype for “overhangs, undercuts, caves, and proper cliffs” (World Machine). Nothing found for Gaea | |
| Paris et al. 2021 | A gridless anisotropic shortest-path search between given inlets and outlets builds the skeleton, steered by faults, inception horizons, fractures and permeability contrasts; conduits are a signed-distance construction tree with blending and warping (project page) | Offline; water-table handling and timings not verified |
| KarstNSim (Gouy, Collon, Bailly-Comte, Galin et al. 2024) | Shortest paths over an anisotropic cost on an n-nearest-neighbor graph; near-vertical conduits in the vadose zone, near-horizontal in the phreatic zone (via search summary) (HAL). Related: anisotropic fast marching in pyKasso (Fandel et al. 2022) and SKS (Borghi et al. 2012) (via search summary) | Hydrogeology tools |
Every game method in the table makes caves from noise, random walks or templates, with no tie to rock or water; only the hydrogeology tools (Paris, KarstNSim, pyKasso) grow passages from inlets to outlets the way Palmer describes. Their core, a shortest-path tree from springs out to sinkholes over a cost that is cheap along fractures, is a single Dijkstra on a grid, cheap at region size (inference).
What geo-world does now
- Rock from the plates. During the plates stage a volcanic field gathers island arcs, continental arcs (at 45%), rift floors (four times, as flood basalt), mid-ocean ridges and hotspot shields, plus any land on an oceanic plate far from a continent; above 0.45 it’s basalt. Granite where uplift was fast enough to strip a range to its core, or where old ranges are worn to their roots. Everywhere else a layer cake of sedimentary beds 150 m thick (42% limestone, 30% sandstone, 28% shale by a hash of the bed’s index), folded by a slow noise of ±0.45 km, so the rock at a point depends on its height and a valley cut deep enough reaches another bed. A Rock tab shows it, with karst marked where limestone gets over 45 cm of rain. Cliff faces in a region show the beds they cut.
- Karst. Joints in two sets at right angles, aligned with the plate’s drift, 4 or 5 tiles apart and wavering. Springs are land tiles within two tiles of water (low banks share the water’s terrace) whose rock at the water’s level is limestone, at least one terrace below the surface. A region averaging under 25 cm of rain gets no karst. A multi-source Dijkstra grows from the springs through limestone at each spring’s own level, cheap along joints (1) and dear through solid rock (2.8); the sinkholes, limestone at the surface on dry land, trace back to their springs, so passages join downstream as branchwork. Under a sandstone cap the joints round each passage open too (a network maze, by diffuse recharge); where the spring is a big river, extra loops braid the passages near it (anastomotic, by floodwater). A second, dry level two to four terraces higher, the old water table, opens at valley walls that cut it, with speleothems.
- Lava tubes on regions over a fifth basalt: from the highest basalt tile (and a second vent 18 tiles away), a tube follows the smooth world slope down with momentum and a little wander, never climbing, one terrace under the surface, with a skylight every nine tiles.
- Sea caves where the sea meets a cliff two or more terraces high in hard rock, cut a few tiles inland at sea level; rock shelters at the foot of sandstone cliffs three or more terraces high.
- Not done: spongework and ramiform caves, talus caves, glacier caves, vertical shafts below dolines, and flooded (phreatic) passages below the spring level.
Village forms
Nucleated and dispersed, rows and agglomerations
- A nucleated village clusters houses and farmhouses round a focus, usually a church near a green, against dispersed, linear and polyfocal patterns. Late-medieval planned villages had “two rows of new houses on equal-sized plots”, often with a back lane. Proposed causes of nucleation include population density, manorial lords, and Williamson’s (2004) argument from soil and climate (Wikipedia, Nucleated village).
- Dispersed settlement scatters farmsteads among small irregular fields; in England it marks anciently enclosed country outside the center (Essex, Kent, the West Country) (Wikipedia, Dispersed settlement).
- Roberts and Wrathmell’s Atlas of Rural Settlement in England (2000) splits England into a Northern and Western, a Central and a South-eastern Province. The Central Province is the old “champion” country of open fields and nucleated villages; dispersed settlement goes with the wooded provinces either side; the provinces began forming before the 9th century (Hull, Beresford’s Lost Villages).
- Roberts classes village plans by rows against agglomerations, then by regularity and whether there is a green (via search summary, from an Isle of Wight heritage report). His County Durham study (1972) found the two-row plans show “a strong measure of deliberate ordering” (via search summary) (Medieval Archaeology 16). In Durham and northern England up to 80% of settlements show signs of planning, many in a “regular two-row format” with rows facing across a street or green; excavated Newsham had at least 11 tofts, West Hartburn about 12 (Hull). Medomsley “originally consisted of two rows of houses on either side of a wide street that formed a village green” (Keys to the Past).
- Tofts and crofts. The toft is the plot the house and outbuildings stand on; “strips of land behind the tofts are called crofts” (Wikipedia, Toft); in Buckinghamshire, “groups of regular long thin plots” that “appear to be planned elements” (Buckinghamshire HER).
- Open fields. Two or three great fields per manor, “usually several hundred acres each”, divided into furlongs and then strips (selions); a family might hold about 70 strips totaling about 20 acres; at Elton the houses “lined a road rather than being grouped in a cluster” (Wikipedia, Open-field system). A strip was traditionally a furlong long (about 200 m) and 4.6 to 20 m wide, 0.1 to 0.4 ha, its ridges 3 to 20 m apart (Wikipedia, Ridge and furrow).
German village forms (Dorfformen)
| Form | Shape | What made it |
|---|---|---|
| Haufendorf | Clustered, irregular | “Unplanmäßig angelegt”, laid out without a plan, often with the open-field Gewannflur; many classic forms are “oft nur Sekundärformen”, reshaped later (de.wikipedia, Dorf) |
| Straßendorf | Farmsteads directly on one road at roughly regular intervals, a kind of Reihendorf | Planned (colonization) or grown; often at important road junctions (de.wikipedia) |
| Reihendorf, Hufendorf | Farmsteads at “more or less regular intervals” along a road, dike, valley, ridge or stream, one row or two, each with its land behind it | Subtypes Hagenhufendorf (Hufen of 20–40 Morgen), Marschhufendorf, Moorhufendorf (strips about 50–800 m wide between ditches), Waldhufendorf (de.wikipedia) |
| Zeilendorf | One row along a path or stream | “Geländebedingt”, shaped by the terrain; along rivers often one-sided, the street on the terrace edge above flood level; strips often under 10 m wide after inheritance division (de.wikipedia) |
| Angerdorf | Farmsteads facing a common green, “meist die Form einer Linse oder eines Auges”, lens- or eye-shaped, often with a pond; church, school and smithy added on the green later; barns at the plots’ backs | The medieval eastward colonization, on moraine and loess plateaus (de.wikipedia; en.wikipedia) |
| Platzdorf, Rundling | Round a square; the Rundling’s wedge-shaped farmsteads round a round or oval green with “nur einen einzigen Zugang”, one entrance, originally 3 to 10 farms | Planned by lords regrouping Slavic settlers, from about 1150; the round shape’s purpose is unexplained (de.wikipedia, Platzdorf; Rundling) |
| Waldhufendorf | Farms along a road “like beads on a chain”, outside the floodplain of the stream on the valley axis; each holding a strip the size of a Hufe running at right angles up to the ridge, forest left at the far end | Upland colonization: Erzgebirge, Vogtland, Odenwald (Zotzenbach, 877), the northern Black Forest; chains of villages up to 25 km in Saxon valleys (de.wikipedia; en.wikipedia) |
| Streusiedlung | Single farms “mindestens 100 Meter voneinander entfernt”, at least 100 m apart | Spontaneous (irregular) or planned (regular) settlement (de.wikipedia) |
Numbers: a Frankish Hufe is 24.2 ha in strips “bis zu fast zweieinhalb Kilometer lange”, up to almost 2.5 km long, with farmsteads about 50 to 100 m apart (de.wikipedia, Hufe); so a Waldhufe strip is roughly 100 to 240 m wide (inference: 24.2 ha over 1 to 2.5 km). After Lienau, a Weiler has 10 to 20 house sites, a small village under 100 (de.wikipedia, Dorf). Regular plans occur only with deliberate planning. Partible inheritance (Realteilung, roughly south of an Aachen–Erfurt line) splits holdings “oft in Form schmaler Streifen”, into narrow strips (de.wikipedia, Realteilung); that it makes Haufendörfer wasn’t confirmed. The French village-rue has buildings “de part et d’autre d’une rue unique”, on plots that are “longues bandes étroites, de la largeur de l’habitation” (fr.wikipedia). Linear villages form along a road, river or canal, or between physical limits such as a coast or a valley; Sułoszowa in Poland has a 9 km main street (Wikipedia, Linear settlement).
Other forms
- Hill villages. The village perché sits on top of a relief, mostly fortified medieval villages “souvent pourvus de remparts”; 120 in the Vaucluse (fr.wikipedia). Toubert’s incastellamento names the shift “towards fortified settlements” in Italy after the mid-10th century (Wikipedia); Italian hill towns were built on hills “for defensive purposes” (Wikipedia), and hilltops were thought healthier than malarial valleys (via search summary) (FORTMED).
- Greens. “Most village greens in England originated in the Middle Ages”, possibly to protect livestock “from wild animals or human raiders during the night”; “later, planned greens were built into the centres of villages” (Wikipedia, Village green).
- Fishing villages sit “around a small natural harbour” or work from a beach, needing “a safe way of landing fish and securing boats” (Wikipedia). No source on their house rows was found.
- Spring-line villages line the foot of a scarp where permeable rock lies on impermeable, centers of strip parishes from ridge to river (Wikipedia).
Generators
- Emilien et al. 2012 set a village type (high-land, defensive, fisherman) whose weights on sociability, worship, accessibility, slope, water, fortification and geographical domination pick each building’s site; each house joins the roads at once, parcels take a stretch of road first and grow away from it, and “most parcels have one side neighboring a road and two sides perpendicular to it” (PDF).
- Watabou’s village generator has a “crossroads” tag that puts the village at a highway intersection or T-junction (devlog).
- Manor Lords lets the player draw a burgage area that divides into plots snapped to the road, each with room at the back for an extension (via search summary) (wiki).
What geo-world does now
Roads are laid first, then the village is sited (its score now includes nearness to a road, and to the shore when its world cell is coastal) and its form read from the site (inference: a rule set from the forms above). The world keeps three of its sixteen village places for the best shore sites, since fishing villages never win on arable land. In seeds 4242 and 777 the 32 villages came out as 9 forest strip, 9 hill, 5 street, 4 green, 3 fishing and 2 Anger villages; regions built in 0.09 to 0.33 s, 0.42 s for the first (measured).
| Site | Form | Layout |
|---|---|---|
| Sea or lake within 7 tiles | Fishing hamlet | One row along the shore, facing the water, boats drawn up in front, gardens behind |
| On a hilltop (most of the ring 5–7 tiles out lies lower) or rough ground | Hill village (Haufendorf) | Houses packed irregularly on the top terrace round a small square, fields on the slopes below |
| A road through, woods around | Forest strip village (Waldhufendorf) | Farms spaced along the road, each with one long strip behind it into the forest |
| A road along a valley (flat runs further along the road than across it) | Street village (Straßendorf) | Houses on both sides of the road, each toft with a croft strip behind it |
| A road through open flats | Anger village | A lens-shaped green along the road, houses in two rows facing it, open-field strips around |
| No road, open flats | Green village | Houses round a round green, open-field furlongs of strips around |
Biome edges
Ecotones
- An ecotone is “a transitional area between two plant communities, where these meet and integrate”; it “may be narrow or wide”, “a gradual blending of the two communities across a broad area” or “a sharp boundary line”. The edge effect is the “increased variety of plants as well as animals at the community junction”; Clements coined the word in 1904 (Wikipedia, Ecotone).
- Treelines. The alpine treeline “is seldom abrupt”, usually “a transition zone between closed forest below and treeless alpine zone above”; the Arctic forest-tundra averages about 145 km wide, “scattered patches of krummholz or stunted trees… larger trees along rivers and on sheltered sites set in a matrix of tundra” (Wikipedia, Tree line). The treeline is “rarely a defined line and instead forms a fuzzy transitional zone”, with three lines: timberline (closed forest), treeline (groups of trees over 3 m) and tree-species line (the last single trees) (Nature Scitable); the band between them is “tens to hundreds of meters, depending on the steepness of the gradient” (via search summary) (NSF PAR).
- Gallery forests form “as a corridor along rivers or wetlands, projecting into landscapes that are otherwise only sparsely treed”, “sometimes only a few meters wide”, with an abrupt boundary, kept by water, better soil and shelter from fire (Wikipedia, Gallery forest).
- Edge influence scales with the contrast between the two communities (Harper et al. 2005, abstract); boreal studies find it mostly within 10 to 30 m of the edge (via search summary) (Ecoscience).
- Mantle and fringe. The Swiss National Forest Inventory measures a forest edge in layers from the trees outward: the Waldmantel, edge trees with one-sided long crowns (width classes ≤2, 3–4, 5–6, ≥7 m) (LFI); the shrub belt “between Waldmantel and Krautsaum” (<2, 2–4, >4 m) (LFI); then the herb fringe. The terms go back to Tüxen 1952 (via search summary).
- Under the canopy. A tropical canopy “intercepts around 95% of the sunlight”, and where a gap opens “the bushes, undergrowth, and plant life on the forest floor become denser” (Wikipedia, Understory); closed canopies can pass “as low as 1 to 2 percent of full sunlight” (via search summary) (Rangelands). So shrubs belong at edges, gaps and clearings, thin under closed forest (inference).
How games draw them
| System | How | Numbers |
|---|---|---|
| Minecraft before 1.18 | A stack of layers. Zoom doubles resolution, each edge child a coin flip between two parents, the diagonal the most common of four; FuzzyZoom picks the diagonal at random; Smooth removes single-cell spikes; the final Voronoi zoom jitters a feature point per 4-block cell by ((rand&1023)-512)*36/10240 blocks, about ±1.8 blocks, and each block takes the nearest point (cubiomes layers.c). Shore and edge layers put a buffer biome between incompatible ones (VanillaGenLayers) |
Jitter about 0.9 of a cell (inference) |
| Minecraft 1.18 multi-noise | Six climate parameters (temperature, humidity, continentalness, erosion, weirdness, depth); each biome is a box of intervals, and a point outside all of them takes “the closest biome interval” (Minecraft Wiki), so edges follow the contours of smooth noise (inference) | Temperature noise’s lowest octave −10, 6 octaves (mcmeta) |
| Minecraft biome blend | A color setting only: grass, foliage and water colors are averaged over a square round each block (Minecraft Wiki, Biome); biomeBlendRadius 0–7, default 2 (Options.txt) |
1×1 to 15×15, 5×5 by default |
| Dwarf Fortress | “Biomes are calculated for each region tile… then noise is calculated and applied which causes the irregular region boundaries on the local map”; an embark square is 48×48 tiles (DF wiki) | The same problem as geo-world’s: a coarse map shown fine |
| Terraria | Hard edges; oceans at both ends, snow on one side, jungle on the other; the biome the player is in is decided by tile counts in a box round them (snow 1,500, jungle 140) (Terraria wiki) | |
| Red Blob noisy edges | Recursively subdivide each boundary inside the quadrilateral of its two cell centers and two corners, so neighboring edges can’t cross; amplitude 0.25 to 0.5; stop at “a few pixels/tiles” (Red Blob Games) | |
| Domain warping | f(p + h(p)): q = (fbm(p), fbm(p + (5.2, 1.3))); fbm(p + 4q) (Quilez) |
Strength 4 in the example |
| Dual-grid autotiles | Tiles drawn at a half-cell offset, marching squares on the base cells: 6 tiles with rotation, 16 without, credited to Oskar Stålberg (Boris the Brave); 15 tiles instead of the blob’s 47 (TileMapDual) | |
| Height-blended splatting | ma = max(t1.a + a1, t2.a + a2) − depth, bᵢ = max(tᵢ.a + aᵢ − ma, 0), depth 0.2, so sand fills the cracks between stones instead of a linear fade (Mishkinis 2013) |
What geo-world does now
- Biomes by climate per tile. A region no longer copies each world cell’s biome: it reads the world’s temperature (bilinear, with the lapse rate from its own height) and rain (bilinear over land cells only, so coasts don’t turn to desert), jitters both by a three-octave noise (±0.7 °C and ±10% of the rain, typically), and classifies each tile with the world’s own Whittaker rule. The edges follow the climate’s contours, as in Minecraft 1.18, instead of the world grid. Swamps and beaches still come from the world cell, looked up through a domain warp.
- Pixel edges. Where a tile’s neighbor has another ground, each pixel near the border reads its ground from a point offset by a slow noise (±3 px) plus an ordered dither (±2 px), on the same terrace only, so the 8-pixel steps become a ragged, dithered seam.
- A blended forest edge. Tree cover is blurred over two tiles, so it thins across the edge with trees straying out into the open, and shrubs follow the mantle and fringe: dense where the blurred cover is between about 0.15 and 0.45, along paths and round clearings, and a sixth as dense under closed forest.