Punt Landing
A flat-bottomed ferry punt tied to a stone quay at dusk, a lantern on the post, and a verb no piece in this lab had before: STOW. Take cargo off the quay and put it on a spot on the deck — and the boat answers, because the answer is arithmetic. Draft is the total mass over the waterplane area, so every basket you take aboard sinks her by a computable amount; a load placed off the centreline is a moment, and she lists by the angle that moment makes against the water's restoring stiffness. The waterline painted on her hull is the whole instrument: it is not a health bar drawn over the scene, it is where the river actually meets the boat. Load her heavy and she floats low with no margin for a mistake; load her light and you can be careless. Lean the weight out on the rail and the cargo creeps, then goes over the side — and if the roll beats the creep, the river comes in. AI agents authored the piece end to end: the concept painting, six code-modelled Blender asset kits, the Unity scene and its physics, and a D-mixolydian score for harp, clarinet, koto and contrabass with a music box held back for a full manifest — every sound a sampled instrument over a recorded river.
Play it now
DRAG cargo onto a deck spot · TAB picks and ARROWS choose the spot · SPACE casts off · P pauses, R restarts · 11.9 MB of code-modelled assets
The concept is the contract
The piece was concepted first — an AI key-art painting — and every element in it was then code-modelled in headless Blender and audited against that painting before a line of gameplay was written. The pair below is the contract and the live build.


Concept prompt
A river ferry landing at golden dusk: a flat-bottomed wooden punt moored alongside a mossy stone slipway, part-loaded with woven willow baskets, a stack of pale crates, a hessian grain sack and a small oak barrel; a long ferryman's pole leaning against a mooring post; a lit brass lantern hanging from a timber post; willows trailing over deep teal water with lily pads and reeds at the bank; a low timber jetty with iron mooring rings and a coiled rope; a thatched ferryman's hut up the bank; warm amber lantern glow against cool green-blue water, long low sunlight, high-end stylized 3D game render, no text, no watermark, no UI
Code-modeled in Blender
Six asset kits, written as Blender Python against the platform sculpt kit — no downloaded models anywhere — and audited render by render before entering the engine. Fifteen judged unit rounds in total; the defects each round fixed are named in the captions.






Measured, honestly
| Measure | Value | Conditions |
|---|---|---|
| Buoyancy self-test | PASS | at boot, a known 100 kg is placed at a known 0.30 m off the centreline and the resulting draft and heel are checked against the closed form computed independently — draft within 0.0005 m, heel within 0.05° |
| The model | draft = m / (ρ·A); heel = atan( Σm·x / (ρ·I·k) ) | A = 4.60 × 1.30 = 5.98 m² waterplane; I = LB³/12 = 0.842 m⁴ about the centreline; hull 210 kg; freeboard 0.34 m |
| What that means aboard | empty 0.035 m · full manifest 0.16–0.22 m · all seven 0.26 m | the five lightest leave 0.14 m of rail to play with; the five heaviest leave 0.078 m, so the heavy manifest has to be stowed dead amidships |
| glb payload | 11.85 MB total, largest 5.12 MB | six kits, prune+dedup; gates are 12 MB total and 6 MB single. Ring segments 36→18 alone took the set 15.31 MB → 11.85 MB — a basket wall is nine tubes, and a 0.2 m coil does not need 36 sides |
| Unity build | ≈38.9 MB (11.8 wasm + 27.2 data) | Unity 6 WebGL, scene built entirely in code, Minimal template |
| Rounds | 15 Blender unit rounds + engine rounds on the live URL | audit-until-clean; every fix round rebuilt, redeployed and md5-verified end to end |
| Honest rows | the first physics was correct and therefore boring; the first freeboard made the fail state unreachable | a 5.98 m² waterplane is genuinely large, so a realistic 191 kg manifest sank her 3 cm against 47 cm of rail — the numbers were right and the game was inert, and only real ferry-freight masses made the waterline mean anything. Then, with the rail that high, the cargo always slid before the water could reach it: swamping could not happen at any load, and the boat had to become the shallow thing a punt actually is |
Made by AI, compiled by the real Unity 6 engine
The loading is driven by a closed-loop telemetry autopilot on the live build, not by screenshots: it reads the piece's own console feed, drags one crate with the pointer to prove that path works, then loads the manifest on the keyboard path, casts off, and finally tries to capsize her on purpose by stacking the heavy freight out on one rail — so the list, the slide and the swamp are all proven rather than assumed. Every refusal the piece makes says why it refused, which is what lets an audit tell "the input missed" apart from "the game said no". The interesting defects here were not rendering bugs but design ones, and both were found by putting numbers on them: the physics was correct on the first pass and therefore inert, because a punt's waterplane is large enough that a realistic load barely moves her; and once the loads were real ferry freight, the rail was still so high that the cargo always slid off before the water could ever come over it — the fail state existed in the code and was unreachable in play.