Red, green and blue arrive from three different moments — colour separated across time instead of space.
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 d = depthAt(vUv); // Bias the spread by depth so the subject desynchronises hardest while the // background stays close to now — the separation reads as depth, not noise. float s = uSpread * mix(1.0, 0.25 + d * 1.15, uDepthBias); float r = timeAt(vUv, s).r; float g = timeAt(vUv, s * 0.45).g; vec4 curTex = texture2D(uTex, vUv); float b = curTex.b; gl_FragColor = vec4(r, g, b, curTex.a); }