Feedback ghosts spiralling off the subject.
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(){ // Video-feedback look without a frame buffer: successively scaled and // rotated samples stand in for the previous frames. vec3 acc = texture2D(uTex, vUv).rgb; float w = 1.0; vec2 mid = vec2(0.5); for (int i = 1; i < 7; i++) { float t = float(i); float sc = 1.0 - t * 0.035 * (0.4 + uSpread); float a = t * 0.06 * uSpread + uTime * 0.04; vec2 d = vUv - mid; vec2 uv = mid + vec2(d.x * cos(a) - d.y * sin(a), d.x * sin(a) + d.y * cos(a)) / max(0.35, sc); float k = pow(uAmount, t) * 0.95; // Each echo is tinted round the hue wheel, so trails read as coloured // ghosts rather than as the grey smear Spin Blur and Frame Smear give. vec3 tint = hsv2rgb(vec3(fract(t * 0.13 + uTime * 0.05), 0.65, 1.0)); acc += texture2D(uTex, clamp(uv, 0.0, 1.0)).rgb * mix(vec3(1.0), tint, 0.6) * k; w += k; } // The ghosts are an additive overlay within the base frame's own // silhouette, so alpha follows the undisplaced center sample. gl_FragColor = vec4(acc / w, texture2D(uTex, vUv).a); }