Crag Line
A lone climber on a limestone sea-cliff at golden hour, and a verb no piece in this lab had before: REACH. Drag a hand or a foot to a hold and two-bone inverse kinematics puts it exactly there — the shoulder and elbow solve by trigonometry onto the rock, not by an animation that approximately fits. GRIP is the pressure and it is spent by every pull, drained faster by crimps than by jugs and slower when your weight is on your feet, which is the thing real climbing actually teaches. Rest on a good hold and it comes back; post protection into a crack and a fall becomes a swing instead of the ground. AI agents authored the whole piece end to end: the concept painting, six code-modelled Blender asset kits, the Unity scene, and an F-lydian score for cello, english horn, pizzicato strings, acoustic bass and a vibraphone ladder held back for the top-out — every sound a sampled instrument over recorded ocean and wind.
Play it now
DRAG a limb to a hold · TAB picks a limb and ARROWS reach · rest on jugs · P pauses, R restarts · 11.3 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 lone climber halfway up a sun-warmed limestone sea-cliff at golden hour: pale ochre and bone-white limestone with deep horizontal strata, cracks and jug ledges tufted with sea-pink and heather, a slim figure in a rust-red top and slate trousers reaching up for a chalk-marked hold, chalk dust drifting in the light, a taut climbing rope running down to a rope bag and a small green canvas tent on the grassy ledge below, brass protection gear racked on the harness, gulls wheeling over a deep blue-green sea far beneath, warm low sun raking across the rock face, 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. Twenty judged unit rounds in total; the defects each round fixed are named in the captions.






Measured, honestly
| Measure | Value | Conditions |
|---|---|---|
| Limb IK accuracy | 4/4 limbs, worst error 0.091 m | boot self-test: solve each limb onto its hold, then measure where the hand/foot MESH actually ended up (not the joint), tolerance 0.25 m |
| Measured bone lengths | upper arm 0.296 m, forearm 0.263 m; thigh 0.389 m, shin 0.419 m | read from the glb's own rig markers at load; the first build shipped a 0.173 m upper arm and every hand fell 1.8 m short |
| glb payload | 11.32 MB total, largest 5.40 MB | six kits, prune+dedup; gates are 12 MB total and 6 MB single. Texture resolution 512→256 alone took the set 17.39 MB → 12.70 MB |
| Unity build | ≈47.7 MB (11.8 wasm + 26.4 data) | Unity 6 WebGL, scene built entirely in code, Minimal template |
| Rounds | 20 Blender unit rounds + 10 engine rounds | audit-until-clean on the live URL; every fix round rebuilt, redeployed and md5-verified end to end |
| Boot to first frame | 19–32 s | SwiftShader (CPU) audit rig; GPU browsers are far faster |
| Honest rows | the audit driver was the defect in three consecutive rounds; the grip economy shipped unwinnable once | the driver aimed at holds 20 m up, then moved feet where hands belong, then drifted sideways and lost height — each reported as "the piece stalled". And r8 measured resting as NON-recovering (grip 0.31→0.07 while resting), so the pitch could not be finished by anyone until the recovery rule was re-derived |
Made by AI, compiled by the real Unity 6 engine
The climb is driven by a closed-loop telemetry autopilot on the live build, not by screenshots: it reads the piece's own console feed, drags a limb with the pointer to prove that path, then climbs the pitch on the keyboard path, resting when the grip bar falls and posting protection into the cracks. The shipped run topped out at 7 m of body height after 80 reaches, then proved the pause from a terminal state, the R restart, and a fall with no protection placed resolving honestly into the lose state — 0 console errors across 40 telemetry lines. Getting there took fourteen engine rounds, and the interesting half of them were the instrument rather than the piece: the driver aimed at holds twenty metres overhead, then tried to move feet where hands belong, then drifted sideways losing the height it had gained — each time reporting the game as stalled. The piece's own defects were real too, and each was found by a number rather than a hunch: a 0.17 m upper arm that made every hold unreachable, a rig origin at the feet that hoisted the shoulders 1.42 m too high, a grip economy in which resting did not recover, and a four-limb constraint that could deadlock with no legal move — fixed by letting the feet follow the hands, which is what climbers do anyway.