Cracked pavement as a layered material

What we wanted
On October 3, we decided the asphalt and concrete in the cities should be a layered material, so it can crumble and fracture like the real thing without weighing heavily on the engine. We also wanted it to stop looking as if it were painted onto the ground.
How it worked before
Pavement was a material flag on the terrain, one per 0.5 m cell. A crater turned a cell to dirt only if it cut 10 cm or more into it. A cell cut less than that stayed asphalt and tilted with the slope of the crater wall. Curbs and road paint were drawn boxes that nothing collided with, and a crater removed every one in the 4 m squares it reached. Nothing was thrown.
Four parts
The four parts were built in the order proposed by a study of the code and of how other engines handle deformable roads.
The layer. A crater now records how deep each sample was cut, in 5 cm steps, and what each cell was made of before. Physics still treats the crater’s cells as dirt for friction, but the renderer keeps paved cells paved. The shader draws the pavement to its real thickness, 13 cm of asphalt or 10 cm of concrete pad, varied by noise so the edge is ragged. The pavement ends in a darker broken lip, and below it the shader draws the base course, then soil from 35 cm down and rock from 4 m. Before, a paved cell cut 10 cm or more turned to dirt whole. A new test scene, a street and a sidewalk with two craters, shows it.
Slabs. Before the crater is dug, it reads which ground in its ring, from 0.4 to 1.2 of its radius, is asphalt or concrete. After it, a slab of each is thrown out and up: 13 or 10 cm thick and 0.3 to 1.2 m across. There are 40 at the high quality tier, fewer at lower ones, and each crater’s slabs are seeded so a replay repeats. The test scene’s two craters threw 29 and 21 slabs, at 0.17 to 0.28 ms each in the step they were dug. Slabs are capped for the whole session in place of retiring old ones, since we had ruled out making rubble disappear. The cap is 3,000, or 480 at the lowest tier.
Curbs. The simulation now holds the city’s curb pieces. A crater throws every curb piece in the cells it reaches as chunks about a meter long. The sidewalk crater in the test scene threw 4.
Cracks. Out to 1.3 to 1.7 crater radii, the asphalt and sidewalk show 7 to 12 jagged radial cracks with pale broken edges. Plates between the cracks are about a fifth of a radius across, in shades that differ as if heaved, and near the rim some plates are gone and the base course shows. Four crack patterns are baked into a texture at startup, and each crater draws one, turned by its seed and scaled to its radius. On a street-level view with three overlapping craters, the main lighting pass went from 2.7 ms to between 2.9 and 3.2 ms. Working the same cracks out per pixel cost 1.45 ms, or 0.95 ms with cheaper noise, so the baked version is cheaper. Cracks are off at the low tier.
The layer and the cracks only change how the ground is drawn, so replays end in the same state as before. The slabs and curbs are physics bodies, and only the test scene’s replay changed.

Afterward
The craters and the pavement chunks were kept as built on October 3, and the jagged edge where grass meets concrete went on the roadmap.
On October 4, on an M1 Mac, crosswalks vanished well outside a crater. A crater had taken every street piece in its 4 m squares. Each piece is now its own part and goes only when the crater comes within 0.8 of its radius of it. On October 9 crosswalks were left hanging over a crater. Paint is now part of the ground’s surface, and a crater takes the paint with the pavement.
How this post was made
- Drafted by
- A Claude Code session in the trilithon.games repository, October 10, 2026, working from the game's changelog, docs and tracker.
- What it did
- Drafted this post from the changelog, the road research notes and the dev brief, and checked each number against them.
- Reviewed by
- Alex van Rossum,
Linear MIP2-369, MIP2-487, MIP2-676