The frame becomes a LiDAR point cloud: extruded by depth, orbiting in parallax, and blown apart on the kick before it snaps back into shape.
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 aspect = uResolution.x / max(uResolution.y, 1.0); vec2 grid = vec2(floor(uDensity * aspect), floor(uDensity)); vec2 g = vUv * grid; vec2 home = floor(g); vec2 tilt = vec2(sin(uTime * 0.23), cos(uTime * 0.17)) * uOrbit; // Renderer.ts doubles amount, so the blast sees 0..2 on a full kick. float blast = clamp(uPulse, 0.0, 1.0) * uAmount; vec3 W = vec3(0.299, 0.587, 0.114); vec3 pts = vec3(0.0); float cover = 0.0; float bestZ = -1.0; for (int j = -1; j <= 1; j++) { for (int i = -1; i <= 1; i++) { vec2 cell = home + vec2(float(i), float(j)); vec2 cUv = (cell + 0.5) / grid; vec3 s = texture2D(uTex, clamp(cUv, 0.0, 1.0)).rgb; // Luma carries the extrusion when the depth pass has nothing to say // (procedural sources, stills), depth takes over once there's a body. float z = clamp(mix(dot(s, W), depthAt(cUv), 0.55) * uDepth, 0.0, 1.5); vec2 dir = vec2(rand(cell + 3.1), rand(cell + 7.7)) * 2.0 - 1.0; vec2 off = tilt * z * 0.9 + dir * blast * (0.2 + 0.8 * min(z, 1.0)) * 0.8; off /= max(1.0, length(off) / 0.95); float d = length(g - (cell + 0.5 + off)); float r = min(uDotSize * (0.45 + 0.3 * z) * (1.0 + blast * 0.3), 0.9); float a = 1.0 - smoothstep(r * 0.65, r, d); // Nearest point wins, so the shell reads as solid, not see-through. if (a > 0.01 && z > bestZ) { bestZ = z; cover = a; float glint = 1.0 - smoothstep(0.0, r * 0.6, d); vec3 c = s + glint * (0.35 + blast * 0.3); vec3 tint = mix(vec3(0.0, 0.4, 1.0), vec3(1.0, 0.2, 0.5), clamp(z, 0.0, 1.0)); pts = mix(c, c * tint * 1.5, 0.25); } } } // Scanner sweep rolling down the frame. float sweep = 1.0 - smoothstep(0.0, 0.04, abs(fract(vUv.y - uTime * 0.09) - 0.5) - 0.46); vec4 base = texture2D(uTex, vUv); vec3 col = mix(base.rgb * uGhost, pts * (1.0 + sweep * 0.35), cover); // Afterimage kept under unity gain so it decays instead of latching. col = max(col, texture2D(uFeedback, vUv).rgb * uTrail * 0.8); gl_FragColor = vec4(clamp(col, 0.0, 1.0), base.a); }