← Kowloon // Vertical

Scene book

Twenty rooms in the Walled City

Every image below is drawn by the game's own renderer — same materials, same baked lighting, same post-processing, no offline render and no touched-up pixels. The numbers under each plate are measured from the build that produced it. All twenty together are 530,126 triangles and never more than 30 draw calls in a frame. Build time is geometry plus the shadow bake, with the textures already painted — every material in all ten scenes is generated once, on load, and then shared.

NEON THROAT — Two metres wide, nine storeys high, and every one of them selling something.
01 NEON THROAT Two metres wide, nine storeys high, and every one of them selling something.
37,266 triangles 29 draw calls 83 baked lights built in 289 ms
THE WELL — The only daylight in the building, eleven floors up and falling.
02 THE WELL The only daylight in the building, eleven floors up and falling.
50,888 triangles 23 draw calls 13 baked lights built in 348 ms
ELEVEN FLIGHTS — Green tile to shoulder height, and one working tube in four.
03 ELEVEN FLIGHTS Green tile to shoulder height, and one working tube in four.
17,914 triangles 19 draw calls 11 baked lights built in 499 ms
THE ONLY SKY — Above the twelfth floor the building stops pretending and becomes a village.
04 THE ONLY SKY Above the twelfth floor the building stops pretending and becomes a village.
24,406 triangles 23 draw calls 9 baked lights built in 230 ms
THE WET FLOOR — Six hundred watts of tungsten and a drain running the length of it.
05 THE WET FLOOR Six hundred watts of tungsten and a drain running the length of it.
26,250 triangles 27 draw calls 42 baked lights built in 318 ms
FOUR TABLES, NO WINDOWS — Somebody was still playing when it emptied out.
06 FOUR TABLES, NO WINDOWS Somebody was still playing when it emptied out.
17,566 triangles 19 draw calls 9 baked lights built in 95 ms
THE SUMP — Knee deep, and the only light is coming from something that should not be on.
07 THE SUMP Knee deep, and the only light is coming from something that should not be on.
22,122 triangles 10 draw calls 11 baked lights built in 102 ms
THE COLD ROOM — The tiles are new. Everything else in this building is fifty years old.
08 THE COLD ROOM The tiles are new. Everything else in this building is fifty years old.
8,802 triangles 14 draw calls 19 baked lights built in 89 ms
SIXTEENTH FLOOR, BACK ROOM — Rice cooker, six screens, and a door that locks. Bank your scrip here.
09 SIXTEENTH FLOOR, BACK ROOM Rice cooker, six screens, and a door that locks. Bank your scrip here.
14,278 triangles 20 draw calls 9 baked lights built in 67 ms
THE SPINE — Eighty metres, forty doors, one working light. This is most of the game.
10 THE SPINE Eighty metres, forty doors, one working light. This is most of the game.
30,986 triangles 18 draw calls 18 baked lights built in 430 ms
THE YAMEN — Built in 1847 for the assistant magistrate. The only roof over its courtyard is other people's floors.
11 THE YAMEN Built in 1847 for the assistant magistrate. The only roof over its courtyard is other people's floors.
42,136 triangles 21 draw calls 57 baked lights built in 537 ms
TWO O'CLOCK — One hole in the slab, and for forty minutes a day it puts a rectangle on the floor.
12 TWO O'CLOCK One hole in the slab, and for forty minutes a day it puts a rectangle on the floor.
42,396 triangles 9 draw calls 11 baked lights built in 135 ms
THE PUMP ROOM — Seventy-odd wells under the building, and every drop went up to the roof before it came down.
13 THE PUMP ROOM Seventy-odd wells under the building, and every drop went up to the roof before it came down.
23,886 triangles 12 draw calls 24 baked lights built in 221 ms
TEN THOUSAND A DAY — Golf balls. Two machines, thirty home workers, and no reason to ever switch it off.
14 TEN THOUSAND A DAY Golf balls. Two machines, thirty home workers, and no reason to ever switch it off.
26,636 triangles 17 draw calls 27 baked lights built in 232 ms
THE CHAIR BY THE WINDOW — Licensed in Guangdong, which is not the same as licensed here.
15 THE CHAIR BY THE WINDOW Licensed in Guangdong, which is not the same as licensed here.
13,326 triangles 30 draw calls 35 baked lights built in 155 ms
THE GAP — Two metres eight between the blocks, and eleven floors of nothing under it.
16 THE GAP Two metres eight between the blocks, and eleven floors of nothing under it.
22,312 triangles 11 draw calls 23 baked lights built in 98 ms
FOURTEEN STOREYS — The building stops at fourteen storeys because of the flight path, not the foundations.
17 FOURTEEN STOREYS The building stops at fourteen storeys because of the flight path, not the foundations.
59,568 triangles 21 draw calls 36 baked lights built in 798 ms
THE BACKDROP — The backdrop paper was changed twice a year. Nothing else in the building was.
18 THE BACKDROP The backdrop paper was changed twice a year. Nothing else in the building was.
10,792 triangles 20 draw calls 22 baked lights built in 126 ms
THE DRYING FLOOR — Forty racks of noodles, one gas burner, and no second staircase.
19 THE DRYING FLOOR Forty racks of noodles, one gas burner, and no second staircase.
25,414 triangles 14 draw calls 29 baked lights built in 233 ms
NINE HUNDRED DEEP — A survey team measured every floor in 1993. They still missed rooms like this one.
20 NINE HUNDRED DEEP A survey team measured every floor in 1993. They still missed rooms like this one.
13,182 triangles 14 draw calls 18 baked lights built in 43 ms

Why it stopped being voxels

The first version of this world was built from 60 mm voxels, and the verdict on it was that it looked like a bad Minecraft mod. That verdict was right, and the obvious fix — smaller voxels — was wrong. A voxel is a cube at every size, so halving one buys a finer grid of cubes, not a surface, at eight times the cost.

So the detail moved off the geometry and into the surface. A wall is now two triangles wearing a procedurally painted texture at 7.8 mm per texel, and the light is baked into it once, with real shadow rays, at build time. Nothing ships as an asset file: every texture in these ten scenes is generated in code when the page loads.

 Voxel buildNow
Detail resolution60 mm voxel7.8 mm texel
One 12 m tenement facade~200,000 triangles~400 triangles
A whole scenenever got there9k – 60k triangles
Draw calls per scenehundreds9 – 30
Lightingper-vertex AO, no shadowsbaked, ray-traced shadows
Cost per frame to lightzerozero
Asset files shippednonenone

Detail went up roughly eight-fold and the cost went down, which is the only reason any of this runs on a phone.

What these are, and are not

They are authored rooms, not generated levels — composed the way key art is composed, to show what the engine can hold. A floor is still generated, not composed.

Eleven of them now turn up inside a run. The generator reserves a rectangle, stamps the room in, and routes a corridor to a door the room already had — the collision grid for each is rasterised straight out of its own geometry, so none of them had to be redrawn to become a place you can walk into. They are dealt from a shuffled bag seeded off the run code, so no room is ever met twice in one playthrough and no two runs meet them in the same order. Across 40 runs and 800 floors: 440 placed, zero repeats, zero unreachable exits. You can also walk all twenty on their own, from ROOMS on the title screen.

What it does share now is the pipeline. The same painted materials and the same shadowed light bake build the game's own floors, which is new — an earlier version of this page had to admit the demo looked nothing like these pictures. On a Galaxy S22 a generated floor runs 157,000 triangles across 77 draw calls, holds 60 fps with no adaptive downscaling, and builds in 60–143 ms. The one cost is the first run of a session, which spends about two seconds painting the material palette.