Perlin-driven flowing turbulence with curl.
GLSL fragment shader
The effect's own code. The uniforms and helpers above it — uTex, uFeedback, the depth proxy, the frame ring, depthAt(), timeAt() — are the same header every Ether-MOSH shader opens with, and are documented once on the registry rather than reprinted on all 143 pages.
void main(){ // Speed folded into a constant: a third param is unreachable from the pad, // which binds X to params[0] and Y to params[1]. vec2 p = vUv*uScale + uTime*0.12; float n1 = noise(p); float n2 = noise(p + vec2(5.2, 1.3)); vec2 grad = vec2(noise(p+vec2(0.01,0.0))-n1, noise(p+vec2(0.0,0.01))-n2); vec2 curl = vec2(-grad.y, grad.x); gl_FragColor = texture2D(uTex, vUv + curl*uAmount*4.0); }