A concentric shockwave detonates from the centre on every audio hit and rolls outward as it fades.
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(){ // Aspect-corrected so the boom is circular. vec2 aspect = vec2(uResolution.x / uResolution.y, 1.0); vec2 p = (vUv - 0.5) * aspect; float r = length(p); // uPulse jumps to 1 on a hit and decays to 0, so the ring is born at the // centre and travels outward as it fades. Without audio a weak boom still // fires about every three seconds so the effect is never silent. float idle = pow(1.0 - fract(uTime * 0.33), 3.0) * 0.4; float hit = clamp(max(uPulse, idle), 0.0, 1.0); float waveRadius = (1.0 - hit) * 0.95; float thick = mix(0.02, 0.15, uThickness); float ring = (1.0 - smoothstep(0.0, thick, abs(r - waveRadius))) * hit; // Push pixels outward. dir lives in aspect space, so divide back to UV. vec2 dir = p / max(r, 0.0001); vec2 shift = dir * ring * uAmount * 0.1 / aspect; vec3 col = texture2D(uTex, clamp(vUv - shift, 0.0, 1.0)).rgb; // Red leads the front of the wave, blue trails as it dies. col.r += ring * uAmount * 0.2; col.b += ring * uAmount * 0.1 * (1.0 - hit); gl_FragColor = vec4(col, texture2D(uTex, vUv).a); }