Wave Pond

Tap the glowing pond — real waves spread, bounce off the edge, and cross through each other. The golden dot listens and plays what it hears.

Multi-touch works — try two taps at once.

Design Notes

Core technique — FDTD wave mesh. Every tap injects a Gaussian displacement pulse into a 64×64 grid of coupled cells. Each cell is updated by the discrete 2-D wave equation: u_next[i,j] = 2·u[i,j] − u_prev[i,j] + c²·(u[i+1,j] + u[i-1,j] + u[i,j+1] + u[i,j-1] − 4·u[i,j]) with Dirichlet (fixed) boundaries at the rim. Waves propagate, reflect, and interfere exactly as they would on a physical membrane — this is the Van Duyne & Smith 2-D Digital Waveguide Mesh (ICMC 1993).

Audio. The grid runs inside an AudioWorklet at audio rate (ScriptProcessor on older browsers). A single “pickup” cell reads its displacement value as the output sample — you are literally hearing the field. A pentatonic tone synth tracks pickup energy for musical warmth; a Lydian ambient pad keeps the space alive. All audio passes through a 9 kHz lowpass and brick-wall dynamics compressor (kids-safe: no sudden loudness, no harsh transients).

Renderer. Three.js with a top-down OrthographicCamera. The 64×64 field array updates the vertex colors of a PlaneGeometry each frame — no Canvas 2D, no raw WebGL2, no compute shaders. Deep-indigo rest, cyan/white crests, violet troughs.

Reference. Dana C. Van Duyne & Julius O. Smith III, “Physical Modeling with the 2-D Digital Waveguide Mesh,” Proceedings of the International Computer Music Conference, 1993.

Caveats: audio-rate grid stepping at 64×64 on a single AudioWorklet thread is CPU-intensive on mobile; the fallback ScriptProcessor runs on the main thread and may cause frame drops. Reflection boundary and damping are correct but untested against a physical reference membrane. Pentatonic tuning is approximate.

The dream lab — Karel Barnoski