CMOS jello — the frame read line by line.
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(){ // A real rolling shutter reads rows at slightly different times, so motion // shears the frame. Rows are skewed progressively down the image. float t = uTime * mix(1.0, 6.0, uWobble); float row = vUv.y; float skew = sin(t + row * mix(3.0, 14.0, uWobble)) * uAmount * 0.13; skew += (row - 0.5) * uAmount * 0.06; vec2 uv = vec2(clamp(vUv.x + skew, 0.0, 1.0), vUv.y); vec4 srcTex = texture2D(uTex, uv); vec3 c = srcTex.rgb; // Slight per-row exposure drift, as real sensors show under flicker. c *= 0.9 + 0.2 * sin(t * 2.0 + row * 40.0) * uAmount; // uv already carries the row skew, so a transparent source's silhouette // shears with the jello rather than staying rigid under it. gl_FragColor = vec4(c, srcTex.a); }