·

Real-time 3D, built for the web.

Six live WebGL scenes, each a different technique, and one you can drive. Nothing here is video or pre-rendered: every frame is drawn in your browser as you scroll.

01

60,000 particles, one shader

Every particle morphs between a sphere, a torus knot and a spiral galaxy entirely on the GPU. The CPU sends a single number per frame.

Scroll to morph. Move the pointer to push particles aside.

Particles
60,000
Draw calls
1
Stack
ShaderMaterial, MeshSurfaceSampler

02

No geometry at all

There are no meshes in this scene. Each pixel marches a ray through signed distance fields, with soft shadows, ambient occlusion and thin-film shading in a single fragment shader.

Scroll to melt the spheres together.

Triangles
2, one screen quad
Ray steps
Up to 96 per pixel
Stack
GLSL, SDF smooth union

03

10,000 columns, one draw call

Heights and colours are computed in the vertex shader. The standard PBR material is extended rather than replaced, so lighting and fog stay physically based.

Drag the pointer across the grid to send a ripple.

Instances
10,000
Draw calls
1
Stack
InstancedMesh, onBeforeCompile

04

Now drive it

A rigid-body world running Rapier, a Rust physics engine compiled to WebAssembly. Raycast suspension, tyre grip, weight transfer and over 70 crates and pins, stepped at a fixed 60 Hz.

Collect all 10 orbs as fast as you can. Knock things over on the way.

Engine
Rapier 0.14, WASM
Input
Keyboard, touch, gamepad
Physics
Fixed 60 Hz, interpolated
Orbs0 / 10 Time0:00.0 Best —

W A S D or arrows · Space drift · Shift boost · R flip · N new run · M sound · Esc exit · Gamepad works too

Steer

05

Earth at night

NASA imagery, drifting clouds, a twilight band along the terminator and city lights pushed through HDR bloom.

Textures
Loaded on approach
Post
Bloom, ACES tone mapping
Stack
Custom shaders, EffectComposer

About

Open to work

Toolbox

Grab a chip and throw it.

This page, right now

Frame rate
—
Resolution
—
Scenes
—
Physics
—
GPU
—

Under the hood

  • No framework: native ES modules and an import map
  • Three.js with hand-written GLSL
  • Rapier physics in WebAssembly, fixed timestep
  • Dynamic resolution that follows your frame rate
  • Scenes load on approach and stop drawing off-screen
  • CSS scroll-driven animations, container queries, :has()
  • Gamepad API, touch controls, reduced-motion aware

Say hello

↑↓ to moveEnter to runEsc to close