Helix Noise · demos
Every page below drives its visuals from the same HelixNoise.create(...) —
a grid-free, divergence-free helical flow field with four dials: slope (size of things),
helicity (handedness), coherence (noise → structure) and churn (time).
Plain HTML, no build; serve the repo root (npm run demo) and click around.
Nebula glsl · time
No bake, no sim: rays march hx(p, t) analytically. Density = |vorticity|, colour = handedness, churn = Kolmogorov time.
webgl2Vortex tubes sampleUW
Streamtubes coloured by u·ω. Slide helicity to ±1 — every tube winds the same way. The axis curl-noise doesn't have.
three.jsA million particles glsl · TF
1–4 M particles advected in a transform-feedback shader. Zero CPU field calls per frame.
webgl2helix-noise-gpuFlow loop streaklets
A seamless 12 s loop: velocity streaklets, a glassy bubble the flow parts around (exact div-free boundary), then the helicity flips and the whole swirl reverses. Records itself to webm.
webgl2Fire gpu lifecycle
A buoyant particle lifecycle stirred by the field's own churn as living turbulence — white-hot core → orange tip → soot, with sparks and smoke.
webgl2Candle interactive
A 3-D scene where flame, drafts and light flicker are one field. Blow it out (double-click), watch the smoke, click to relight.
interactiveNature pack 4 weathers
One field, switched live: snow, rain, fireflies and an aurora whose sway is the field sampled along the arc.
webgl2Kelp forest sampleUW · t
Every frond bent by the field at its own height and at field time. The sway is the library's own churn — turn it to 0 and the forest freezes mid-current.
three.jsEbru marbling bake2D
Ink advected through the flow. Because it's divergence-free, bands stretch and fold but never tear — incompressibility made visible.
canvasQ-criterion marching cubes
Vortex tubes extracted where rotation beats strain, Q = ½(‖Ω‖²−‖S‖²). Raise coherence → the tangle condenses.
Jetstream cirrus anisotropy · glsl
One dial — anisotropy γ — shears an advected dye sky: wisps combed along the jet at γ<0, billow bands across it at γ>0. Same field, one number.
webgl2Volumetric smoke bake3D
A 48³ dye volume advected semi-Lagrangian and raymarched with self-shadowing. Draw smoke with the pointer.
webgl2Flowing water bake2D
Ripple layers bent along the streamlines, with caustics and sun-glints.
canvasFlow around an obstacle withBoundary
A cylinder given only by its SDF — the flow slides along the wall, still exactly divergence-free.
boundaryGPU smoke + obstacle bakePotential3D
The whole sim on the GPU: velocity is the curl of a baked potential (div-free after interpolation); the SDF's alpha channel carves and shades the solid. Sphere, torus, or bar.
webgl2Atom engine createAtoms
Spatially-varying dials: right-handed on the left, left-handed on the right — one seamless field.
atomsAudio-reactive WebAudio
Bass pumps amplitude, treble drives churn, stereo balance tips helicity. Built-in demo beat, or your mic / a track.
audiothree.js points
16 k particles advected by sample(), coloured by helicity. OrbitControls.
three.jsp5.js sketch
The minimal creative-coding loop — a flow field in a dozen lines.
p5.jsGPU LIC glsl
The exact field as a fragment shader — line-integral convolution per pixel.
webgl2Minimal canvas
2 500 particles, one sampleUW per particle, zero dependencies.
canvasGallery
One field, nine renderers, three shared sliders re-tuning all of them at once.
canvasSandbox
The full 3-D view: orbit camera, comet-trail streamlines, every control, live field time.
canvashelix-noise · MIT · README