abstract-glass
abstract-glass
ABSTRACT · MATERIAL SUITE — shots 06-10 of the RICH-SCENES reel. Five shots that take s05 GLASS apart and re-point it five ways.
Read the rig's notes
THE ARGUMENT. Nothing here reaches for an asset. The sea is one tag, the
caustics are one slide, and the whole material suite is the same six
definitions the root <materials> block declares. Each shot extends
depth-from-MATERIAL: the backdrop is a material INPUT rather than
decoration, which is why every one of them builds something behind the
subject before it turns the transmission up.
# scene dur transition device the shot
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 (was zoom-through) iphone one gradient-glass definition on three sites
THE TRAP IN THIS PART — SPOT COOKIES (08). A spot's map is a slide the beam
projects THROUGH, and it multiplies the beam, so it is real projected light
and not an overlay. assets/images/cookie-*.png already ship. Three traps:
· angle is RADIANS, unlike every rotation in this grammar;
· a spot is aimed with target, never look_at — three aims at light.target,
and a spot ignores its own rotation, so look_at leaves the beam on the
origin;
· a decay=2 spot's irradiance is I/d^2 and d is in MILLIMETRES here, so a
2.4 m throw needs an intensity in the millions.
WHY <gradient-glass#house> IS AT THE ROOT (10). It is declared ONCE and worn
by a sphere (material=house), a ui3d card (material="house" on a ui item)
and the iphone's casing (body-material=house). Same definition, one shared
field set, three sites — and the colour tracks live on the definition's own
lobes rather than on any element, so every attachment re-tints together. A
per-element track would opt that element OUT of the shared set and break the
demonstration.
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 in this file is a millimetre.
LOOK — shared across every part:
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.
POST. bloom -> unreal_bloom, grain/vignette -> film_grain, then fxaa last on
every shot to settle thin-edge crawl. prismatic_dispersion is authored ONLY
on the shots that carry chroma-split as a look (spread 0.01) — running it at
spread=0 elsewhere is a full-screen pass per frame doing nothing.
THE EXPOSURE LADDER. Bloom strengths sit BELOW the source 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 and its bloom picks highlights
out of an already-dim frame, where this reel has real area lights shaping
real device hardware. What 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.
FOG is per-shot, tinted to that shot's background (fog(color= near= far=),
near/far x100 like everything else). It is what stops each floor plane from
reading as a lit grey slab behind the subject.
CAMERA GRAMMAR. Every shot is one continuous move authored as a <frame>
track: explicit position/look_at rows, and a node= fill= row wherever the
shot lands on its device. The device landing is the added beat — the source
page never framed anything, so each shot has somewhere to arrive.
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.
SPLIT FROM abstract.promo. This file is one of eight parts cut out of the
943 KB abstract.promo; the reel-level document that used to head that file is
now README.md in this directory. Scene bodies are byte-identical to the
original.
BOUNDARY. s10-material closed on `transition=zoom-through transition-duration=0.6 transition-accent=#ffb347` when it had
a successor in the same file. It is the last scene here, so it carries
transition=none; restore the line above it when re-concatenating.
Capture: nx run tools:capture:webgl -- --project promos/primitives/scenes/abstract/abstract-glass.promo --width 1920 --height 1080
Preview: /packages/runtime/index.html?project=promos/primitives/scenes/abstract/abstract-glass.promo- Topic
- scenes
- Scenes
- 5
- Kind
- reference rig
//
ABSTRACT · MATERIAL SUITE — shots 06-10 of the RICH-SCENES reel. Five shots
that take s05 GLASS apart and re-point it five ways.
THE ARGUMENT. Nothing here reaches for an asset. The sea is one tag, the
caustics are one slide, and the whole material suite is the same six
definitions the root <materials> block declares. Each shot extends
depth-from-MATERIAL: the backdrop is a material INPUT rather than
decoration, which is why every one of them builds something behind the
subject before it turns the transmission up.
# scene dur transition device the shot
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 (was zoom-through) iphone one gradient-glass definition on three sites
THE TRAP IN THIS PART — SPOT COOKIES (08). A spot's map is a slide the beam
projects THROUGH, and it multiplies the beam, so it is real projected light
and not an overlay. assets/images/cookie-*.png already ship. Three traps:
· angle is RADIANS, unlike every rotation in this grammar;
· a spot is aimed with target, never look_at — three aims at light.target,
and a spot ignores its own rotation, so look_at leaves the beam on the
origin;
· a decay=2 spot's irradiance is I/d^2 and d is in MILLIMETRES here, so a
2.4 m throw needs an intensity in the millions.
WHY <gradient-glass#house> IS AT THE ROOT (10). It is declared ONCE and worn
by a sphere (material=house), a ui3d card (material="house" on a ui item)
and the iphone's casing (body-material=house). Same definition, one shared
field set, three sites — and the colour tracks live on the definition's own
lobes rather than on any element, so every attachment re-tints together. A
per-element track would opt that element OUT of the shared set and break the
demonstration.
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 in this file is a millimetre.
LOOK — shared across every part:
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.
POST. bloom -> unreal_bloom, grain/vignette -> film_grain, then fxaa last on
every shot to settle thin-edge crawl. prismatic_dispersion is authored ONLY
on the shots that carry chroma-split as a look (spread 0.01) — running it at
spread=0 elsewhere is a full-screen pass per frame doing nothing.
THE EXPOSURE LADDER. Bloom strengths sit BELOW the source 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 and its bloom picks