LOADING
Puzzle 1/50
Mythology
A · Depth from the plate. The Kling frame you already have, split by a depth map and moved by tilt or drag. The candle lights the panel and the keys. Type PRIAM.
LOADING
Puzzle 1/50
B · Real 3D set. The wax tablet and the candle are true 3D objects lit in real time; the room behind is a rendered set. Drag to move the camera. Type PRIAM.
LOADING
Puzzle 1/50
Mythology
C · Splat stand-in. A photoreal room the camera can move through. This is a depth mesh from one still, so edges stretch; a real splat would not. Drag to look around.

THREE ROUTES TO A 3D WORLD

Same puzzle, same keyboard, same gold. Only the world changes. Nothing here is wired to the real game: it is a lab page for choosing a direction, and the shipping game in www/ is untouched.

A · Depth plate
B · Real 3D set
C · Splat
The world
The Kling loop frames you already have, given depth. Tiro stays exactly as shot.
Five rooms built as real 3D scenes with baked light. Tiro composited in as a plate.
Five rooms captured or generated as Gaussian splats. Photoreal and walkable.
The puzzle
Glass panel, lit by the scene's candle. Same HTML as today.
A physical object: wax tablet, clapperboard, marquee, CRT, mixing desk. One per world.
Glass panel as A. Objects possible later.
Camera
Tilt parallax, slow dolly. A few degrees.
Free. Push-ins, orbits, a move on every transition.
Free, and photoreal from every angle.
Reuses
Everything. Frames, actor, colours, UI.
The actor plates and the colours. Rooms are rebuilt.
Colours and UI. Rooms are recaptured.
Throws away
The video loops (a still plus depth replaces each).
The five room videos, 300 MB of them.
The five room videos.
Build
2–3 weeks for all five worlds.estimate, one person
2–4 months. Needs a Blender pipeline and a modeller or a good AI prop pipeline.estimate
1 day spike, then 3–6 weeks if the spike holds.estimate; the newest tech here
Bytes per world
~0.3 MB (still + depth)today: 11–56 MB per loop
2–10 MB (glTF + textures)
20–100 MB per splat
Phone risk
Low. One shader, runs on anything.
Medium. Real lighting and 60 fps need a budget.
High on older phones. Splat renderers are new on mobile Safari.
The tell
Stretched edges on a big move. Keep the move small and it never shows.
A rendered room can look like a game rather than a photograph, unless the lighting is very good.
Fuzzy blobs where the capture was thin, and the actor cannot easily live inside it.
This demo is
The real thing, in miniature. Real depth map, real parallax, real lit UI.
Real 3D tablet and candle with real light. The room behind is a still with depth, standing in for a modelled set.
A stand-in. A depth mesh from one still. No splat was made.

Recommendation. Build A across all five worlds first. It reuses every piece of art, cuts the bundle from 300 MB to a few MB, and the scene-lit UI is most of the felt upgrade. Then take B's diegetic puzzle idea into A one world at a time (the wax tablet in Rome first), because the object is what makes it feel made rather than skinned. Spike C for one day before deciding whether it ever matters.

LOOK TARGETS

Stills generated with the same image model the Watch site uses, to show what B and C are aiming at. They are direction, not assets.

B · the puzzle as an object: consonants carved, vowel gaps lit from within.
B · a rendered set at game-engine quality. Used as the room behind the live tablet.
C · a room shot for capture: everything in focus, the kind of scene a splat is built from.
HOW THE DEMOS WERE MADE

Depth maps came from Depth Anything V2 (small), run on the Mac's CPU in about ten seconds per frame. The Rome frame is at 2 s of tiro_library_runway_dperfect_loop_v2.mp4.

The plate.
Its depth. White is near.

A is one full-screen shader: each pixel is shifted by its depth times the tilt, near pixels most. A brightness term centred on the candle breathes with the flame value, and the same value is written to a CSS variable so the panel border, its glow and the key tops flicker with it.

B is a three.js scene. The rendered set is a plane displaced by its depth map with real normals, so the candle's point light rakes across it. The tablet is boxes and a canvas texture; the vowel gaps are an emissive map. The camera orbits slowly and follows a drag.

C is the same displaced plane as B but from the capture-style still, deeper, with the camera free to dolly into the room. The POINTS button shows the geometry as a cloud, which is roughly what a splat is under the surface. The stretched edges you can see on a big move are exactly what a real splat removes.

Everything reacts. Typing PRIAM in any route fills the gaps, flares the candle and, in A, throws embers. Nothing here is ever still.

WHAT A REAL BUILD ADDS

A: four more depth maps (one per world), the plate cut into three planes where a subject overlaps the panel, particles per world (embers, light beams, CRT flicker, disco haze, studio dust), and camera moves on every screen transition instead of cross-fades.

B: five rooms in Blender, baked lighting, the actor plates keyed and placed, one diegetic puzzle object per world, and a 60 fps budget on an iPhone 11.

C: a one-day spike: generate or capture one room as a splat, load it in a web splat renderer on an iPhone, and measure frame rate and file size before anything else.

Abjad 3D Lab · built 4 September 2026 · lives at lab/3d-routes/ in the Abjad 2026 repo