Horizontal line tears.
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(){ // Torn scanlines that also split their colour channels and jump vertically. // A pure horizontal slide read as interchangeable with every other smear in // the library and vanished the moment anything was stacked on it. float band = step(0.74, sin(vUv.y*120.0 + uTime*uSpeed*8.0)); float row = floor(vUv.y*200.0); float shift = (rand(vec2(row, floor(uTime*4.0))) - 0.5)*uAmount*1.7; // Torn rows grab from elsewhere in the frame rather than merely sliding. float vjump = (rand(vec2(row+13.0, floor(uTime*4.0))) - 0.5)*uAmount*0.22*band; vec2 uv = vec2(fract(vUv.x + shift*band), clamp(vUv.y + vjump, 0.0, 1.0)); float sep = shift * band * 0.16; vec3 col; col.r = texture2D(uTex, uv + vec2(sep, 0.0)).r; col.g = texture2D(uTex, uv).g; col.b = texture2D(uTex, uv - vec2(sep, 0.0)).b; // Signal spike along the tear edge. col += vec3(0.7, 0.85, 1.0) * band * abs(shift) * 0.5; // uv already carries the tear's own horizontal/vertical displacement, so // sampling alpha there lets a transparent source's silhouette tear with // the rest of the frame instead of staying fixed underneath it. gl_FragColor = vec4(col, texture2D(uTex, uv).a); }