Pool light dancing over everything.
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(){ vec4 srcTex = texture2D(uTex, vUv); vec3 c = srcTex.rgb; float sc = mix(4.0, 18.0, uScale); vec2 p = vUv * sc; float t = uTime * 0.5; // Layered ridged noise: the ridges are where light focuses, which is what // gives caustics their bright filigree rather than a soft blob. float a = abs(noise(p + vec2(t, -t)) - 0.5); float b = abs(noise(p * 1.7 + vec2(-t * 0.7, t * 1.1)) - 0.5); float ridge = 1.0 - clamp((a + b) * 2.4, 0.0, 1.0); ridge = pow(ridge, 3.5); vec3 light = vec3(0.62, 0.88, 1.0) * ridge; gl_FragColor = vec4(c + light * uAmount * 2.2 * (0.7 + uPulse * 0.6), srcTex.a); }