A sphere of ninety thousand points.
Every particle starts life on a fibonacci shell — perfectly even, quietly breathing. Nothing is a texture. Nothing is a model file. It is pure math, drawn on the GPU.
A single buffer of ninety thousand particles, morphing through four shapes as you scroll — rendered live in a custom WebGL shader. Move your cursor to push the field around.
Every particle starts life on a fibonacci shell — perfectly even, quietly breathing. Nothing is a texture. Nothing is a model file. It is pure math, drawn on the GPU.
Scroll and the same points spiral outward into four logarithmic arms. No particle is created or destroyed — each one simply interpolates toward its next home in the vertex shader.
A (3, 4) knot, rendered as a fuzzy tube of light. Curl-flow noise keeps it alive; your cursor pushes the field aside with an inverse-square force.
The points settle into a grid and a wave rolls across it. One continuous morph, driven entirely by how far you have scrolled.
Each point carries its position in all four shapes as attributes; a cyclic weight blends the two nearest by scroll phase.
Layered sine fields perturb every particle so the form never sits still — organic motion with zero noise-texture lookups.
Your cursor is projected onto the view plane and repels nearby points with an inverse-square falloff, right in the shader.
Color is computed per-point from an HSL palette and depth glow, composited with additive blending for a bloom-like core.
Honors prefers-reduced-motion, caps device pixel ratio, and renders the whole field in a single draw call.
No drei, no post-processing dependency — just @react-three/fiber, three, and a hand-written GLSL program.