AI · Code · 2026
Chladni Volume: standing waves in three dimensions
A Chladni plate vibrates sand into lines. This asks what the third dimension does: a million particles settling onto the nodal surfaces of a resonating cube, live in the browser.
- Role
- Concept, code
- Type
- Self-directed experiment
- Stack
- WebGL · three.js · GLSL

The idea
A plate makes lines. What does a volume make?
The classic Chladni experiment is two-dimensional: bow a metal plate dusted with sand, and the grains migrate to the nodal lines, the curves where the plate stands still, drawing the resonance pattern of that frequency.
This experiment extends the question by one dimension. In a resonating cube, the nodes aren't lines but surfaces threading the volume. There's no sand that can show you that, so the particles are simulated: each one follows the standing-wave field downhill toward zero, and the swarm condenses onto the nodal surfaces the way sand finds the still parts of the plate.
The field is a superposition of three axis-permuted modes, indexed M · N · L. Step any of the three and the geometry reorganizes live; Strike randomizes the mode and its mix amplitudes, and Drift lets the volume wander between resonances on its own.
The build
A million particles, physics on the GPU
The whole simulation lives on the graphics card. Particle positions are stored in a floating-point texture; a fragment shader advances the physics (evaluate the field and its gradient at each particle, step toward the node, add a little noise so the surfaces stay alive), and the render pass reads positions straight back out of that texture. Ping-pong two render targets and the CPU never touches a particle: 1,048,576 of them at full frame rate.
Browsers without the float-texture path get the same experiment, honestly downscaled: an identical-math CPU fallback pushes ~30,000 particles through typed arrays instead. Same field, same behavior, fewer grains of sand.
The mode readout converts M · N · L to a nominal frequency the way a rigid cavity would, and the colors carry data rather than decoration: particles warm as they settle onto a node, cool where the field still pushes them.