Archived decision board from HIGH WATER (2026). Picked: Route A, Blockwork, for the environment. For the tower select, D1, the voxel dollhouse, “with extra love and detail”: real exterior architecture and a security camera per floor. ← back to the archive
TOWER 3 · LEVEL 70 · SKY LOBBY · INTERIOR FINISH SCHEDULE

Floor 70
finish schedule

Three style submittals for the environment, each rendered from the game camera at 640 × 360 with the real voxel rigs, the real masonry and the real Kit: materials, props, signs, destruction, light and the city outside the curtain wall.

Submittal09-70 A · B · C
Date2026-09-28
ForJonas (owner's pick) · Cornerman
Prepared byPLUMB, art direction & environment, Studio Hitstop
Statusroute A in production · city backdrop live (DIV 00-B) · prop pass (DIV 00-C)
Jam ruleEvery model, texture and backdrop here is written as code (Blender and Godot scripts) or rendered from the Dark City Shining Babel setting data. No generators, no downloads.
Sourceart-lab: tools/art/
DIV 00-B

Look test: Babel at 06:02

Blockwork room, Cycles city through the glass · Jonas's picks: route A, blue morning

Jonas asked for a city "super sick and realistic" behind the pixel room. The room still renders at 640 × 360 and is scaled 3× with nearest filtering. The city is pre-rendered in Blender Cycles from Babel's own data and drawn at native resolution behind the world view. The world SubViewport is transparent where the curtain-wall glass is, so the city is sharp and the room is pixel art. Both frames below are single 1920 × 1080 captures of that composite from Godot (tools/art/look_city.tscn).

Sho lookout gallery, Blockwork interior at night, realistic dawn city through the glass
L-1Shō, the lookout. The gang's gallery runs along the west curtain wall on three cinder piers. Two bottle throwers stand on it with Babel behind them. The room is in its night mood; outside it is 06:02, and first light is catching the tower crowns.
The Toll collapsed, blackout, dawn city through the glass
L-2Ketsu, after the Toll falls. The toll booth comes down, the lamps die (blackout plus emergency red), and the only daylight in the room is the city.
Detail crop of the city plate
L-3The plate at 1:1: sun on the crowns, tower shadows across the facades, windows at 60 % of night, glass reflecting the sky, antenna beacons.

L-4Parallax: the camera moves ±3 m

Camera 3 m left
x − 3
Camera 3 m right
x + 3The mullions travel at world speed. The near towers keep 80 % of their screen position, the mid city 90 % and the sky and sea 97 %, so the city sits far behind the glass.

L-5The plate: one strip, three depth layers

Full city strip at dawn, 140 degrees
Far layer
farSky and storm deck, sea, ridge, and the city beyond 1.15 km.
Mid layer
mid380 m to 1.15 km, with alpha (shown on a checkerboard).
Near layer
near110–380 m, with alpha.

What the plate is made of

  • tools/art/city_blender.py (Blender 5.0, Cycles, headless) reads the Dark City Shining Babel setting data: 42 named buildings, 1,219 procgen buildings, streets, roads, tramway, sea wall, ridge and sea.
  • Buildings: tall towers get setbacks and crowns; the Pinnacle gets its spire and strobe.
  • Facades: a procedural window grid in world metres, per building type. Each window is lit or dark, with a room colour, a ceiling-to-floor gradient, blinds, a lamp pool or a TV. Temperature, tone and how many rooms are lit are set per building (a face attribute). Dark glass reflects the sky, and each floor has a spandrel band.
  • Roofs: AC units, water tanks, antennas with red beacons, rooftop billboards.
  • Neon: blade signs and strips on the Town and Lux faces. Holo ads carry Opticals' CODEX copy (OH-DI, NERPS!, KODAMA, HIGH WATER WE ARE HIRING).
  • Streets and roads glow sodium, with head- and tail-light dashes. The tramway is lit, and the sea wall carries lamps; boats sit on the sea.
  • Air and water: height and distance fog computed per camera ray (street mist low, violet haze high), a storm cloud deck in the world shader, and a glossy sea with wave bumps.
  • Afterwards city_post.py adds bloom (Pillow).
  • No image textures, no downloads, no generators; the only font is the DejaVu the game already ships.

One colour script with the film (agreed with Opticals)

  • 06:02, sun 2.5° up at bearing 120°, colour #ffb070. The camera looks west-north-west over the core, away from the sun, in both the film and the game.
  • Earth shadow #1c2436 under a Belt of Venus #b5687e, storm blue #22386a, zenith #0b1733. Clouds are dark storm blue with undersides lit #ffb070.
  • Windows are three parts sodium #ffb35c to one part #bfe6ff. Neon is PV orange #ff6a1f and magenta #ff3d8b. HW cyan #1fd6ea appears only on Tower 3 and High Water ads.
  • The room's section moods (night, flicker, blackout) are unchanged; only the city is at dawn.

Budgets

  • Dev PC GPU: one layer per Blender process, 4096 × 1580, 64 samples with the OptiX denoiser, and a pause between runs. Times: far 17 s, mid 23 s, near 15 s, composite 37 s. The whole city set takes about 1.5 min of GPU time. There were no long batches.
  • Web (computed, not yet measured in an export): in the frame, one plate pixel is 0.9 native px at 1080p, so a 3072-wide strip covers 1080p. In VRAM-compressed form (S3TC/BPTC on desktop Web), the three layers come to about 11 MB of VRAM and a similar download before pck compression. As lossy WebP, the download is about 0.5 MB, but each 3072 layer takes about 19 MB of VRAM once decoded (RGBA8). The mid and near layers crop to their alpha bounds. I'll measure both in the Web export before choosing.
  • Frame cost: three textured quads behind the world view, plus the transparent SubViewport. The look test drew 241–454 calls in the 3D view.

Next, on art-lab, in steps

  1. The backdrop node for game_root (Readout's hybrid already draws the world as a scaled SubViewport): plate layers behind it, parallax from the level camera, transparent where there is glass. Web export measurement.
  2. Animated overlays at native resolution: traffic streams on the roads, aircraft and drone lights, beacon blinks, window flicker through a mask, holo-ad loops, a searchlight, rain in front. These shaders join the Warmup.
  3. Blockwork production: blockwork.gdshader into Pal/LevelKit, Debris and BrickWall in local space, the prop kit into the level, the Kit.sign() restyle, PV orange in one line of Pal, and the section moods.

Rulings needed

  • Tower 3's height. The data has Tower 3 at 160 m (32 units), which can't hold Floors 70–75. The plate puts Floor 70 at about 255 m, above the Lux towers around it, so the view clears them. The data should raise Tower 3 to about 275 m; Opticals flagged the same.
  • The horizon is placed artistically. It sits about 60 % up the glass so the skyline clears the gallery deck. Physically it would sit at eye height, about 1.6 m.
DIV 00-C

Prop pass: before and after

Jonas: "no plain yellow squares or plain red exploding cylinders"

Every breakable box and piece of set dressing in Floor 70 and the training arena is now a voxel model on the characters' own grid (0.064 m, 2 screen pixels per voxel), so props and people read as one hand. Details are voxel paint: planks and gaps, steel straps, stencils, shipping labels, dents, rust runs, PV tags. The physics is unchanged, with the same box collider, hp and mass. When a prop breaks, the pieces are Blockwork blocks in the prop's own colour. Built by tools/vox/env_props.py with Armature's sculpt helpers.

Placeholder boxes
P-1Before: the level's placeholder boxes, same sizes and positions, with Blockwork on.
Modelled props
P-2After, left to right. Back row: stall counter, count table, cash bundle, turnstile, PV vending machine, karaoke lounge, shrine, plant. Front row: High Water crate, Cronus crate, fuel drum, luggage, barricade desk, dice table, newsstand.
Props at game scale
P-3At game scale: 640 × 360, shown at 2× with nearest filtering.
Crates and drum breaking
P-4Three crates and a fuel drum breaking. The pieces are plywood blocks, and the drum's blast is unchanged.

P-5In the game: Ki, Shō, the lookout, Ketsu (1920 × 1080 captures of the real main scene)

Ki
KiLuggage and the Cronus and High Water crates on the stub.
Sho
ShōThe karaoke lounge on the gallery, the newsstand, the fuel drum at the middle pier, a planter plant.
Lookout
LookoutThe dawn city through the glass (DIV 00-B), with overlays and rain.
Ketsu
KetsuThe PV vending machine, the count table and the fuel drum at the gate.

What changed in the code

  • Props.dress(debris, name) swaps a Debris box's look for the model and fits it to the box. Crates and drums keep their colours, so their sounds and blasts don't change.
  • Props.node(name) handles static dressing.
  • The props are hooked into LevelKit (crates, drums, cash, turnstiles), level_70 and the arena.
  • The meshes are baked to .mesh.res by tools/art/bake_props.gd.

Web cost (2560 × 1440, Chrome)

  • Paired A/B with the models and the boxes on the same bodies: Ki +0.03 / −0.03 ms, market +0.10 / +0.07 ms, Ketsu +0.55 / +0.00 ms. That is noise, and the draw calls are unchanged.
  • Level build: meshing the .vox files at load cost about 300 ms on the Web. Baking the meshes brought that down to 11 ms.

Still placeholder

  • The booth's bus tokens are 4 px coins.
  • The stall canopies are plain colour.
  • The doorman's dropped door is Armature's and Hitlag's.
  • The sign housings are Drywall's.
DIV 00-D

Crisp lettering, and where the blur was

Jonas: "the pixelation makes fonts rough and a few things blur"

Captured at 2560 × 1440 (a 3× world) and at 1700 × 1000 (a non-integer window, 2× world). The world scale is always a whole number with nearest filtering, no MSAA, FXAA or TAA is on, and Blockwork, the props and the rigs are crisp. The blur was the lettering. Signs and posters baked their text into 64 px/m textures inside the 640 × 360 world, where a linear filter shrank them to 30 px/m before the 3–4× scale-up. Now the world keeps each sign's panel, frame and housing (pixel art) plus an invisible text mark, and SignText sets the lettering at native resolution in the sign's own font, projected onto the sign by the level camera. The mark decides per pixel whether the text shows, so a thug in front hides the lettering along with the panel. Lit signs take their light from the world pixel under each glyph.

Before: Ki at 1:1
Before1:1 crop at 2560 × 1440: the plate, the poster and the chalk mark are mush.
After: Ki at 1:1
AfterThe same crop: SKY LOBBY, HIGH WATER / NOW HIRING / DROWNING and the chalk OK × are sharp, while the panels stay pixel art.
Before: lookout at 1:1
BeforeThe lookout.
After: lookout at 1:1
AfterNOTICE is crisp. The city plates are now 120 px/m, so they sit 1:1 at a 4× world instead of being scaled up 1.2×.

Blur audit

  • World scale: a whole number with nearest filtering at every window size, crisp. At a non-integer window the world drops to the next whole scale and centres.
  • AA: none set, so no MSAA, FXAA or TAA.
  • Sign and poster text: fixed (above).
  • Blockwork: the only derivative it takes is the one-pixel rim, with no texture sampling; crisp.
  • Prop meshes: greedy quads carry one colour each, so nothing interpolates; crisp.
  • City plates: they were scaled 1.2× up at 4×. Fixed: re-exported at 120 px/m, +1.6 MB S3TC.
  • Not ours: the HUD at fractional UI scales (Readout's layout).

Web cost (Chrome, 2560 × 1440)

  • Video memory dropped from 191 to 125 MB, because the baked sign viewports are gone from the game.
  • Frame time, paired A/B with the lettering on and off (20 windows): −0.16, −0.85, +0.47, +0.14, +0.17, −2.44 ms. A control with no crisp signs moved +1.15, +0.45, −0.15 ms, so the lettering sits inside the noise. The machine was shared during these runs.
  • Per frame the cost is three unprojections per sign on screen, and one shared material per kind of light, so the labels batch.
DIV 00-E

F70 Village Lobby, F71 Labelling Farm

props from Jonas's floor picks · same voxel pipeline

Fourteen new models from Jonas's floor picks, made with tools/vox/floor_props.py at the sizes of Drywall's tagged boxes. The tagged boxes switch to the models automatically (Props.dress_tagged runs in Stage before static batching, and the level batches the props one MultiMesh per model). Server racks alternate: every third one has the laundry out on its exhaust.

Placeholder boxes
E-1Before: the tagged boxes.
Modelled props
E-2After, left to right:
  • server rack, with nail-polish cable tags and the colour key taped on (71.2.01)
  • the rack with laundry on the exhaust (71.2.05)
  • labelling desk (a green box drawn round a thing in a picture)
  • cable spool, 19 L water bottle
  • routers in a biscuit tin and a rice cooker (71.2.04), badge printer
  • back row: the PV-NET core's frame (the glass glows inside it in the level), CRT stack, security arch with a bead curtain (70.2.05), the stove, the whiteboard, a world clock (70.2.04)
Floor 70 lobby
F70The lobby at game scale: world clocks stopped at different times, the badge printer on the dais, the arch into the kitchen, water bottles.
Floor 71 farm
F71 AThe farm: labelling desks in rows under the grey-morning office tubes.
Floor 71 cold aisles
F71 BThe cold aisles in server blue, with laundry on the rack exhausts.
Floor 71 patch room
F71 CThe Wire Aunties' patch room in warm tungsten.
Floor 71 cooling plant
F71 DThe cooling plant: the mezzanine coming down, racks, the cable spool.
Floor 71 core cage
F71 EThe core cage: the PV-NET core's frame (caps, posts, looms) round Drywall's glowing glass, which still pulses and breaks as before.

F71 moods: the floor is one level up and a few minutes later than F70, so the city plate stays at dawn throughout. The rooms run through:

DIV 00-F

The cast: light, crews, heads

Gallery's lookbook, Jonas's picks L1, C2, H1 · all frames 640 × 360, nearest-neighbour

L1. The characters get their own key and rim light, on a render layer that only the cast draws on. It follows Guilty Gear Xrd's per-character light and TF2's rims. The key is a weak warm light from the camera side. The rim is a cool light from behind and above, and it lands on the tops of heads, shoulders and fists. The floors keep their mood, and the gang stops sinking into the brick. On the Web at 1440p the paired A/B is within noise: −0.33 to +0.35 ms per spot over three runs, with no draw calls added. ?nocharlight switches it off.

L1 before and after
F-1Before and after the light rig on F70 (market), F71 (cold aisles) and F71 (cooling plant). The lineup, left to right: the enforcer, Soldier, Runner, Ballast, Doorman with his door, Doorman without it, Lookout, Netter, Big Rat.

C2 and H1. The garment is the crew, and one orange item marks the gang. Each role keeps its shape in every crew. The spawn tag is Hitlag's Enemy.crew, and VoxelRig.set_crew swaps in <model>_<crew>.vox at spawn.

The Stairwell Kings, Tower Three and the Shaft Boys are authored too, ready for the later floors. The hood is round, with no ear points. Soldiers take their crew's head set: beanie, hood or bare; slicked, grey or bare; hard hat, grey or hood. The rust pauldrons turn grey on crew models, so that orange means only the gang.

Six crews
F-2The six crews on F71 at 2×. Each row is the enforcer, three soldiers (the head variety), then the Runner, Ballast, Doorman and Netter. From the top: Toll Crew, Karaoke Committee, Netters, Stairwell Kings, Tower Three, Shaft Boys.
C2 before and after, with silhouettes
F-3The lineup before and after the crews, in colour and in black at 1×. The silhouettes barely change, and that is expected: C2 is colour. The shape pass (Gallery's round 2) is the next step, and it changes the black test.
In game, F70
F-4In the game on F70, with real spawns and the level's own crew tags. The Karaoke Committee is up on the gallery and the Toll Crew is on the floor. Below them, the plum Doorman works the queue lanes.

Shape pass (Gallery's round 2; Jonas asked for "a circle guy, a triangle guy, a square guy"). Each role now has one primary shape that should read in solid black at 1×:

The camera sees each figure mostly side-on, turned 25° towards it, so the depth of the model carries most of the width on screen.

Shape pass
F-5F71 cold aisles at 3×. Top: the crews before the shape pass. Second: after. Then both lineups in black at 1×, and the lineup after the pass on F70. From left: enforcer, Soldier, Runner, Ballast (in his guard pose), Doorman with and without the door, Lookout, Netter, Big Rat.
Black test: the Runner, Doorman, Netter, Big Rat and Lookout name themselves. Ballast's ball is clearer in colour than in black, because his guard pose lifts the tins; that is Armature's to judge. The Soldier's triangle is the mildest shape of the set.
Shapes in game
F-6In the game on F70: the square plum Doorman in the queue lanes, and the Toll Crew at the TEN bank.

Saki and the Collector. Saki ⧗ is the hourglass. The top is a slate coat worn over the shoulders like a cape: a square yoke, a bone 3 on the back, and it hangs to the knee behind her. It is a prop, so she can shrug it off. Her waist is where the boiler suit's arms are knotted, and the suit's legs flare to wide cuffs. She has bone hand wraps, a scar, and her hair pulled back with a grey streak. Her one orange item is the vault key's lanyard. She is built on the ganger skeleton, so Armature's saki_* poses fit as authored. The Collector ◆ wears a slate puffer that is widest at the middle, with his head sunk into the collar and the hood lined in orange. He carries THE BOOK, an oxblood ledger, under his near arm.

Saki and the Collector
F-7F71 cold aisles at 4×. From left: the enforcer, Saki in her coat, Saki in her guard (saki_up) and bare, the Collector with the Book, and Big Rat. The same frame in black is below.
DIV 00-G

F73 The Wet Market, F75 Saki's Crown

Tidewater's and Drywall's tagged boxes, modelled · the F73 light and water

F73. Fifteen models are written in tools/vox/market_props.py and baked, from the F73 picks:

Most take the place of their boxes by themselves. The cylinder, the crates on the gutting line, the mail slots that are not bricked up, and the fish and hens from burst tanks are dressed where they spawn.

F73 props
G-1The F73 set under a neutral key. Back row: the Nerps! bar, a cylinder, the washer, the pump, the shrine, the mail slot, a hen. Front row: the stall and its price board, the ice bed, the hawker cart, the gutting table, the landing desk, the rice cooker, a fish crate, a fish.

F73 light and water (Afterimage's note). The water takes the room's light, and its patches came in three greens. Under warm light they read as camouflage, and the sluice's teal made the foam mint, a cyan that belongs to High Water. Two changes fix it:

F73 water before and after
G-2Before (top) and after (bottom), 2–3×: the landing under warm light, the window and the sluice.
F73 at game scale
G-3F73 at game scale, 1×: the landing, fish row, the laundromat and QUIET ROOM, the smoking room's Nerps! bar in pink, the window, and the sluice with the Kings' pump.

F75. These models are written in tools/vox/crown_props.py:

F75
G-4F75 at 1.5×: the counting room with the steel wall, the ledger room and the vault door, the vault, and Saki's office with her desk and chair against the city.

F74, the gang's own street (tools/vox/street_props.py, on Drywall's level-lab tags):

F74
G-5F74 at 1×: the garden, the escalator seats, the food court, the pachinko hall, the gym, and the ring in the old cinema.
F74 food court, pachinko, gym
G-6The tiled seat rows, the food tables, the pachinko islands, and the tin weights with the bag.
F74 ring and garden
G-7The ring under its truss beside the capsules, and the garden.
DIV 00-L

D1 built · the voxel dollhouse

Jonas picked D1 "with extra love and detail" · art-lab · Opticals' monitor and dive · Readout wires it in

This is the select running live. The tower is built in code from voxels.

C6 is objects here: F73's flood standing in its slot with the burn's char and embers mid-floor, F70 dark under its one red lamp, and F74's rubble.

The dollhouse select, F73 out
L-1F73 slid out, its CRT showing the flooded feed. The card and floor labels are a stand-in until Readout wires his own over it.
L-2The selection steps F70 (dark, IR feed), F73, F74 and the crown, while the monitor follows along the frame.
L-3Confirm on F73: Opticals' dive into the tube, which then collapses to black, where the briefing takes over.
L-4The finale: from the floors High Water holds, the sea climbs over F74 and the crown until only the antenna lamps are left.

Web cost (cold headless Chrome, 1904×985, RTX 3070 via ANGLE/D3D11, tools/art/dollhouse_bench.tscn):

Glow is off on the Web. This machine's GPU hides the GPU cost in Chrome, so an integrated-GPU check is still open.

DIV 00-K

The Tower 3 cutaway, four new looks

Jonas: "very svg drawn by the venerable early model generations" · in-engine renders · 2026-10-02

RECOMMENDEDD1, the voxel dollhouse, with D3's monitor as its card

The tower becomes a real voxel model, sliced open at the front. Each floor is its own level seen through the cut, and the floor you pick slides out like a drawer.

  • Why D1: it is the only direction where the select is made of the same stuff as the game. Voxel slabs, lit rooms, people moving and the drowned city around it all say Tower 3 before any text does. C6 turns into objects: water standing in the floor slot, a char heap with embers, the blacked-out floor under its one red lamp, rubble where the rig fell.
  • Why with D3: Opticals' CCTV feeds are the strongest moving image on this board. The selected floor's feed can sit in the contract card on the right, so you see the model and the live floor together. D3 also stands on its own as a whole screen (see below), and is the safer pick if the 3D menu worries you on Web.
  • What stays: Readout's selection, input and crown finale stay as they are. In the finale the sea rises up the model and over the crown.

D1 needs about 8 h, D1 with the D3 card about 10 h (Opticals' part included), and it can land Sunday morning. Pick D1, D2, D3, D4 or a cross. I build nothing until then.

Voxel dollhouse

D1
recommended

A 3D voxel tower in a SubViewport behind the labels. Each floor's plate is its back wall, with slabs, end bays and ducts built from cubes in front. People move as specks, the camera drifts slowly, and the drowned floors below F70 run into a sea that reflects the lit floors.

Cost
≈ 8 h
Web
medium · ~7,700 cubes in 14 MultiMeshes, about 100 draws, glow off on Web; a bench is still to run
Fits
the game's voxels, C6 as objects

Orange schematic

D2

Contract Optics on paper: each plate dithered to 1-bit orange, huge floor numbers, hazard chevrons under the selection, a scanline wipe on each move. C6 shows as marks in the same ink: ruled water, a black burn blot, a crossed-out collapse, a DARK stamp.

Cost
≈ 4 h
Web
low · 6 textured rects with one shader, canvas text
Fits
NERV and MAGI screens, the HUD's orange

Monitor wall

D3

Opticals' build: Tower 3's security office. Six CRTs show baked CCTV loops of the real floors with their crews at their posts. The selected feed fills the big monitor over the contract card. Dark floors drop to IR, flooded floors lose hold, F72 shows NO SIGNAL. On confirm the camera zooms in and the tube collapses.

Cost
≈ 6–8 h (Opticals, with Readout's hook)
Web
low · 7 rects with one CRT shader; desktop < 0.1 ms (within noise), Web ≤ 0.3 ms (about 0.5 ms on an integrated GPU, estimated); about 0.36 MB of feed strips
Fits
the codec, the optics, the found-footage voice

Split-flap board

D4 · wild card

The lobby departures board: every floor is a row of flaps (name, contract, state) over a slot showing its level. Moving the selection rattles the rows over to the new state, in orange. The mundane future, made literal.

Cost
≈ 3–4 h
Web
low · about 250 cells drawn per frame; static rows can be cached
Fits
the lobby, the Toll, the queue hall
D1 voxel dollhouse
K-1D1, the voxel dollhouse, with F73 slid out: the flood standing at the sluice, the burn's embers mid-floor, F70 dark under its red lamp, the waterline ring at F74, the crown's beacons.
K-2D1 in motion: the selection steps F70, F73, F74 while the camera drifts and the people walk.
D2 orange schematic
K-3D2, the orange schematic, with F74 selected: chevrons under it, the rig crossed out, F73's water and burn marks, F70 stamped DARK.
K-4D2 in motion: the scanline wipe tears through each newly selected floor.
D3 monitor wall
K-5D3, the monitor wall (Opticals), with F70 selected: its feed on IR after the power cut, F73's feed flooded, F72 with no signal.
K-6D3 in motion: F73, F71 through channel static, F70 on IR, then confirm, a zoom into the tube and the briefing typing on.
D4 split-flap board
K-7D4, the split-flap board, with F74 selected. Every row carries its floor in a slot under its flaps.
K-8D4 in motion: the rows rattle over as the selection moves.

All four are in-engine renders (tools/art/tower_lab.tscn -- look=voxel|schematic|flap; D3 is Opticals' monitor_wall on optics-lab). They use the real plates and the C6 states of a demo run: F70 dark, F73 flooded and burnt, F74's rig down. None of them touches tower_select.gd yet. The pick becomes a visual layer behind Readout's selection, with one hook from him.

DIV 00-J

C6 · Your route on the cutaway

tier 3 · what you did to each floor, drawn on its plate · built on art-lab

When a contract ends, the floor is boiled down into a small record kept with its LEVEL REGISTER entry. The record holds four things. First, where water stands or has left tide marks, and where soot and blast scorch are, all read off Sim's cells and scar grid in 5-pixel slices along the floor. Second, whether the power is out, and where the emergency red hangs. Third, what came down: dropped decks and breached walls. The cutaway draws that record over the floor's plate. Flooded floors hold water to a tide line. Burnt floors carry char along the floor, flame tongues up the walls and soot pooled under the ceiling, with a few embers still in it. Blacked-out floors stay dark except for the one red lamp. Collapses show as ragged holes with their rubble heaped below. Each floor's overlay is baked once into one texture, about 1.5 ms, one floor per frame as the cutaway opens. After that it costs one textured rect a frame, plus a dim and a pulse on dark floors. The newest run's damage replaces the last.

F70 dark, F73 flooded and burnt, F74 collapsed
J-1A test run, each floor selected. F70: the booth's blackout, the red lamp at the Toll, and the lookout gallery's first span down with its rubble on the lobby floor. F73: the cistern burst, its flood standing in the sluice on the right; the smoking room's cylinder left char and soot mid-floor. F74: the lighting rig over the ring is down, its gap torn under the ceiling and its wreck on the canvas; breach wall 1 is cut. (F74 has no fire source.)
The cutaway after the run
J-2The whole select after the run, with F73 selected; the other floors sit dimmed as usual.
DIV 00-I

Tower 3 cutaway plates

for Readout's level select · each floor rendered as a true section

Every playable floor is rendered from the level itself: orthographic, straight on, end to end at one scale. The floor is shot in eight segments so the moods follow along the lane, and it's transparent above the ceiling and through the glass. Each plate is 1520 × 184, twice Readout's 760 × 92 band. The floor fills the lower half, and his line art keeps the ceiling above it. F72 has no level, so it stays his drawing. The plates are in assets/ui/cutaway/f70–f75.png, made by tools/art/cutaway_plates.tscn.

The tower's plates stacked
I-1The plates stacked in tower order on the select's dark: the crown F75 (the vault door and the office), F74 (the garden to the ring), F73 (the market), F72 (locked), F71 (the farm to the core cage), F70 (the lobby to the Toll).
DIV 00-H

A4 · The floor remembers

Jonas picked B for every state (2026-10-01) · built

The Sim's cell state is a 0.5 m RGBA8 texture: wet, charge, heat and fuel gas. Blockwork samples it on every floor block, and the rules read the same cells, so what you see is what the rules read. The Sim binds it at floor start. The states live in value and texture, never in a new hue. Charge is a cold white, and embers are a warm white; night vision keeps both.

The picked looks
H-1The picked looks on a hand-painted state, 3× crops. From left: wet, charge, heat, gas. Top row F73, bottom row F71.
Under night vision
H-2Night vision (Opticals' pass, Bone), in the real main scene with the blackout. For F73 and then F71: lit, then two night-vision frames half a 12 Hz tick apart. Left of the enforcer are wet and charge; right of him, heat and gas. Charge reads as a shimmering field with cold-white flashes and no full-field strobe. The embers keep their warm white. The wet sheen and gas dither survive as value.
The scars
H-3The scars (Hitlag's scar texture, which never fades). From left: soot, a charcoal film with ash flecks; dried water, a pale bloom with a lighter tide line; blast scorch, jagged dark streaks. Top F73, bottom F71.

Web cost (headless Chrome at 2560 × 1440, a cold browser per run, ?quiet, and Slipway's wall-clock frame timing). It's a paired A/B at three beats per floor, with states bound and unbound in alternating 2 s windows:

Every delta is under the 0.3 ms ceiling and within the noise.

DIV 00

The answer first

recommendation and what you pick

RECOMMENDEDRoute A, Blockwork, with one pipeline for every prop

The world is built of 0.125 m blocks, as the people are built of voxels.

  • One shader gives every box a block pattern. Formwork concrete, carpet tile, steel plate, terrazzo, plywood and cladding are chosen per 0.125 m block (two character voxels, 4 screen pixels). A brick, a pier or a fracture piece carries the same blocks, so destruction matches the world with no extra work. It adds no triangles and no textures.
  • Props are modelled by code in Blender, once. props_blender.py writes 8 props now, and each exports three finishes: remeshed into blocks for route A, chamfered with baked AO for route B, flat for route C. The film uses the same source files, so Opticals' recruitment film and the game share the pipeline (see hero assets).
  • Light: the window is the one shadow-caster. It draws the mullion bars across the floor. The scene uses at most six unshadowed OmniLights, additive light pools, emissive signs and neon, and a mood per section. No LightmapGI: baked light cannot follow a floor that falls down.
  • The city: a panorama rendered from Babel's own 1,260-building data for the far city, shader-lit towers for the middle distance, and an interior-mapped facade across the street. All three are parallax layers on the camera.

About 18 h to production for Floor 70. No downloads are needed. Web risk is low: every route held 60 fps in Chrome on this machine, and route A costs no more draw calls than the greybox. Pick A, B or C (or say what to cross); I build nothing until then.

Blockwork

A
recommended

A voxel-scale environment with procedural block materials. The world reads as the characters do; every piece that breaks is a box, and boxes are native here.

Cost
≈ 18 h
Web
low · 369 draws in the mock
Fits
voxel rigs, masonry, Kit boxes

Trim & Bake

B

Low-poly hard-surface: chamfered Blender props with baked AO, and 32 px/m trim textures drawn in code. It looks the cleanest, but at 30 px/m the bevels are under one pixel.

Cost
≈ 22 h
Web
low-medium · textures, 372 draws
Fits
the intro's close-ups more than the game

Ink & Grain

C

Flat colour, light in three dithered bands, a one-pixel ink outline on everything, characters included. It has the strongest graphic identity, next to Shinkawa and Opticals' Cut-Out.

Cost
≈ 17 h
Web
medium · outlines double the draw calls (679)
Fits
High Water's ink brand; touches the rig materials
DIV 01

What 640 × 360 can hold

the numbers every route answers to
MeasureValueConsequence
screen density30 px per metre (orthographic size 12 over 360 px)A 2 m vending machine is 60 px tall and a 0.3 m sign letter is 9 px. Detail below 0.07 m (2 px) does not survive.
character voxel0.066 m = 2 pxThe enforcer is about 29 voxels tall. The environment must stay coarser, or the people stop being the sharpest things on screen.
environment block (A)0.125 m = about 4 pxBricks (1.0 × 0.5), cinder courses (0.5) and their shatter pieces (halves) all divide into it, so fracture lands on block boundaries.
bevel (B)0.02–0.03 m = under 1 pxChamfers vanish at game scale. Only the baked AO and silhouettes read. B pays off in the intro's close-ups.
texel density (B)128 px over 4 m = 32 px/mOne texel per screen pixel. Photo textures (ambientCG, Poly Haven) at 1K would shimmer and read as a different game.
outline (C)0.034 m hull = 1 pxReadable on every box, but every mesh draws twice.
DIV 09-A

Blockwork

voxel-scale environment · procedural block materials · recommended

Every surface is sampled in 0.125 m blocks. The shader picks each block's colour from a pattern: board-formed concrete with joints and tie holes, carpet tile with a quarter-turned pile and a corporate band every 6 m, terrazzo chips, plywood grain rows, steel plate with seams and rust. A one-pixel rim is lit on top edges and dark on side edges, from the BoxMesh UVs, and draws every brick's mortar line and every fracture piece's outline. Blender props arrive already remeshed into blocks, with AO baked per block.

Route A: Floor 70 at night at game scale
A-1Floor 70, night, game camera, the 640 × 360 frame enlarged with nearest-neighbour. The Toll's deck on four cinder piers, the voxel kiosk and cash cage on it, the PV neon, rain on the curtain wall, and Babel beyond.
A-1 ×3Blocks on the piers, the formwork and the terrazzo. The rigs stay the finest grain on screen.
A-2 ×3Collapse: pieces keep their blocks and rims.

A-2 · A-3 · A-4Destruction and mood

Route A: the Toll collapsing
A-20.55 s after two piers are cut and the barrel goes. The deck sags and drops with the kiosk riding it; crates burst into eighths, and the rubble is cinder blocks. 131 live pieces.
Route A at dusk
A-3Dusk: a low sun through the curtain wall lays mullion shadows across the lane. The only change is one light and one uniform.
Route A blackout
A-4Blackout (the Tap floor's twist): an emergency red omni and its pool, lamps dead, and the city still lit outside.

A-5 · A-6 · A-7Style tiles, prop kit, signs

Route A style tiles
A-5Style tiles at 2× game scale: concrete, curtain wall, carpet, steel, signage, graffiti, cable runs, lighting.
Route A prop kit
A-6The prop kit's voxel finish next to the enforcer: vending machine, server rack, desk and chair, planter, jersey barrier, toll kiosk, turnstile, cash cage.
Route A sign set
A-7The sign set in DotGothic16 at one font pixel per screen pixel. Neon is glowing blocks on the grid.

How destruction reads

  • Bricks, cinder cells, slabs and crates are boxes, and every box gets the block pattern in its own space, so a loose piece keeps its look while it tumbles.
  • The one-pixel rim outlines every piece in flight, which is what makes a debris storm read at 640 × 360.
  • Blender props (vending machine, kiosk) are already blocks. When one shatters, Debris spawns box chunks in the prop's key colour, and they look the same.

Shader list (Web-safe, Compatibility)

  • blockwork.gdshader: 11 patterns, rim, floor grime, local or world space, vertex colour. ALU only, no textures, no screen reads. At 230k pixels, fragment cost is not the constraint.
  • glass, pool (banded in 5 steps), card (the pano posterised to blocks), city_building, interior (quantised to 0.125 m): shared with the other routes.

Sign system

  • DotGothic16 (OFL, already shipped) at 1/30 m per font pixel, so glyphs are exact pixels. Signs are wide and chunky, and plates auto-fit their text.
  • Neon letters are built from glowing 0.125 m blocks on a stroke font, with a banded halo quad.

Prop kit

  • Done by code: vending machine, server rack, desk + chair, planter, jersey barrier, toll kiosk, turnstile, cash cage.
  • Next: water cooler, copier, filing cabinet, office sofa, lift call panel, hanging blade sign frame, fluorescent pendant, cable tray and junction box, sandbag and pallet barricade, mattress and cot for the cubicle homes.
  • Kenney Furniture Kit (CC0, on H:) can be fed through the same remesh for anything we don't write.

Cost

  • Productionise the shader and material table in Pal/LevelKit, and hook Debris/BrickWall to local space: 3 h.
  • Ten more props through props_blender.py: 5 h. Restyle Kit.sign(): 2 h.
  • Window wall, backdrop and lighting pass: 4 h. Dressing Floor 70: 3 h. Web check: 1 h.
≈ 18hourslowWeb risk369draws (mock, unbatched)
DIV 09-B

Trim & Bake

low-poly hard surface · baked AO · trim textures

The same Blender props, chamfered (0.02–0.03 m, two segments) with Cycles AO baked into the vertex colours. Structure uses StandardMaterial with object- or world-space triplanar trim textures drawn in GDScript: formwork with drips, carpet tiles, panel seams with rivets, stone chips. They are 128 px over 4 m, so one texel covers one screen pixel. This route is the intro's pipeline, run at game scale.

Route B: Floor 70 at night
B-1Floor 70, night, game camera. Cleaner and softer; the desks and barriers read as manufactured.
B-1 ×3The AO reads and the bevels don't. Next to the voxel rigs, the props start to look like a different kit.
B-2 ×3Fracture pieces are plain boxes against chamfered props, which is the mismatch this route would have to pay to fix.
Route B collapse
B-2The collapse. The masonry is fine, but a chamfered kiosk breaking into square chunks will show.
Route B dusk
B-3Dusk. Metal and GGX pick up the low sun; this route handles specular best.
Route B blackout
B-4Blackout.
Route B style tiles
B-5Style tiles (2×): trim textures at 32 px/m.
Route B prop kit
B-6The prop kit, trim finish: 130–880 faces per prop, 26–170 KB per GLB.
Route B signs
B-7Signs in DejaVu Sans Condensed Bold (Tower 3 wayfinding) and JetBrains Mono (the stencils), with bevelled plates.

How destruction reads

  • Masonry and slabs stay boxes; object-space triplanar keeps each piece's texture fixed to it.
  • Props need a pre-fractured variant or an inner "core" material (concrete aggregate, rebar ends) to avoid clean cubes coming out of chamfered shells: +4 h.

Shader list

  • StandardMaterial3D: triplanar, nearest-with-mipmaps, vertex colour for props, metallic for steel. Four 128² textures generated at load (about 200 KB of VRAM, zero download).
  • Decals are not available in Compatibility (Godot's Decal node needs Forward+/Mobile), so graffiti and hazard tape become alpha quads.

Prop kit and signs

  • The same 8 props plus the same ten more; each needs a bevel check and an AO bake (about 1 min each, headless).
  • Corporate wayfinding plates carry the Tower 3 brand; the gang signs are hand-painted plywood and lightboxes.

Cost

  • Trim set and material table: 3 h · ten more props: 6 h · fracture variants and inner material: 4 h · decals as quads: 2 h · light and backdrop: 3 h · dressing: 3 h · Web: 1 h.
≈ 22hourslow-medWeb risk372draws
DIV 09-C

Ink & Grain

flat colour · dithered light bands · one-pixel outline

A custom light() quantises light into three bands and breaks the band edges with a 4 × 4 Bayer dither on the 640 × 360 grid. Shade is tinted cool, light warm. Every mesh gets an ink hull one pixel wide: boxes grow along sign(VERTEX) so their corners stay closed, and other meshes grow along their normals. The voxel rigs are switched to the same ink shader, so the characters and the world are drawn in one hand.

Route C: Floor 70 at night
C-1Floor 70, night. Reads as a drawing: the outlines separate every prop, and the dither turns light into pixel texture.
C-1 ×3Ink hull and dithered band edges. The rigs in ink.
C-2 ×3Every fragment outlined: the storm is readable, but busy.
Route C collapse
C-2The collapse. The outlines draw the rubble like a comic panel; 871 draw calls at this moment.
Route C dusk
C-3Dusk, in bands.
Route C blackout
C-4Blackout: the red pool dithers into the floor.
Route C style tiles
C-5Style tiles (2×). Texture is replaced by colour, band and line.
Route C prop kit
C-6The prop kit, flat finish (34–258 faces).
Route C signs
C-7Signs in DejaVu Serif Condensed, lettered and outlined.

How destruction reads

  • The best-separated pieces of any route, because every fragment is outlined. The risk is noise: the 131-piece burst becomes a line-drawing storm. Outlines could be dropped on pieces under 0.03 m³.

Shader list

  • ink.gdshader (custom light, Bayer), ink_outline.gdshader (next_pass, cull_front, unshaded); pools banded and dithered, the pano dithered to 5 levels.
  • Cost: each mesh draws twice (679 vs 369 draws). Fix it by merging static dressing into one mesh per room and using MultiMesh walls, which Drywall has already proposed.

Sign system and characters

  • Lettered signs, outlined plates, flat neon with dithered halos.
  • The rigs need their materials swapped (Armature's lane). It is a one-line override here, but it changes the character look Jonas approved.

Cost

  • Shaders to production: 2 h · rig material hook: 1 h · ten more props: 4 h · signs: 2 h · band and light tuning: 3 h · dressing: 3 h · batching for the outline cost: 2 h.
≈ 17hoursmediumWeb risk679draws
DIV 09-X

Side by side

the same frame, three finishes
ABlockwork
BTrim & Bake
CInk & Grain
A · BlockworkB · Trim & BakeC · Ink & Grain
sits with voxel rigsBest: the same language, a coarser grainWeakest: smooth props next to blocky peopleGood, once the rigs are inked too
destructionNative: pieces are blocksMasonry fine; props need fracture variantsClearest pieces, but noisy in bursts
detail at 30 px/mBlock patterns, 4 px grainAO only; bevels lostLine and band
authoringCode (shader + Blender remesh)Code (Blender bevel + AO bake + trim)Code (shaders), fewest props details
intro linkSame sources; the film uses B's finishIdentical pipelineMatches Cut-Out's ink
draws · primitives (mock)369 · 60 k372 · 53 k679 · 51 k
hours≈ 18≈ 22≈ 17
Web risklowlow-mediummedium
DIV 26

Light and the city beyond

Compatibility renderer · Web · windows onto Babel

Jonas: "we could start adding lighting, it'd add a lot too, windows and a city parallax in the background". This section compares the techniques in route A's frame (the other routes use the same layers: B raw, C dithered).

26-1Lighting on Compatibility and the Web

TechniqueVerdictWhy
LightmapGInoRendering baked lightmaps works on Web, but the Web editor cannot bake them. Baking in Compatibility has open bugs, including a 4.6-dev regression (#111465; the workaround is to bake in Forward+ and switch back). The real problem is ours: a bake records shadows of piers and decks the player will knock down. After the first collapse, the baked light lies. At most, bake the indestructible shell (floor, core, RC columns); even that leaves baked shadow under a gallery that has fallen. File size grows with texel scale and directional mode; not measured, because we would not ship it.
one shadowed directionalyesCity light (night) or low sun (dusk) through the curtain wall is the only shadow caster. It gives mullion bars across the lane and correct shadows from falling pieces, for one shadow pass.
OmniLights, budget ≤ 6 per screen, no shadowsyesThe fluorescent pendant, the Toll's sodium lamp, the vending machine's face, the PV neon. Compatibility shades up to 8 lights per object by default; adding 8 more omni lights cost desktop about 0.1 ms and stayed at 60 fps on Web (bench below). The fallback for weak devices is to drop the omnis and keep the pools.
fake pools (additive quads)yespool.gdshader: one quad, blend_add, no light slot, no shadow. Banded in A, dithered in C. The pools do most of the visible work (compare 26-2).
emissive signage and neonyesUnshaded materials plus a halo pool. Glow (bloom) is not relied on; the halo quad is the bloom.
mood per sectionyesNight, dusk and blackout are one function of four values: ambient, the directional light's angle and colour, the lamps on or off, and the pano's time of day. Proposal for Floor 70: Ki at night, Shō at night, Ten flickering (the Wrecker hits the lamps), Ketsu blackout after the Toll falls, then the city lights stay on outside.
Omni lights only
26-2aOmniLights only: pools off.
Fake light only
26-2bFake only: pools and emissives, no omni. Most of the look survives, which is the low-end fallback.
Both
26-2cBoth: the recommended setup.

26-3Measured cost (Web export, Chrome, and desktop)

A bench build of this mock (art_mock.tscn as the main scene through an art_bench feature tag) runs each configuration for 5 s while the camera pans ±4 m. The machine is the dev PC (RTX 3070) in Chrome via ANGLE/D3D11. On the Web, frame time is locked to vsync, so the useful columns there are whether it holds 60 and its worst frame. The desktop run is uncapped (vsync off) and shows the headroom.

ConfigWeb fps (run 1 / run 2)Web worst frameDesktop uncapped, meanDesktop worstDraws
A floor7060.0 / 60.016.7 ms1.68 ms (594 fps)3.2 ms382
B floor7058.7 / 60.0125 ms in run 1 (a first-use shader compile), 16.7 in run 21.87 ms4.9 ms386
C floor7060.0 / 60.116.7 ms2.17 ms6.1 ms702
A + 8 extra omni60.0 / 60.016.7 ms1.78 ms4.5 ms383
A fake light only60.0 / 60.016.7 ms2.18 ms7.1 ms383
A collapse (110 pieces)60.4 / 60.118.8 / 21.4 ms2.28 ms9.4 ms464
C collapse60.6 / 60.120.8 / 21.9 ms2.85 ms10.5 ms864

Web frames are vsync-locked, so 16.7 ms means "made it". I also tried to read main-thread render CPU time on the Web (viewport_get_measured_render_time_cpu), but it returned implausible values (tens to hundreds of ms at a steady 60 fps), so those numbers are not reported.

The shading choice does not decide Web performance. Draw calls and first-use shader compiles do: B's 125 ms hitch is the same problem as the known 1.5 s freeze at the first collapse. Whatever route is picked, its shaders join Drywall's Warmup. An integrated-GPU laptop has not been measured; that is the next check once a route is chosen.

26-4Windows and the city: five techniques

TechniqueWhat it is hereCostVerdict
panorama from Babel's datatools/art/babel_pano.tscn reads the Dark City Shining Babel setting data (42 named buildings, 1,219 procgen buildings, streets, roads, mountains, sea) and builds it as boxes with the window shader. It renders a 140° strip from Tower 3 at floor-70 height (about 255 m), looking at the Pinnacle, in 10 slices, stitched to 2560 × 720. Night and dusk versions exist. It is our own asset, made from the setting data.One quad, one 2.5k texture (about 100 KB PNG)far layer
shader cityAn earlier project's building.gdshader, adapted: hash-lit window grids, lit fraction per time of day from one uniform, haze. It runs on one merged mesh of about 12 towers in layer space.One drawmid layer
interior mappinginterior.gdshader: each window cell is a fake room (back wall, floor, lit ceiling panel, desk silhouette, blinds), traced from a virtual eye set per frame. The rooms shift as the camera pans, even though the camera is orthographic.One quad, ALU onlynear facade
parallax layersAll layers are children of the camera and slide back against its travel. follow is 0.95 far, 0.8 mid and 0.55 near. An orthographic camera gives no parallax for free, so this is what gives depth.A few lines per frameyes
glass: rain, reflection, hazeglass.gdshader: a tint, a soft reflection band and the lamps behind the camera reflected low, rain streaks (night only), and per-layer haze toward the sky colour.One transparent quad per wallyes, subtle
skybox / cubemapA cubemap needs a perspective camera to show parallax. Under our orthographic camera the pano card gives the same view for less.—no
Far layer only
26-5aFar: the Babel panorama alone.
Mid layer only
26-5bMid: the shader city alone.
Near layer only
26-5cNear: the interior-mapped facade alone.
All layers
26-5dAll three: the recommendation.

26-6Parallax: the camera pans 8 m

x − 4
x
x + 4The facade slides slower than the mullions, and the far city barely moves.

26-7The view from Tower 3, rendered from Babel's data

Babel panorama, night, 140 degrees from Tower 3
Babel panorama, dusk

Scroll sideways. Night and dusk, 140°, the Pinnacle (Takam Tower, 700 m) left of centre, and the ridge on the right. It is boxes and one window shader, lit by one uniform. Neighbours closer than 160 m are left out; the interior-mapped near layer plays them.

DIV 01 60

Asset sourcing

what exists, what could come in, what we write

I searched the local asset library first. Proposed download list: none. Every route is buildable from code plus what is already in the local library. Drywall's round-1 finding holds: kit meshes as they come "read as two games" next to the voxel rigs. The useful way to bring a pack in is as geometry fed through our own finish (remesh, flat or bake), never as-is.

SourceLicenceCoversUse
tools/art/props_blender.py (ours)our codevending, server rack, desk + chair, planter, jersey barrier, toll kiosk, turnstile, cash cage; next: cooler, copier, filing cabinet, sofa, lift panel, sign frames, pendants, cable tray, barricades, cotsprimary: three finishes per prop
Kit / BrickWall / Slab (Drywall)our codepiers, decks, catwalks, partitions, breach walls, gate, crates, barrelsstructure; restyled by the route material
kenney/furniture-kit/2.0 (H:)CC0 (License.txt in pack)desk, deskCorner, chairDesk, computerScreen, pottedPlant, trashcan, lounge sofas, lampSquareCeiling, bookcasesoptional geometry source for the remesh; credit Kenney if shipped
kenney/retro-urban-kit, city-kit-roads (H:)CC0detail-barrier-strong, construction barrier/cone/light, detail-cablesoptional, same way
quaternius/modular-scifi-megakit (H:)Quaternius licence (QAL 1.0; keep out of public repos)vents, pipes, cables, crates, computersoptional for the service core; heavy pack, pick single meshes
ambientcg rooftop materials, polyhaven street props (H:)CC0photo PBR concrete, steel, fabricno: photo texture at 32 px/m clashes; at most a colour-sampling reference
synty/polygon-office (H:)Synty EULA, purchasedthe ideal subjectno: not an open free-to-use licence (jam rule), and a different style
setting city dataDark City Shining Babelthe city outside every windowrendered by us (panorama)
building.gdshaderearlier in-house codehash-lit window gridsadapted for the mid layer
fonts in assets/fontsOFL / Bitstream-DejaVu, already creditedDotGothic16, DejaVu Sans/Serif Condensed Bold, JetBrains Monosign faces per route; no new fonts

Provenance. Once a route is picked, the asset provenance list gets a section "Environment (tools/art/)". It lists the props (authored by Claude as Plumb, written as code in props_blender.py, Blender 5.0 headless, primitives, bevel, remesh and AO bake, no image or 3D generation), the shaders, the Babel panorama (rendered from the setting data by babel_pano.gd), and any Kenney geometry with its credit. Like the voxel characters, these are written as code by an AI assistant.

DIV 01 90

Hero assets for the recruitment film

one pipeline with Opticals (boards/intro, treatment C)

Jonas picked C, the High Water recruitment film, and asked for better assets than voxel ("clashes with the brand look"). The proposal already on the table is glossy code-modelled CGI for the ad with a closing cut to "actual footage". That fits one pipeline: every hero asset is a Blender script, and each script exports a glossy finish for the film and a block finish for the game. The ad and the game then show the same object, which makes the cut to "actual footage" a joke about the same thing.

AssetFilm (glossy, trim finish)Game (block finish)Hours
HW enforcer "product" bodyHard-surface plates modelled per bone on the voxel rig's joint list (.rig.json), so the rig's poses drive it: graphite shell, bone-white panels, ranger-green webbing, cyan only on the emittersstays Armature's voxel enforcer (the reference)6
gravity glove, macroClose-up hero with emitter rings and serialsvoxel glove exists2
railgunRails, capacitor cells, stencilsvoxel railgun exists2
"liabilities" (Vermin)Stay voxel, frozen, shot flat on a halftone card: the ad sees people as inventoryas is0
Toll kiosk + cash cageAlready written (trim finish); product-lit as the "grievance"block finish0.5
studio setBlack floor, turntable, a key and rim card, done in Godot with a "product" shader (matcap-style rim and key in light(), since Compatibility has no SSR or GI)—2
Babel skylineThe panorama above, at dusk, as the ad's backdropthe window layer0

Pipeline: tools/art/*.py (Blender headless, -b --python, about 20 s for 8 props × 3 finishes) → build/art/props/*.glb → Godot. The blender MCP bridge was not running, so everything here ran headless. The Hyper3D and Hunyuan generators on that bridge are never used. About 12.5 h for the film's heroes, shared with Opticals: they own shots and lighting, and Plumb owns models.

DIV 01 31

For Jonas

picks and rulings
  1. Route: A, B or C, or a cross (for example A with C's outline only on characters and thrown bodies). I recommend A.
  2. Gang colour: the brief says Petty Vermin are orange and rust. The level greybox uses PV pink neon. I used orange throughout; confirm, and Drywall's Pal.NEON[0] changes with it.
  3. Moods per section: night, flicker, blackout after the Toll, as proposed in 26-1? Dusk could instead be Floor 75's (Saki's glass floor).
  4. Hero pipeline: may Plumb model the film's enforcer body per bone, as above, with Opticals owning shots?
  5. Kenney geometry through the remesh: allowed (CC0, credited), or strictly our own props?