RUBBER DUCK / PARTICLE PHYSICS · 2026
VISIT PROJECT ↗︎The idea was simple to say and hard to run: thousands of rubber ducks that fall, pile up and knock each other around like real particles — entirely on the GPU, with no CPU physics engine in the loop. If the simulation can't hold a steady frame rate, the toy stops being fun, so the budget was fixed from the start.
The whole behaviour is written in TSL. Each duck is an instanced particle; gravity, integration, and the collision response against neighbours and the floor are computed in WebGPU compute passes, and the same node graph feeds the render. Nothing about a duck is known to JavaScript at runtime — position, velocity and spin all live on the GPU between frames.
The scene is a Three.js WebGPU build. Emissive duck shading, a soft ground bounce and a light sweep make the pile read as one glowing body instead of ten thousand separate meshes. Because simulation and rendering share the same TSL materials, turning up gravity or changing restitution lands in the frame the moment you touch the slider.