Experiments
Lab
Fluid Simulation
Hand-written Navier-Stokes solver: ping-pong FBO, vorticity confinement, Jacobi pressure iterations — drag to inject velocity & dye.
The full fluid pipeline is hand-written. No off-the-shelf fluid library.
WebGL2 · GLSL · 0 deps


Physics Sandbox
Verlet integration + spatial hash collision: click to spawn balls, drag to throw, gravity toggle, elastic collisions.
The integrator and broad-phase collision are hand-written. No physics engine.
Canvas 2D · Verlet · 0 deps


Flow Field Particles
Curl noise divergence-free flow: 2500 particles with long trails, mouse attract/repel toggle.
The curl-noise field and trail integration are hand-written. No particle library.
Canvas 2D · Curl Noise · 0 deps


Particle System
Real-time particle simulation: thousands of particles with mouse repulsion and 3D drift, all on the GPU.
The GPU update step and mouse repulsion are hand-written. No Three.js.
WebGL · GLSL · 0 deps


3D Morph
Parametric surface per-point morph: sphere→torus→cube→wave, drag to rotate, auto-cycle.
The parametric surface and per-vertex morph are hand-written. No model files.
WebGL · ogl · 0 deps


Shader Mixer
Live GLSL noise art: drag sliders to tune hue, flow speed and turbulence octaves — every frame computed in real time.
The FBM noise fragment shader and uniform binding are hand-written.
WebGL · FBM Noise · 0 deps


SDF Raymarching
Combine and subtract sphere, box and torus distance fields, then adjust shape, lighting and material to explore soft shadows and reflections.
Distance functions, ray marching, normal estimation, soft shadows and a single reflection bounce are implemented directly in GLSL, without a 3D engine.
WebGL2 · GLSL · SDF


Cloud Sea Train
A steam train on a suspension bridge in a sunset sea of clouds. Layered height-field clouds and vector-rasterized train and bridge, with live controls for framing, speed, and cloud relief.
The fragment shader follows mdb's Up in the Cloud Sea and Tianxiu Zhou's WebGL port: blue-noise sampling, layered FBM height fields, and vector-to-raster train and bridge. Parameter binding and the page integration are local.
WebGL2 · GLSL · Blue noise


Tearable Cloth
Drag, cut or pin cloth nodes, adjust wind and toggle a circular obstacle to see how mesh constraints hold the fabric together.
Verlet integration, XPBD distance constraints, cutting and obstacle collision are implemented in local algorithms, with simulation running in a Web Worker.
Canvas 2D · XPBD · Web Worker


Voronoi / Delaunay
Add, move or remove sample points to see Voronoi regions and the Delaunay triangulation update with the point set.
Bowyer–Watson triangulation and equidistant half-plane clipping are implemented directly to generate the triangle mesh and bounded Voronoi regions.
SVG · Bowyer–Watson · Half-plane clipping

