Skip to content
motionprompts motionprompts

StudioDialect 3D Spiral Image Gallery

WebGL animation component · Published 2026-07-27 · by vanguardia.dev

Open live demo ↗ Download source

What it does

Scroll-driven 3D spiral gallery built with Three.js: 75 curved tiles textured with 10 photos wind down a five-revolution helix, and a custom shader dims each tile as it turns away from the camera. Lenis scroll velocity spins the spiral (with decay) while scroll progress lerps the camera down through the helix; mouse movement adds a subtle X/Z parallax tilt on desktop.

How it's built

Category3d-webgl
Techthree, lenis
Complexitysection
Performance costheavy
Mobile-safeyes
Scrollhijacks scrolling

three.js webgl spiral helix gallery scroll scroll-velocity lenis shader parallax

Rebuild it with AI

This component's prompt is part of the paid library. Below you can read how it starts; the full prompt, the exact structure, timing and easing an AI agent needs to rebuild the effect, unlocks with any paid plan, yearly or lifetime.

# 3D Spiral Image Gallery
## Goal
Build a single scrollable hero where **75 curved image tiles wind down a five-revolution 3D helix**, rendered in WebGL. Ten editorial photos are cycled across the tiles, a **custom shader dims each tile as it turns away from the camera** (depth shading around the spiral), the whole spiral **slowly auto-rotates and gets spun by scroll velocity** (with inertial decay), and **scroll progress lerps the camera downward through the helix** so you appear to descend the spiral. On desktop, mouse position adds a subtle X/Z parallax tilt to the whole spiral. Smooth scroll via Lenis. After the tall hero comes a short second section.
## Tech
Vanilla HTML/CSS/JS with ES module imports (Vite/npm project). Use `three` for all WebGL and `lenis` for smooth scroll. **No GSAP, no ScrollTrigger** — all motion is a hand-rolled `requestAnimationFrame` loop with manual lerp/inertia. Put the two GLSL shader strings in a separate `shaders.js` and import them. Instantiate Lenis once with `new Lenis({ autoRaf: true })` (it drives its own rAF; you still run your own render loop separately).
## Layout / HTML
Two stacked sections; the WebGL canvas is injected into the first by JS.
```html
<section class="hero">
  <h1>Somewhere between structure and disorder new forms quietly start to emerge</h1>
</section>
<section class="about">
…

Premium prompt

Unlock this prompt, and every other one

From $99/year, or $139 once for lifetime access. Commercial license included.

See pricing Or start with the free set Already bought? Sign in

New components in your inbox

One email a week, only when new components ship, each with its live demo and prompt.