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. 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.
LOADING
Puzzle 1/50
Mythology
D · The loop, with depth. Your Rome loop, unchanged, with a depth map computed for every frame and packed into the same video. Tiro keeps writing and the room moves with tilt or drag. Tap DEPTH to compare with the flat loop.
LOADING
Puzzle 1/50
Mythology
E · The loop, layered. Tiro is cut out of every frame, carries his own depth so his hand stays on the desk, and moves in front of a clean plate of the room with him painted out. Tilt or drag: the room shows behind his edge instead of stretching. Type PRIAM.

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.

D runs the same depth model on all 372 frames of the Rome loop at 720×1280, normalised to one global range so the brightness does not pump, lightly smoothed frame to frame, and packed beside the colour in one MP4 (colour left, depth right) so sync is free. The shader is A's, reading the left half for colour and the right half for depth. The MP4 is the whole cost.

E is D with the edge problem fixed. A video matting model (Robust Video Matting) cut Tiro out of all 372 frames in 17 seconds, and that matte travels as a third panel of the video beside the colour and the depth, so Tiro keeps his own per-pixel depth: a flat card for him made his hands float off the desk. The image model painted Tiro out of one frame to make a clean plate of the room, which registered to the original within a pixel, and the clean plate got its own depth map. The shader draws the room with a small parallax and Tiro over it with a larger one, so a tilt reveals real room behind his cheek. The LAYERS button drops back to the flat loop.

The picture reacts, the panel does not. Typing PRIAM fills the gaps and, in A, flares the candle and throws embers. The panel and keys stay still: they are interface laid over the world, and lighting them from the room read as fake.

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