iridescence-glass
iridescence-glass
IRIDESCENCE-GLASS — ten glass compositions, ten grounds. Real transmission (transmission=1, dispersion, iridescence, per-slab attenuation tints) over a floor whose caustic is PAINTED, because three.js sends no light through a transmissive mesh.
Read the rig's notes
The paint is not a stock texture: caustics.py reads THIS file, takes each
scene's directional key and every transmissive slab (path outline, position,
rotation, scale), projects the outline down the key onto the floor and paints
what that slab would throw there — a tinted shadow, a dark bevel rim and a
six-band spectral fringe whose spread grows with the slab's height and
thickness. Two maps per scene in media/:
floor-<scene>.png albedo: white = untouched, so the material `color` is
the ground. Tinted shadows multiply where slabs overlap.
glow-<scene>.png the spectral bands as light, worn as emissive_map.
So the rules are: the glass never moves (only the camera does — moved glass
would leave its caustic behind), slabs carry cast_shadow=false (the painted
shadow is the coloured one; a shadow map would add a grey slab), and after
ANY change to a slab or a key light, re-run `python3 caustics.py`.
01 paper loose stack — six different outlines, tilted, cantilevered
02 blush rainbow fan — seven petals spiralling up from one pivot
03 butter upright panes — five standing sheets, back-lit, long shadows
04 sky pebble field — eight thick pebbles in one layer, one stacked
05 mint card house — two A-frames and a roof
06 lilac ziggurat — four rings with holes and a cap, top-down
07 clay rosette — two tiers of six petals around a disc
08 cobalt twist — nine squircles, each turned 10° further, tapering
09 forest shards — angular pieces, flat, stacked and stuck upright
10 ink prism — a 260 mm triangular prism and three thick lenses
NEEDS TRANSMISSION ON. packages/engine/registries/materials.ts carries
FORCE_DISABLE_TRANSMISSION (Known-bugs.md §1); while it is true every slab
renders as opaque plastic.
Phone screen: iridescence.screens.html → scripts/html-screens.mts, trimmed to
the header, the spectrum card and the button.
Preview: http://localhost:4444/runtime?project=promos/primitives/materials/iridescence/iridescence-glass.promo- Topic
- materials
- Scenes
- 10
- Kind
- reference rig
//
IRIDESCENCE-GLASS — ten glass compositions, ten grounds. Real transmission
(transmission=1, dispersion, iridescence, per-slab attenuation tints) over a
floor whose caustic is PAINTED, because three.js sends no light through a
transmissive mesh.
The paint is not a stock texture: caustics.py reads THIS file, takes each
scene's directional key and every transmissive slab (path outline, position,
rotation, scale), projects the outline down the key onto the floor and paints
what that slab would throw there — a tinted shadow, a dark bevel rim and a
six-band spectral fringe whose spread grows with the slab's height and
thickness. Two maps per scene in media/:
floor-<scene>.png albedo: white = untouched, so the material `color` is
the ground. Tinted shadows multiply where slabs overlap.
glow-<scene>.png the spectral bands as light, worn as emissive_map.
So the rules are: the glass never moves (only the camera does — moved glass
would leave its caustic behind), slabs carry cast_shadow=false (the painted
shadow is the coloured one; a shadow map would add a grey slab), and after
ANY change to a slab or a key light, re-run `python3 caustics.py`.
01 paper loose stack — six different outlines, tilted, cantilevered
02 blush rainbow fan — seven petals spiralling up from one pivot
03 butter upright panes — five standing sheets, back-lit, long shadows
04 sky pebble field — eight thick pebbles in one layer, one stacked
05 mint card house — two A-frames and a roof
06 lilac ziggurat — four rings with holes and a cap, top-down
07 clay rosette — two tiers of six petals around a disc
08 cobalt twist — nine squircles, each turned 10° further, tapering
09 forest shards — angular pieces, flat, stacked and stuck upright
10 ink prism — a 260 mm triangular prism and three thick lenses
NEEDS TRANSMISSION ON. packages/engine/registries/materials.ts carries
FORCE_DISABLE_TRANSMISSION (Known-bugs.md §1); while it is true every slab
renders as opaque plastic.
Phone screen: iridescence.screens.html → scripts/html-screens.mts, trimmed to
the header, the spectrum card and the button.
Preview: http://localhost:4444/runtime?project=promos/primitives/materials/iridescence/iridescence-glass.promo
promo#iridescence-glass(width=1920 height=1080 fps=30)
// =====================================================================
// 01 · PAPER — the reference: six unlike outlines (wave, egg, crescent,
// kidney, disc, pick) stacked loose, each tilted a few degrees and pushed
// off the one below, so every overlap is a different pair of tints.
// =====================================================================
scene#ig01-paper(duration=3 transition=none)
renderer(tone_mapping=Neutral exposure=1 shadow_map=true shadow_map_type=pcf-soft)
camera(type=perspective fov=30 near=8.5 far=20000 position="-60 560 430" look_at="-10 50 30")
properties
frame(smooth=0)
keyframes
kf(time=0 position="-60 560 430" look_at="-10 50 30" up="0 1 0" fov=30)
kf(time=3 easing=linear position="20 540 460" look_at="-10 50 30" up="0 1 0" fov=30)
postprocessing
step(name=render)
step(name=aa method=ssaa samples=2)
background(color=#f4f2ee)
environment(hdr="photo_studio_01_2k" as_background=false background_color=#f4f2ee exposure=1 blurriness=0.05 intensity=0.5)
lights
light#ig01-amb(type=ambient color=#fffaf2 intensity=0.45)
light#ig01-key(type=directional color=#fff6ea intensity=0.5 position="330 760 -330" cast_shadow=true)
shadow(map_size="2048 2048" radius=10 intensity=0.4)
camera(near=100 far=2400 left=-600 right=600 top=600 bottom=-600)
primitive#ig01-ground(position="0 -0.6 0" rotation="-90 0 0" cast_shadow=false receive_shadow=true)
geometry