docs: erosion hierarchy defaults, EROS v2, and where erosion cannot reach (terrain-water task 18)

Records the four governors and the task-18 defaults, and states the measured
limit plainly: erosion concentrates ~9x on the curve's shelf risers because
that is where sustained slope is, so flat shelves and lowlands are barely
touched and the lowland continuation of a trunk is river promotion's job, not
erosion's.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Stewart Howe 2026-08-10 04:16:33 -04:00
parent cc6a24d2b9
commit 85e7bceb72
2 changed files with 36 additions and 21 deletions

View file

@ -43,22 +43,33 @@ Generates the entire 2D blueprint. Roughly in order:
bit-identical to an unwarped one outside the shelf/riser stack. Drops the `0_height` hillshade
snapshot (hypsometric bands × NW hillshade) in both modes.
**Erosion (task 17, Phase C0)** — with `Erosion: "v1"` (default **"off"**, opt-in until the
**Erosion (tasks 17–18, Phase C0)** — with `Erosion: "v1"` (default **"off"**, opt-in until the
developer's gate approves it) a droplet-based hydraulic erosion pass (`HydraulicErosion.cs`,
standalone numeric, deterministic from the resolved seed) details the curved+detailed render
map after the detail passes and before the crater carve: droplets walk downhill with inertia,
eroding steep fast stretches over a small brush and depositing where the ground flattens —
organic, sinuous drainage, not grid hatching. Three hard governors bound it
(`ErosionDropletCount`/`ErosionDropletLifetime`/`ErosionCarveCap` — the cap is per-cell, in
metres, ledger-enforced), a sea clamp forbids carving below sea + margin and leaves below-sea
cells untouched entirely (the rendered coastline cannot move — asserted every generation), and
nothing within 1.2× the crater radius is modified. Output-height only: biome/water
eroding steep fast stretches and depositing where the ground flattens — both spread over the
same cone brush, so neither carving nor dumping can spike a single cell. **Four** hard
governors bound it (`ErosionDropletCount`/`ErosionDropletLifetime`/`ErosionCarveCap`/
`ErosionDepositCap`; both caps are per-cell metres against one net-displacement ledger and are
asserted on exit), a sea clamp forbids carving below sea + margin and leaves below-sea cells
untouched in both directions (the rendered coastline cannot move — asserted every generation),
and nothing within 1.2× the crater radius is modified. Output-height only: biome/water
classification reads the retained pre-erosion map, so `1_biomes`/`0_water` are bit-identical
with erosion on or off. **No rivers yet** — the carved channels are the designated future river
routes (Phase C0b promotes them). The predecessor D8 drainage-incision pass was written and
reverted in task 10 — per-cell steepest descent on a regular grid can only route along eight
headings, and at map scale that reads as straight hatching, not drainage; the droplet model is
the working replacement.
with erosion on or off.
The task-18 defaults tune for a drainage **hierarchy** — fine rills everywhere feeding a set of
clearly deeper convergent channels — by letting droplets live long enough (384 steps at inertia
0.35, low evaporation) that their paths overlap and deepen shared low lines, and by raising the
carve cap to 15 m so trunks separate from rills instead of both piling against one ceiling.
Measured on seed 1280587109: ~1.9 M cells carved past 0.5 m, 42 k past 5 m, 1.4 k past 10 m,
and 177 connected channel systems of 200+ cells at the 3 m threshold. Erosion concentrates
~9× on the curve's shelf risers, because that is where sustained slope exists; the flat
shelves and lowlands are barely touched, so **the lowland continuation of a trunk is not
erosion's to cut** — that is river promotion's job. **No rivers yet** — the carved channels are
the designated future river routes (Phase C0b promotes them by flow accumulation).
The predecessor D8 drainage-incision pass was written and reverted in task 10 — per-cell
steepest descent on a regular grid can only route along eight headings, and at map scale that
reads as straight hatching, not drainage; the droplet model is the working replacement (its
carve field measures isotropic to within 1.5 % across the folded 45° grid period).
3. **Sea level and water** — sea level per the configured model (`SeaLevelModel`: `"flat"` scalar
— the default, `SeaLevelValue` 0.15 — or the legacy `"field"` latitude Lerp); flood fill
separates true ocean from inland lakes; a mainland fill guarantees one contiguous landmass.