glow-lines
glow-lines
GLOW LINES — two neon lines that are nothing but a path. Each one is born BEHIND the camera (amber on the left, cyan on the right), streaks past the lens, carves through the set — a corkscrew round the phone, a loop-the-loop — and ends by closing a ring behind the phone, where it stays. Companion to glow.promo (same material, same set).
Read the rig's notes
THE ELEMENT: <neon> (packages/engine/lib/neon-line.ts)
neon#id(points="x y z, x y z, …" radius=2.25 color=#dark emissive=#hue emissive-intensity=…
head-size=5)
head ← where the lit stretch ENDS, as a fraction of the line's length
0 0
4.6 linear 1
tail ← where it STARTS
…
- the line passes THROUGH the points on a centripetal Catmull-Rom curve: smooth by
construction, no handles, no overshoot — write the route, not the curve;
- the tube is built once; head/tail only move a draw range on it (no per-frame geometry);
- head 0 → 1 with tail at 0 draws the line on; tail following 0.14 behind makes a comet;
holding tail at the ring's first point leaves the ring drawn;
- head-size puts a hot bead on the head (emissive × head-boost, default 3);
- the cut ends are capped round. Material vocabulary = path3d's (the glow recipe).
Fractions are of LENGTH: equal steps are equal distances, so a linear head is a constant
speed. The ring-start fraction (0.799 amber, 0.821 cyan) is the arc length up to the
ring's first point over the whole length (centripetal Catmull-Rom, as three.js builds it).
ROUTE (mm; the camera sits at 0 120 700)
amber (−420 220 1150) behind-left → past the lens on the left → into frame, huge → a low
swoop → a CORKSCREW round the phone, 1.5 turns of radius 150 rising 40 → 250 →
over the back → a 115 mm ring behind the phone, centre (0 125 −80), clockwise from
12 o'clock. 3.59 m.
cyan (420 60 1150) behind-right → past the lens on the right → a LOOP-THE-LOOP facing the
lens, radius 90 round (−60 150 420) → a dive low across the phone's foot → up the
right → a 92 mm ring inside the amber one, counter-clockwise. 3.22 m.
TIMING
amber head 0 → 1 over 0 → 4.6 s; tail 500 mm behind (0.139), parked at 0.799 from 4.32 s
cyan head 0 → 1 over 0.8 → 5.2 s; tail 500 mm behind (0.155), parked at 0.821 from 5.1 s
both rings flash ×6 at 5.3 s and settle; the ring practical rises as they close. Each line
sits in a group that creeps 2 mm, so the keyed flash reaches the bloom (glow.promo, TRAP).
Preview: http://localhost:4444/runtime?project=promos/primitives/materials/glow/glow-lines.promo- Topic
- materials
- Scenes
- 1
- Kind
- reference rig
//
GLOW LINES — two neon lines that are nothing but a path. Each one is born BEHIND the camera
(amber on the left, cyan on the right), streaks past the lens, carves through the set —
a corkscrew round the phone, a loop-the-loop — and ends by closing a ring behind the
phone, where it stays. Companion to glow.promo (same material, same set).
THE ELEMENT: <neon> (packages/engine/lib/neon-line.ts)
neon#id(points="x y z, x y z, …" radius=2.25 color=#dark emissive=#hue emissive-intensity=…
head-size=5)
head ← where the lit stretch ENDS, as a fraction of the line's length
0 0
4.6 linear 1
tail ← where it STARTS
…
- the line passes THROUGH the points on a centripetal Catmull-Rom curve: smooth by
construction, no handles, no overshoot — write the route, not the curve;
- the tube is built once; head/tail only move a draw range on it (no per-frame geometry);
- head 0 → 1 with tail at 0 draws the line on; tail following 0.14 behind makes a comet;
holding tail at the ring's first point leaves the ring drawn;
- head-size puts a hot bead on the head (emissive × head-boost, default 3);
- the cut ends are capped round. Material vocabulary = path3d's (the glow recipe).
Fractions are of LENGTH: equal steps are equal distances, so a linear head is a constant
speed. The ring-start fraction (0.799 amber, 0.821 cyan) is the arc length up to the
ring's first point over the whole length (centripetal Catmull-Rom, as three.js builds it).
ROUTE (mm; the camera sits at 0 120 700)
amber (−420 220 1150) behind-left → past the lens on the left → into frame, huge → a low
swoop → a CORKSCREW round the phone, 1.5 turns of radius 150 rising 40 → 250 →
over the back → a 115 mm ring behind the phone, centre (0 125 −80), clockwise from
12 o'clock. 3.59 m.
cyan (420 60 1150) behind-right → past the lens on the right → a LOOP-THE-LOOP facing the
lens, radius 90 round (−60 150 420) → a dive low across the phone's foot → up the
right → a 92 mm ring inside the amber one, counter-clockwise. 3.22 m.
TIMING
amber head 0 → 1 over 0 → 4.6 s; tail 500 mm behind (0.139), parked at 0.799 from 4.32 s
cyan head 0 → 1 over 0.8 → 5.2 s; tail 500 mm behind (0.155), parked at 0.821 from 5.1 s
both rings flash ×6 at 5.3 s and settle; the ring practical rises as they close. Each line
sits in a group that creeps 2 mm, so the keyed flash reaches the bloom (glow.promo, TRAP).
Preview: http://localhost:4444/runtime?project=promos/primitives/materials/glow/glow-lines.promo
promo#glow-lines(width=1920 height=1080 fps=30)
materials
standard#gw-deck(color=#17140f metalness=0 roughness=0.85 envmap-intensity=0.04)
standard#gw-wall(color=#0f0d0b metalness=0 roughness=0.95 envmap-intensity=0.1)
// =====================================================================================
// SCREEN — glow.screens.html converted by scripts/html-screens.mts (as in glow.promo).
// =====================================================================================
template#t-gw-phone
card#gw-phone(x=0 y=0 w=71 h=154 r=9.1 fill=#0d0b09 shadow=false)
card(x=0 y=0 w=71 h=154.02 r=9.1 fill=#0d0b09 clip=true)
text(x=6.19 y=5.83 size=2.91 weight=600 color=#f5efe6 origin=left font_family=Inter w=5.75 wrap=false) "9:41"
icon(x=53.34 y=4.28 size=3.09 set=tabler name=antenna-bars-5 color=#f5efe6 stroke_width=2)
icon(x=57.53 y=4.28 size=3.09 set=tabler name=wifi color=#f5efe6 stroke_width=2)
icon(x=61.72 y=4.28 size=3.09 set=tabler name=battery-4 color=#f5efe6 stroke_width=2)
text(x=4.37 y=13.89 size=2.37 weight=700 color=#8a8073 origin=left font_family=Inter tracking=0.14 w=29.8 wrap=false) "HOME · 3 LIGHTS ON"
text(x=4.37 y=18.9 size=5.1 weight=800 color=