Bayer-dither into a tight retro palette.
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 c = texture2D(uTex, vUv); vec2 p = mod(floor(vUv*uResolution), 4.0); float bayer = (p.x + p.y*4.0)/16.0 - 0.5; vec3 d = c.rgb + bayer*0.15; d = floor(d*uLevels)/uLevels; gl_FragColor = vec4(mix(c.rgb, d, uAmount), c.a); }