Skip to content
Immersive & 3DPenelopepattern

Scroll to Stage

Arm a GPU stage only when it enters the viewport, and drive a single uniform from scroll velocity — never from a second RAF.

Built here · no external address

Penelope: Long-running fidelity. Maintained excellence over years.

Exhibit case

The scene, running in the page.

Arming the exhibit…

Why it matters

Mounting WebGL on page load taxes every visitor who never scrolls to the exhibit. In-view arming plus a shared scroll bus keeps the rest of the canon cheap.

Key techniques

  • IntersectionObserver with a generous rootMargin to arm before arrival.
  • --scroll-velocity from the site spine as the only motion input.
  • Context disposal on unmount.

What to steal

The transferable part.

One scroll writer, many readers. CSS variables beat a pub/sub of listeners.

What not to copy

Context-specific or costly.

Do not attach Lenis inside the stage. The page already owns smooth scroll.

Inclusion rationale

Bridges Hephaestus to Hermes — scroll as the shared instrument of the building.

Technical register

Performance

Zero GL cost until intersection. One uniform write per frame while armed.

Mobile

Skip arming under reduced motion; show the static ingot plate.

Accessibility

The stage has an accessible name; the canvas is decorative relative to the prose.