Motion blur from the centre — radial through to rotational.
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(){ // Absorbed the old separate Spin Blur. A pure rotational smear measured as // a near-duplicate of this, of Frame Smear and of Prism Dispersion, so the // two are now one effect with an axis running radial -> rotational, which // also gives Zoom Blur the second param its pad axis was missing. vec2 mid = vec2(0.5); vec2 p = vUv - mid; float r = length(p); float a0 = atan(p.y, p.x); vec4 acc = vec4(0.0); float w = 0.0; for (int i = 0; i < 10; i++) { float t = float(i) / 10.0; // Radial component pulls in toward the centre, rotational sweeps the arc. float scale = 1.0 - t * uAmount * 0.34 * (1.0 - uSpin); float ang = a0 + (t - 0.5) * uAmount * 1.5 * uSpin; vec2 uv = mid + vec2(cos(ang), sin(ang)) * r * scale; float k = 1.0 - t * 0.45; acc += texture2D(uTex, uv) * k; w += k; } gl_FragColor = acc / w; }