← Development journal

/ 3 min read

Vegetation from the water

2026-11-01. Trees, shrubs, reeds and orchards placed and given a health by the generator, from the hydrology and the seed.

The world is authored land and derived water; today the vegetation became the next derived layer. Until now a biome said "sixty trees a hectare" and the scatter threw a Poisson at it, so the March forest was the same thickness on a ridge top as on a river bank, and the Ashfold's dead orchard was a region someone had painted dead. Now the generator asks the water. After the hydrology is solved it computes two fields at the 16 m cell: how wet the ground is now (a riparian term from the distance to live water and the height above its surface, and a climate term from the rain the surface keeps, less on slopes, a little more where the flow converges), and how wet it was (from the dry structures the present already has: the dry channel below the Narrows, the pans, the dry streams). Every plant is a species with an envelope in data: the wetness it thrives at and the wetness it dies under. A wild species throws its Poisson at the biome's cap and keeps each candidate by its suitability where it took root, the wetter of now and then, through a cluster gate so stands have clearings and cross tile edges. A planted species, the orchard rows, stands on its grid wherever the biome says and takes its health from the ground. Dead is not authored: a tree whose ground was wet and is dry has a health of zero, and the dead orchard dies because the field says the water is gone.

the vegetation sheet: green where the ground is wet, rust where it was wet and is dry

The vegetation sheet (sheet-vegetation.jpg, beside the survey sheet; the World tab toggles to it). Cael is a wet block where the climate decides; the March carries the structure, a gallery along the river and bare ridges; the March forest's authored floor shows as a green block; the dead runs down the dry channel and pools in the pans, and out along the dry streams to the north well.

The game draws it with nothing per frame. The stage groups each tile's scatter into one instanced component per species and health band, writes the health as a custom data float on every instance, and the trunk and crown materials fade toward the sheet's wash tone by it; cull distances come per species from the index. Rocks moved to their own seed stream on the way, so a species never reshuffles them again; the tile hash now covers the ground alone and the scatter has its own, so a vegetation change needs no mesh import.

a stand on the March frontier at Sallow Ford, 12 m up (FlyEV=4) the dead orchard from 30 m
the stand at the ford the dead orchard

Left: the tree stub, crowns varying with the ground's wetness, long dusk shadows. Right: the Ashfold's orchard, every row on its 6 m grid, every one dead: the dead tree mesh, derived from a field, not a density someone wrote.

the March forest from 430 m: stands with clearings

The March forest from the sheet's square C9, 430 m up: stands with clearings from the cluster gate. The first gate let five percent of the forest through; the fix was one number in vegetation.json.

What the first look taught: the hydrology cuts a live bed below the land by the surface noise's amplitude, so a flat bank read three metres above its stream and the riparian term died until the rise was measured from the land less that amplitude; health in this world is nearly bimodal (fifty-seven thousand full trees, fifty-nine thin, twelve hundred dead), so the material's fade will mostly show on the frontier's margins until the envelopes widen; and a headless shot in the detached mode drifts its pitch to straight down unless the mouse is neutralised. Spec: docs/superpowers/specs/2026-11-01-world-vegetation-design.md.

Lowwater is in development. These notes capture the game at the time of writing; plans and visuals may change.

More from the making of Lowwater.

Follow along ↗