RGB channels pulse with independent breathing rhythms.
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(){ float t = uTime * uSpeed; // Let the channels visibly separate at the upper end, without more samples. float reach = uAmount * (1.0 + 1.5 * smoothstep(0.6, 2.0, uAmount)) * 0.03; vec2 dr = vec2(cos(t), sin(t)) * reach; vec2 dg = vec2(cos(t*1.37+2.0), sin(t*1.37+2.0)) * reach; vec2 db = vec2(cos(t*0.73+4.0), sin(t*0.73+4.0)) * reach; float r = texture2D(uTex, vUv+dr).r; float g = texture2D(uTex, vUv+dg).g; float b = texture2D(uTex, vUv+db).b; // Alpha rides the green channel's own breathing offset. gl_FragColor = vec4(r,g,b,texture2D(uTex, vUv+dg).a); }