Helix Noise · flowing water · caustics + sun-glints
field.sample()A moving water surface where the wave crests are warped along the flow field's streamlines: a few travelling ripple layers, their lattice bent by the field, shaded with a depth ramp, sharp caustic highlights on the crests, and specular sun-glints. The three dials don't touch the water math — they reshape the underlying flow, and the ripples follow. Move the pointer to steer the sun.
On each knob change the field is sampled onto a coarse grid, and a short streamline integration
gives a per-pixel warp offset — that's what bends the wave lattice to follow the current.
Every frame, four travelling ripple layers are summed at the warped coordinate, the surface normal
comes from their analytic gradient, and the shader adds a depth ramp, caustic crests, sun specular,
and a Fresnel sky term. All the flow comes from field.sample() — the rest is a small
surface shader you can lift straight into a fragment program.
This is a stylised surface, not a water simulation — no gravity waves, no shore interaction, no true refraction. The caustics are a crest-focus fake, not a traced light field. It renders on a downscaled buffer and upscales, so at full screen the glints soften. For a physical solver you'd feed the same velocities into a height-field or FFT-ocean; here the point is directable, real-time flow.