CMYK dot screen — newsprint under a loupe.
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(){ vec4 srcTex = texture2D(uTex, vUv); vec3 c = srcTex.rgb; float px = mix(160.0, 26.0, uScale); vec2 a = vUv * uResolution / uResolution.y * px; // Each ink gets its own screen angle, the way real process printing avoids // moire between separations. vec3 ink = 1.0 - c; vec3 outC = vec3(0.0); for (int i = 0; i < 3; i++) { float ang = 0.2618 + float(i) * 0.5236; vec2 r = vec2(a.x * cos(ang) - a.y * sin(ang), a.x * sin(ang) + a.y * cos(ang)); vec2 cell = fract(r) - 0.5; float d = length(cell) * 2.0; outC[i] = 1.0 - smoothstep(ink[i] - 0.25, ink[i] + 0.25, d); } gl_FragColor = vec4(mix(c, 1.0 - outC, uAmount), srcTex.a); }