Brian Andrew Mulrooney

2026-09-24

Gap: One grass kind covered the island at every distance

The island's grass was one tuft kind at one spacing, drawn out to 2.3 km from the camera. It cost 2.4 million triangles every frame, looked the same everywhere, and in places stood in water or floated.

Gap: The grass cost 2.4 million triangles at every zoom

Hiding the grass saved 3.6 ms per frame at the farthest view, where no blade is visible, and up to 5.7 ms up close: every blade was processed in every view.

The developer set a one-million-triangle budget and lowered the default density under it. Past a set zoom level no grass is submitted, cutting the far view's cost to 0.2 ms. Grass is now drawn only within 100 m of the camera, so one kind costs 28 672 triangles instead of 965 202.

Two charts: grass triangles per frame at each step on a logarithmic axis, and the frame time the grass adds at four camera positions before and after the zoom limit
Left: grass triangles per frame, against the one-million budget. Right: the frame time the grass adds, before and after the zoom limit

Gap: One grass kind stood in for four

Grass became a data-driven plant type like the shrubs. Three kinds joined the annual meadow: tussock clumps on dry slopes, short turf, and rushes at the water's margin. Each was chosen from four rendered options, always the cheapest in triangles, and spaced one plant per 3 m; all four cost 275 400 triangles. A colour-variation tint on blades was tried and proved invisible.

A dry hillside at close range with scattered grey-green tussock clumps and short turf, trees and the sea behind
A dry hillside: tussock clumps and short turf
A stream bank at close range with dark upright rushes on the grass and pale reeds at the water
A stream bank: dark rushes beyond the pale reeds

Gap: Grass grew in water and floated over ledges

Rushes faded in over one 4 m grid square reaching past the water's edge, so a half-size rush stood in the stream. They now thin out toward fresh water: none in the water, sparse at its edge, full density from 3 m out. A new automated check places blades as the shader does and judges each against the ground.

That check found floating grass. Blades stood on a coarse 4 m height grid, while river gorges render on a finer 0.5 m mesh; at the worst gorge wall a blade stood 20.6 m in the air. Grass more than 0.1 m above the rendered ground is now removed: the terrain build stores the height of the grass root above the rendered ground, in one byte at 1 cm steps (rounded up; 25.1 megabytes for the island), and the shader skips any blade over the limit. A rule stored per 4 m grid square was rejected first: it would have removed 30% of the rushes where one floated.

A height profile across a gorge wall: the coarse grid the grass stood on runs up to 20.6 metres above the rendered ground
The worst gorge wall: the grid the grass stood on against the rendered ground

Gap: The site's deploys were not checked

The public site trailed the committed one by two entries for two days, unnoticed. A new check compares the live index's entry count and newest date with the committed copy and fails when the live site trails. Its first read of the live site is still pending.

‹›