Skip to content
Docs
Open Promoeyes
abstract

abstract

RICH-SCENES — the KIT REEL, ported and then extended twice. Seven shapes, six materials, THIRTY shots, and in every shot a real device carrying the reel's own HUD.

Read the rig's notes
THE SOURCE. A single-page three.js reel: one normalised kit (chamfered
cube · icosphere · torus · capsule · thin ring · quad · torus-knot hero),
six materials (clearcoat · metal · matte clay · emissive · glass ·
thin-film), two procedural "HDRIs" (a bright studio box, a dark four-source
stage), four distributions (grid · ring · fibonacci sphere · spline) and a
post chain of bloom + chromatic aberration + vignette + grain. Nothing in
the reel is an asset; everything is a parameterisation of those parts. That
is the thesis, and it is why the port is a port and not a redraw.

THE FIRST EXTENSION. Shots 01-05, 11 and 28 are the port. Shots 06-10 and
12-16 are not new ideas — they are the two shots that carried the port
(05 GLASS and 11 TUNNEL) taken apart and re-pointed, five ways each.
Nothing in them reaches for an asset either: the sea is one tag, the
caustics are one slide, the mirror hall is two nodes, and the whole
material suite is the same six definitions the port declared.

THE SECOND EXTENSION — shots 17-27, and the argument of this file. The two
material/repetition suites hold the camera still and move the WORLD. This
one inverts that: eleven shots in which nothing in the set does anything
interesting and the CAMERA is the subject. They are the eleven moves a
camera can make about a thing that is standing still — crane, orbit, push,
dolly-zoom, lateral parallax, threshold, whip, vertical drop, rise, retreat,
and the corkscrew that combines four of them — and each one is the SAME
159.5 mm phone standing on the SAME floor, so the only variable in the
suite is the move. That is the point: if the phone were doing anything, the
reader would credit the phone.

  · CRANE (17) changes ONE number — height — and reads as grand for it.
  · ARC (18) changes only azimuth. PUSH-IN (19) changes only distance.
  · VERTIGO (20) changes distance and fov TOGETHER, against each other, so
    the subject holds still while the world behind it opens up.
  · PARALLAX (21) changes only x — the FOREGROUND does the reveal.
  · FLY-THROUGH (22) crosses two thresholds. WHIP (23) changes only the
    look direction, and changes it faster than anything else in the reel.
  · GOD'S-EYE (24) is the corkscrew with the corkscrew removed.
  · ASCENT (25) is shot 27 run backwards. PULL-BACK (26) is shot 19 run
    backwards. SPIRAL DIVE (27) is all of them at once, speed-ramped.

THE ADAPTATION. The page's HUD (slate, shot name, recipe line, clip strip,
tri/call counters) was screen-space DOM. Here it is a DEVICE — the thing the
brief asked for — so every shot carries an iphone / macbook / ipad standing
in its own set, wearing that HUD on real glass, lit by the shot's own rig
and reflecting the shot's own environment. The counters are gone (a promo
has no live renderer.info); the slate, the recipe and the clip strip stay,
and each screen also carries the ONE number that shot is about.

THE UNITS. 1 page unit = 100 mm. The kit is fist-sized (a 100 mm chamfered
cube, a 98 mm torus), the cameras sit 600–1200 mm out, and the devices
render at true physical size — 159.5 mm of iphone standing next to a 100 mm
cube is the whole reason the shots read as objects on a table rather than as
graphics. Every length below is a millimetre.

LOOK — carried unchanged from the page:
  ink        #e9e6df   dim  #7c7970   line  #23232a
  mark       #ffb347   the one accent; every emissive surface is this
  cool       #7ad7ff   the dark stage's side source
  warm       #ffa25e   its opposite
  backgrounds  s1 #101116 · s2 #0b0c10 · s3 #05060a · s4 #121014 ·
               s5 #04050a · s6 #04040a · s7 #0a0b0f

HAZE. Three lobes, hz0/hz1/hz2, matched across every scene, so the room is
continuous under the cuts. Colours per shot are the shot's own key/fill:
amber + cool on the studio shots, cool + warm on the dark stage. They drift
on a linear position track — no pulse, no decay, sizes 900–2600 mm so they
read as LOBES against the near-black background, never as a full-frame wash.
In the camera suite they are also the only thing in the frame that reports
the move: a lobe that slides across the picture is parallax made visible,
which is why shots 17-27 park theirs low and wide rather than deep.

POST. bloom → unreal_bloom, grain/vignette → film_grain, and SSAA ×4 on
every shot (aa method=ssaa samples=4: four jittered scene renders averaged
in linear HDR) to settle thin-edge crawl — FXAA, fused into the grain pass,
smeared the grain and left the DOF shots (no MSAA) jagged. prismatic_dispersion is authored ONLY
on the six shots that carry chroma-split as a look (spread 0.01) — it used to
run at spread=0 on the other 22, a full-screen pass per frame doing nothing.
The page's per-shot white flash on the cut is the flash-through-white gap on
s4→s5.

  shot            bloom  thresh  spread  grain / vignette
  01 kit           0.42   0.86       —    0.012 / 0.30
  02 grid          0.50   0.84       —    0.012 / 0.30
  03 orbit         0.80   0.78       —    0.012 / 0.32
  04 cascade       0.42   0.86       —    0.012 / 0.30
  05 glass         0.90   0.80       —    0.014 / 0.34
  06 refraction    0.70   0.80       —    0.0125 / 0.32
  07 attenuation   0.75   0.80       —    0.0125 / 0.33
  08 caustics      0.85   0.78       —    0.0125 / 0.32
  09 sea           0.55   0.88       —    0.0125 / 0.32
  10 one material  0.60   0.84       —    0.0115 / 0.30
  11 tunnel        1.00   0.70    0.01    0.014 / 0.36
  12 aperture      1.00   0.72    0.01    0.014 / 0.35
  13 corridor      0.80   0.80       —    0.0125 / 0.34
  14 prism rain    1.10   0.70    0.01    0.015 / 0.38
  15 shaft         0.90   0.76       —    0.014 / 0.36
  16 mirror        1.00   0.75       —    0.014 / 0.34
  17 crane         0.70   0.82       —    0.0125 / 0.34
  18 arc           0.85   0.78       —    0.0125 / 0.32
  19 push-in       0.60   0.84       —    0.0115 / 0.32
  20 vertigo       0.95   0.76    0.01    0.014 / 0.36
  21 parallax      0.70   0.82       —    0.0125 / 0.33
  22 fly-through   1.05   0.72    0.01    0.014 / 0.35
  23 whip          1.10   0.70    0.01    0.015 / 0.38
  24 god's-eye     0.65   0.84       —    0.0115 / 0.30
  25 ascent        0.80   0.80       —    0.0125 / 0.34
  26 pull-back     0.70   0.82       —    0.0125 / 0.36
  27 spiral dive   0.75   0.80       —    0.0125 / 0.34
  28 lockup        0.55   0.84       —    0.01 / 0.28
(the page's own bloom, for the four shots it had: 0.55 · 0.70 · 1.05 · 0.60 ·
1.35 · 1.15 · 0.85.)

The bloom strengths sit BELOW the page's and the thresholds well above them,
and that is a port decision, not a transcription error. The page shaded with
no lights at all — its entire picture is IBL off two procedural HDRIs, and its
bloom is picking highlights out of an already-dim frame. This reel has real
area lights shaping real device hardware, so the same strength at the same
threshold puts the whole frame over 1.0 and every material — clearcoat, clay,
the phone shells — comes out white. The exposure ladder that survived: ambient
0.09–0.16, one area key at 1.5–2.6, env intensity 0.16 (dark stage) to 0.5
(studio). Anything above that and the reel stops being a dark reel.

THE SPEED RAMP (17, 19, 22, 25, 26, 27) is a camera technique, not a tag. A
frame track just interpolates between the rows it is given, so a ramp is
authored by SAMPLING one smooth curve UNEVENLY rather than by keyframing a
speed. Shot 27 is a single parametric helix — 3 turns, radius 3.3 m to
380 mm, height 8.4 m to 82 mm — with progress along it bent by a
piecewise-smoothstep table (hang · drop · stall · drop · land) and sampled
at 31 rows. Every row in every ramped shot carries easing=linear ON PURPOSE:
any other easing re-eases between the samples and flattens the ramp back
into a constant glide.

Six shots run their own table, and the table IS the shot:
  17 crane      0 · 0.03 · 0.34 · 0.86 · 1     a long hang, then a fall
  19 push-in    0 · 0.06 · 0.62 · 1            most of the travel early, so
                                               the last metre takes 3 s
  22 fly-through 0 · 0.06 · 0.30 · 0.68 · 1    slow up to the threshold,
                                               fast through it, slow after
  25 ascent     0 · 0.06 · 0.42 · 1            intimate, then it leaves
  26 pull-back  0 · 0.04 · 0.34 · 1            back-loaded: the retreat
                                               never stops accelerating
  27 spiral     0 · 0.05 · 0.46 · 0.52 · 0.90 · 1

THE UP VECTOR is the other half of any move that looks down its own axis.
Near-vertically down, up="0 1 0" is nearly parallel to the view direction
and the frame roll goes undefined — the shot jitters or snaps. Three shots
deal with it, three different ways, and the difference is the lesson:
  · 27 SPIRAL authors up per row, starting as the horizontal (sin θ, 0, cos θ)
    a top-down frame wants and rotating into world up across p 0.12 → 0.58.
    The horizon swinging into place under you is most of what sells it.
  · 25 ASCENT runs that program BACKWARDS — world up at the pad, rotating
    out to the horizontal radial as the camera goes over the top.
  · 24 GOD'S-EYE never comes level at all, so there is nothing to rotate
    into: up stays "0 0 1" for all 6.5 s. A fixed non-degenerate up is the
    correct answer whenever the shot does not change hemisphere, and
    authoring a swing there would put a roll in a shot whose whole claim is
    that it has none.

TWO RIGS THE MATERIAL/REPETITION SUITES ADDED, both of which have a trap:
  · SPOT COOKIES (08, 15). A spot's map is a slide the beam projects
    THROUGH, and it multiplies the beam — so it is real projected light, not
    an overlay. assets/images/cookie-*.png already ship. Two traps: angle
    is RADIANS, unlike every rotation in this grammar, and a spot is aimed
    with target, never look_at (three aims at light.target; a spot
    ignores its own rotation, so look_at leaves the beam on the origin).
    Third: a decay=2 spot's irradiance is I/d², and d is in MILLIMETRES
    here, so a 2.4 m throw needs an intensity in the millions.
  · REFLECTORS ON END (16). reflector-ground builds a plane, and a plane's
    normal is +Z, so rotation "0 90 0" / "0 -90 0" faces two of them inward.
    Each renders the scene once from its own virtual camera, so this is one
    bounce per wall, not infinite recursion — at 680 mm apart it still reads
    as a hall, and that is the honest claim.

WHAT THE CAMERA SUITE ADDED, and the traps in it:
  · THE DOLLY ZOOM IS A SOLVED FOV, NOT A KEYFRAMED ONE (20). The subject
    holds its size only if fov = 2·atan(H / 2d) at every row, for one fixed
    framed height H. H = 560 mm here, so 2.6 m → 760 mm of dolly pairs
    12.3° → 40.5° of fov, and the phone is 28 % of frame height at both
    ends. Author fov independently of d and it is not a vertigo, it is a
    zoom with a dolly in it.
  · A DOLLY ZOOM NEEDS DEPTH BEHIND THE SUBJECT or there is nothing to warp.
    20 spends its whole set on 16 receding rings and two colonnades, and
    that geometry is the effect — over an empty stage the same camera does
    visibly nothing.
  · PARALLAX IS A THREE-PLANE PROBLEM (21). The reveal is solved, not eyed:
    the sightline from camera to the laptop crosses the foreground plane at
    x = 0.469·xcam + 74.3, so the slab has to span (−870, −70) for the
    uncovering to land at 55 % of the track and not at 20 %. Two planes read
    as a wipe; three read as a room.
  · THERE IS NO MOTION-BLUR PASS (23). A whip pan cannot be sold in post
    here, so it is sold by the SET: 18 emissive streak capsules on a 1.6 m
    ring, crossed at ~240°/s, plus the reel's highest dispersion at 2.6 —
    shot 14 held that record until this suite. And it overshoots 6° past
    the subject and settles back, because a whip that stops dead reads as a
    cut.
  · A BEAT UNDER A SHADER GAP IS A BEAT NOBODY SEES (22 → 23). Shot 23 opens
    held 132° the wrong way, and that hold was 0.30 s behind a 0.45 s blend
    — so the premise of the shot played entirely inside a wash. The hold is
    0.85 s now and the gap is 0.30. Anything a shader transition covers is
    not on screen, whatever the scene clock says.
  · A DEVICE NODE IS ITS CENTRE, NOT ITS BASE. Every device tag's `fit`
    recentres its GLB on the bounding box, so standing one on a floor means
    floor + half the body's VERTICAL extent — 79.75 for an iphone, 118.9
    for a macbook, and (H/2)|cos θ| + (D/2)|sin θ| for anything rotated,
    which puts the flat ipad of shot 24 at 3.2 mm and not at 140.3. Author
    the surface height itself and the device sinks halfway into it.
  · A FLAT DEVICE INVERTS THE FRAME (24). An ipad at rotation "-90 0 0"
    has its screen-up along world −Z, so a camera looking straight down at
    it with up="0 0 1" renders the UI upside down. up="0 0 -1" is the fix,
    and it is the only camera in the reel that carries one.

FOG. The page ran a per-shot THREE.Fog tinted to that shot's background; it is
ported literally (fog(color= near= far=), near/far ×100 like everything
else) and it does more work here than it did there — it is what stops each
floor plane from reading as a lit grey slab behind the subject. The camera
suite pushes far out to 9–26 m, because a shot that travels nine metres and
fogs at two has erased its own destination.

CAMERA GRAMMAR. Every shot is one continuous move authored as a <frame>
track: explicit position/look_at rows where the page had a parametric path,
and a node= fill= row wherever the shot lands on its device. The device
landing is the added beat — the page never framed anything, so each shot
now has somewhere to arrive.

THE PHYSICS CODA — shots 29-30, merged in from physics.promo. Every other
shot in this reel is authored motion: a curve typed out as rows. These two
are SOLVED, and they are here because the plan listed them as impossible.
  · SEPARATION (29) is one inverse-square metaball field, meshed by
    marching cubes — f(p) = SUM(w/|p-c|^2) - 1. Eleven <drop> centres pull
    apart and the necks that thin and break between them are not modelled;
    they are what the sum does as two centres separate. One `weight` track
    takes the field from one skin to eleven domes, so the shot re-times by
    editing four rows. `flatten=` intersects the half-space above the slab,
    which is what makes each drop the plano-convex dome and not a ball.
  · SLIDE-OFF (30) is position-based dynamics: structural, shear and
    bending constraints over a particle grid, collided against the real
    device geometry voxelised into a distance field. THE PULL IS NOT A
    FORCE — it is a grip on the +x edge translated 2.5 m, and the sheet
    uncovers the laptop first and catches on its lid because it is attached
    and because it rubs, not because either beat is authored.
  The solver is BAKED — fixed timestep, fixed constraint order, seeded, run
  once into a per-frame buffer that update(t) reads — because this reel's
  hard rule is that a scrub, a re-render and a headless capture of one
  timecode agree, and a live-stepped solver gives a different sheet every
  seek. Same algorithm, made seekable.

SCENE MAP — thirty shots, three suites and a coda. The four base shots open,
then each of the two shots that carry the reel (GLASS and TUNNEL) is followed
by the suite it seeded: five that extend depth-from-MATERIAL, five that
extend depth-from-REPETITION. Then eleven that hold the world still and move
the camera. The lockup lands, and two solved shots close on the same phone.

  #   scene              dur   transition             device        the shot
  01  s01-kit            8.0   match-move             iphone        seven shapes in a row, then the index on glass
  02  s02-grid           6.5   match-move             macbook       77 cubes, one radial wave, tracked past a laptop
  03  s03-orbit          7.0   match-move             iphone        hero knot, three rings, a 140-dot shell
  04  s04-cascade        6.5   flash-through-white    ipad          45 capsules on a diagonal delay
· · MATERIAL SUITE · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
  05  s05-glass          6.5   through=s05-orb-hero   iphone        glass over an emissive backdrop
  06  s06-refraction     6.5   match-move             iphone        one bent + waved plane, wiped off by a clip blade
  07  s07-attenuation    6.5   match-move             iphone        one knot, tint by depth, one rack focus
  08  s08-caustics       6.5   match-move             ipad          a spot carrying a caustics cookie
  09  s09-sea            7.0   match-move             macbook       a heightfield sea, key light in front of camera
  10  s10-material       6.5   zoom-through           iphone        one gradient-glass definition on three sites
· · REPETITION SUITE · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
  11  s11-tunnel         7.0   match-move             iphone        30 rings on a spline the camera flies
  12  s12-aperture       7.0   through=s12-phone      iphone        18 rings, one clip blade each, irising open
  13  s13-corridor       6.5   match-move             chrome        12 ui3d panels as a hall, a browser at the end
  14  s14-rain           7.0   match-move             iphone        54 falling streaks, lit by the phone's own flare
  15  s15-shaft          6.5   match-move             imac          ray fans + a blinds cookie
  16  s16-mirror         6.5   match-move             iphone        two reflectors faced at each other
· · CAMERA SUITE — one move each, and the phone never moves · · · · · · · ·
  17  s17-crane          7.0   match-move             iphone        4.0 m of pure height, down a colonnade
  18  s18-arc            7.0   match-move             iphone        340° around a standing phone at 130 mm
  19  s19-pushin         7.0   dolly-zoom-in gap      iphone        3.6 m to 430 mm, straight, and slower at the end
  20  s20-vertigo        6.5   match-move             iphone        dolly 2.6 m → 760, fov 12.3° → 40.5°
  21  s21-parallax       6.5   match-move             macbook       1.53 m of x, and a slab does the reveal
  22  s22-flythrough     7.0   whip-pan (0.30)        iphone        two thresholds, and a ramp through both
  23  s23-whip           6.0   match-move             iphone        0.85 s the wrong way, then 132° in 0.55
  24  s24-godseye        6.5   match-move             ipad          6.2 m straight down onto a flat tablet
  25  s25-ascend         7.5   match-move             iphone        the corkscrew, run upward, 96 mm → 8.6 m
  26  s26-pullback       7.5   match-move             iphone        268 mm → 7.6 m: 82 % of frame to 2.9 %
  27  s27-descent        8.0   emerge (→ s28-hero)    iphone        8.4 m to 380 mm: a speed-ramped corkscrew dive
  28  s28-lockup         7.5   match-move             iphone+macbook the lockup, the device family, one click
· · PHYSICS CODA — authored motion stops, the solver takes over · · · · ·
  29  s29-separation     8.0   match-move             iphone        one metaball body coming apart into eleven domes
  30  s30-slide-off      8.0   —                      iphone+macbook a baked sheet pulled off two devices by friction

  208.0 s of scene + twenty-nine gaps (22.5 s) = 230.5 s on the wall.
  Those numbers are not typed anywhere below: SHOT_TABLE at the top of the
  generator holds the durations and gaps, the scene starts are solved from
  it, and every timecode on every device screen is read out of that — so a
  shot cannot drift out of step with this map. Starts, for capturing beats:
  s01 0 · s02 8.8 · s03 16.1 · s04 23.9 · s05 30.9 · s06 38.3 ·
  s07 45.6 · s08 52.9 · s09 60.2 · s10 68 · s11 75.1 · s12 82.9 ·
  s13 90.8 · s14 98.1 · s15 105.9 · s16 113.2 · s17 120.5 · s18 128.3 ·
  s19 136.1 · s20 143.9 · s21 151.2 · s22 158.5 · s23 165.8 ·
  s24 172.6 · s25 179.9 · s26 188.2 · s27 196.5 · s28 205.4 ·
  s29 213.7 · s30 222.5.

WHAT THE TWO MATERIAL/REPETITION SUITES SHARE, and why they were extended
rather than replaced. Both of the shots the reel is built on work for the
same five reasons, and every shot in their suites keeps all five:
  · near-free geometry repeated by an authored distribution (a thin ring is
    8 x 120 segments; 30 of them cost less than one device);
  · ONE accent colour doing all the emissive work, so the bloom pass has
    exactly one thing to find;
  · a backdrop that is a MATERIAL INPUT rather than decoration — s05's haze
    is the only reason its transmission reads, and s09's HDR is the only
    reason its sea does;
  · the camera INSIDE the composition rather than looking at it;
  · one post knob pushed past taste (s23 runs dispersion at 2.6, the
    highest in the reel; s14 held it at 2.4 before the camera suite).

WHAT THE CAMERA SUITE SHARES INSTEAD. It keeps the first two and drops the
other three on purpose, and replaces them with three of its own:
  · ONE SUBJECT, UNMOVED. The same phone, the same 79.75 mm centre, the same
    floor at y=0, in ten of eleven shots. A suite about movement cannot also
    be about what is moving.
  · A SET THAT ONLY EXISTS TO BE PASSED. Colonnades, receding rings, floor
    strips, foreground slabs: every one of them is there to give the move a
    rate, and none of them is the shot.
  · A SOLVED CURVE, SAMPLED. Nothing in the suite is eyeballed between two
    poses — each move is a function of one progress variable, and the rows
    are that function evaluated. It is why the ramps can be re-timed by
    editing one table instead of dragging twenty keyframes.

THREE THINGS THE PORT HAD TO CHANGE, and why:
  · CASCADE PITCH. The page tipped its capsules about their BASE at an 86 mm
    pitch. A promo node rotates about its own centre, so each capsule pairs
    90° of rotation.x with a −31.5 mm drop (H/2 − r) to land flat on the same
    floor — same end pose, no pivot rig. But a tipped capsule then reaches
    half its own LENGTH past its slot, and at 86 mm the fallen rows merge into
    one sausage. 130 mm is the first pitch where the field still reads as
    pins.
  · TUNNEL CAMERA. The page flew its spline to u = 0.92 and its rings ended
    there too. Here that runs the camera out of tunnel in the last second, so
    the fly-through stops at 0.72 and looks 0.10 ahead instead of 0.06 — a
    short look-ahead through a curve points the camera at the barrel wall.
  · GLASS TRANSMISSION. 0.40 reads as white plastic; 0.85 reads as glass. The
    difference is not the number, it is that shot 5 builds a haze backdrop
    BEHIND the orbs first — transmission shows what is behind the mesh, and
    over an empty stage a high value renders a black ball.

NO AUDIO. This is a primitives reel: no VO clips exist for it and no music
is authored, so there is no <audio> block. Add one at assembly time.

Capture: nx run tools:capture:webgl -- --project promos/primitives/rich-scenes/rich-scenes.promo --width 1920 --height 1080
Preview: /packages/runtime/index.html?project=promos/primitives/rich-scenes/rich-scenes.promo
Topic
scenes
Scenes
50
Kind
reference rig
//
    RICH-SCENES — the KIT REEL, ported and then extended twice. Seven shapes,
    six materials, THIRTY shots, and in every shot a real device carrying
    the reel's own HUD.

    THE SOURCE. A single-page three.js reel: one normalised kit (chamfered
    cube · icosphere · torus · capsule · thin ring · quad · torus-knot hero),
    six materials (clearcoat · metal · matte clay · emissive · glass ·
    thin-film), two procedural "HDRIs" (a bright studio box, a dark four-source
    stage), four distributions (grid · ring · fibonacci sphere · spline) and a
    post chain of bloom + chromatic aberration + vignette + grain. Nothing in
    the reel is an asset; everything is a parameterisation of those parts. That
    is the thesis, and it is why the port is a port and not a redraw.

    THE FIRST EXTENSION. Shots 01-05, 11 and 28 are the port. Shots 06-10 and
    12-16 are not new ideas — they are the two shots that carried the port
    (05 GLASS and 11 TUNNEL) taken apart and re-pointed, five ways each.
    Nothing in them reaches for an asset either: the sea is one tag, the
    caustics are one slide, the mirror hall is two nodes, and the whole
    material suite is the same six definitions the port declared.

    THE SECOND EXTENSION — shots 17-27, and the argument of this file. The two
    material/repetition suites hold the camera still and move the WORLD. This
    one inverts that: eleven shots in which nothing in the set does anything
    interesting and the CAMERA is the subject. They are the eleven moves a
    camera can make about a thing that is standing still — crane, orbit, push,
    dolly-zoom, lateral parallax, threshold, whip, vertical drop, rise, retreat,
    and the corkscrew that combines four of them — and each one is the SAME
    159.5 mm phone standing on the SAME floor, so the only variable in the
    suite is the move. That is the point: if the phone were doing anything, the
    reader would credit the phone.

      · CRANE (17) changes ONE number — height — and reads as grand for it.
      · ARC (18) changes only azimuth. PUSH-IN (19) changes only distance.
      · VERTIGO (20) changes distance and fov TOGETHER, against each other, so
        the subject holds still while the world behind it opens up.
      · PARALLAX (21) changes only x — the FOREGROUND does the reveal.
      · FLY-THROUGH (22) crosses two thresholds. WHIP (23) changes only the
        look direction, and changes it faster than anything else in the reel.
      · GOD'S-EYE (24) is the corkscrew with the corkscrew removed.
      · ASCENT (25) is shot 27 run backwards. PULL-BACK (26) is shot 19 run
        backwards. SPIRAL DIVE (27) is all of them at once, speed-ramped.

    THE ADAPTATION. The page's HUD (slate, shot name, recipe line, clip strip,
    tri/call counters) was screen-space DOM. Here it is a DEVICE — the thing the
    brief asked for — so every shot carries an iphone / macbook / ipad standing
    in its own set, wearing that HUD on real glass, lit by the shot's own rig
    and reflecting the shot's own environment. The counters are gone (a promo
    has no live renderer.info); the slate, the recipe and the clip strip stay,
    and each screen also carries the ONE number that shot is about.

    THE UNITS. 1 page unit = 100 mm. The kit is fist-sized (a 100 mm chamfered
    cube, a 98 mm torus), the cameras sit 600–1200 mm out, and the devices
    render at true physical size — 159.5 mm of iphone standing next to a 100 mm
    cube is the whole reason the shots read as objects on a table rather than as
    graphics. Every length below is a millimetre.

    LOOK — carried unchanged from the page:
      ink        #e9e6df   dim  #7c7970   line  #23232a
      mark       #ffb347   the one accent; every emissive surface is this
      cool       #7ad7ff   the dark stage's side source
      warm       #ffa25e   its opposite
      backgrounds  s1 #101116 · s2 #0b0c10 · s3 #05060a · s4 #121014 ·
                   s5 #04050a · s6 #04040