DESIGN.md@examples/3d-acme · git:20260928.e5b3b84 · 2026-09-28 · sha256 cec6329545a771a1

DESIGN.md@examples/3d-acme git:20260928.e5b3b84A

Immutable. This exact content never changes and is served at /api/v1/blob/cec6329545a771a1.

# Design: 3d-acme

The spec `src/film.html` was built from. World units: y is up, the floor is y = 0; the frame is about 8.8 units tall at the camera's target.

## Canvas and loop

- 1080 x 1080, 60 fps, 10.000 s = 600 frames, cycle loop.
- Tempo 120 BPM: beat 0.5 s, 16th 0.125 s, bar 2 s.
- Live area 104 to 976 on both axes: the 3D type stays inside it at every sampled moment; the labels sit on the 8 px grid.

## Palette and materials

| Role | Hex | Used for | Material |
|---|---|---|---|
| bg | #221A3D | background and floor | floor shadow 0.42 |
| cream | #FFF1DE | the letters' faces | gloss 0.35 |
| coral | #FF6F61 | the letters' walls and bevels | |
| sun | #FFC53D | the ring (r 3.6, tube 0.13) | gloss 0.6 |
| teal | #35D0BA | three orbs (r 0.34) | gloss 0.7 |
| lilac | #9D8CFF | a rounded cube (0.8, radius 0.15) | gloss 0.4 |

Shading keeps hue: each surface is its colour times a light level, plus white highlights and rim.

## Light

Key light travelling (-0.38, -0.8, -0.9): from above, in front and to the right, strength 0.74; ambient 0.34; four filtered shadow taps, softness 1.3 texels on a 1024 px map over 18 units; rim 0.18.

## Camera

| At (s) | Yaw | Pitch | Distance | Target | Field of view | Spring |
|---|---|---|---|---|---|---|
| rest | -16 | 14 | 16.5 | 0, 0.35, 0 | 30 | |
| 1.00 | | | 15.0 | | | DOLLY |
| 7.00 | | | 16.5 | | | DOLLY |

Sway: 1 cycle per loop, 10 degrees of yaw.

## Objects

| Object | Kind and size | Rest place and turn | Colours | Motion | Loop |
|---|---|---|---|---|---|
| ACME | text, Unbounded 900, cap 1.08, depth 0.5, bevel 0.05, track +40 | 0, 0.02, 0 | cream / coral | 1.5: each letter turns over (rx -360, FLIP, 16ths); 5.0: hop 1.1 up (HOP, 16ths); 5.375: down (LAND, 16ths) | |
| RING | torus r 3.6, tube 0.13 | 0, 0.24, 0; tilted 4 and 3 degrees, just above the floor | sun | | orbit 1 (the tilt turns round, a slow wobble) |
| ORB | sphere r 0.34, 3 radial copies at r 4.3 | 0, 0.7, 0 | teal | | orbit -1, bob 4 x 0.3, phases spread |
| CUBE | box 0.8, radius 0.15 | 3.2, 0.4, -3.4; turned 30 | lilac | | spin 1 about y |

## Labels

| Label | Text | Face and size | Baseline | Colour |
|---|---|---|---|---|
| URL | EXAMPLE.COM | IBM Plex Mono 500, 40 px, +60 | 880 | sun |
| DEMO | DEMO COPY, FICTIONAL PRODUCT | IBM Plex Mono 500, 26 px, +20 | 944 | cream |

## Loop seam

- The flips end a whole turn from where they started and fold back to 0 once they settle; the hop returns to 0.
- The camera's dolly back (DOLLY, 5 s) is still settling at 10 s and carries over the seam.
- Cycles: ring orbit 1, orbs orbit -1 and bob 4, cube spin 1, camera sway 1.

## Checks

- The ring lies just above the floor so its near arc always passes below the word, never across it: a ring at mid-height sliced through the letters whenever its tilt turned toward the camera.
- Stills critique: 18 checks, all pass (the palette gate does not apply to shaded 3D).
- Loopcheck: purity 0; the seam changes about as many pixels as any other 0.1 ms step (12,969 against 6,591 to 12,657).
- Render: 2 subframes for 525 of 600 frames (slow drifts), up to 9 on the flips; about 8 minutes on a 4-core machine without a GPU, under load.
- Verify: H.264 High, yuv420p, 1080 x 1080, 60/1, 600 frames, 10.000 s, BT.709 tags, faststart; the background decodes to (34, 26, 60) for #221A3D; the lowest mp4frames PSNR is 38.9 dB.