podium
PODIUM — four brand stages on one podium (ports of the three.js stage kit: astra / nexora / lumen / verde). Scale: 1 kit unit = 100 mm. Podium top r=205 mm at y=54; camera 1200 mm back, eye 210, look_at (0 235 0), fov 42 (verde: 740 back, eye 155, look_at (0 180 0), fov 34). Mouse parallax → slow drifting camera keyframes, fixed look_at. Sky dome / cyclorama shaders → gradient background + drifting haze lobes + fog; halos, anamorphic streaks and beams → haze sprites; god rays → ray; ray-arc rings → emissive tori (lower half sunk under the floor = arch); Reflector floor → reflector-ground; TextGeometry → text3d (same helvetiker faces); extruded sparkle/chevron/leaf shapes → extruded-path. Scene map: astra 0–12 → nexora 12–24 → lumen 24–36 → verde 36–48 — `match` transitions morph the shared podium parts, floor, title and tagline between stages. Preview: /packages/runtime/index.html?project=promos/primitives/podium/podium.promo
- Topic
- scenes
- Scenes
- 4
- Kind
- reference rig
//
PODIUM — four brand stages on one podium (ports of the three.js stage kit: astra / nexora / lumen / verde).
Scale: 1 kit unit = 100 mm. Podium top r=205 mm at y=54; camera 1200 mm back, eye 210, look_at (0 235 0), fov 42
(verde: 740 back, eye 155, look_at (0 180 0), fov 34). Mouse parallax → slow drifting camera keyframes, fixed look_at.
Sky dome / cyclorama shaders → gradient background + drifting haze lobes + fog; halos, anamorphic streaks and beams → haze
sprites; god rays → ray; ray-arc rings → emissive tori (lower half sunk under the floor = arch); Reflector floor →
reflector-ground; TextGeometry → text3d (same helvetiker faces); extruded sparkle/chevron/leaf shapes → extruded-path.
Scene map: astra 0–12 → nexora 12–24 → lumen 24–36 → verde 36–48 — `match` transitions morph the shared podium parts,
floor, title and tagline between stages.
Preview: /packages/runtime/index.html?project=promos/primitives/podium/podium.promo
promo#podium
scene#astra(duration=12 transition=match transition-duration=1.2)
renderer(shadow_map=true)
postprocessing
step(name=render)
step(name=unreal_bloom strength=0.45 radius=0.55 threshold=0.76)
step(name=film_grain grain=0.03 scanlines=0 vignette=0.26 vignette_start=0.48 output_transform=1 exposure=1.0)
camera(type=perspective fov=42 near=10 far=20000 position="0 210 1200" look_at="0 235 0" focus=1240 dof_range=400 dof_blur=8)
position
0 0 210 1200
3 easeInOutSine 60 240 1185
6 easeInOutSine -50 190 1170
9 easeInOutSine 40 225 1155
12 easeInOutSine 0 210 1140
lights
light(type=ambient color=#9d86d8 intensity=0.5)
light(type=directional color=#cdbcff intensity=1.0 position="300 700 500" cast_shadow=true)
light(type=point color=#8b5cf6 intensity=22 distance=2400 position="0 450 150")
environment(hdr="studio_small_04_2k" as_background=false intensity=0.1 blurriness=0.6)
background(top=#190b33 bottom=#020109)
fog(color=#05020c near=1400 far=5000)
// --- dome glow + nebula washes (drifting lobes) ---
haze#nebula-a(color=#5b2f9e size="2400 1600" opacity=0.8 pulse=0 decay=0 position="0 420 -900")
position
0 0 420 -900
12 easeInOutSine 90 470 -900
haze#nebula-b(color=#7a3fc8 size="1400 1000" opacity=0.55 pulse=0 decay=0 position="-500 700 -850")
position
0 -500 700 -850
12 easeInOutSine -380 640 -850
haze#nebula-c(color=#4b2685 size="1600 900" opacity=0.6 pulse=0 decay=0 position="450 250 -880")
position
0 450 250 -880
12 easeInOutSine 330 320 -880
// --- halo ring (ray arc) + halos ---
primitive#ring(position="0 340 -320")
geometry(type=torus radius=345 tube=9 radial_segments=16 tubular_segments=160)
material(ref=basic color=#d9c2ff blending=additive transparent=true opacity=0.85)
haze#ring-glow(color=#8b5cf6 size="1300 1300" opacity=0.42 pulse=0 decay=0 position="0 320 -370")
haze#ring-core(color=#d946ef size="650 650" opacity=0.3 pulse=0 decay=0 position="0 340 -360")
ray#astra-rays(from="0 390 -410" to="0 1900 -410" color=#9a5cf0 light=false angle=0.9 spread=1800 beam-opacity=0.03 beam-intensity=0.5 streaks=0.6 streak-count=24 softness=0.7 falloff=0.5 flicker=0.02 speed=0.06 opacity=0.5)
haze#flare-top(color=#d946ef size="2000 55" opacity=0.35 pulse=0 decay=0 position="0 335 -380")
haze#flare-floor(color=#8b5cf6 size="1500 50" opacity=0.35 pulse=0 decay=0 position="0 62 -240")
haze#wash-l(color=#7c3aed size="800 800" opacity=0.35 pulse=0 decay=0 position="-600 340 -500")
haze#wash-r(color=#c026d3 size="800 800" opacity=0.28 pulse=0 decay=0 position="600 220 -550")
haze#wash-t(color=#5b21b6 size="800 800" opacity=0.3 pulse=0 decay=0 position="0 600 -600")
// --- mirror floor + veil + decals ---
source#floor(position="0 0 0" rotation="-90 0 0")
source(factory=reflector-ground width=6000 height=6000 resolution