Emulsion grain with halation bleeding off the highlights.
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); float l = dot(c.rgb, vec3(0.299, 0.587, 0.114)); // Real grain peaks in the midtones and vanishes in clean black and blown // white. A flat noise add — what this was — is exactly the sort of uniform // veil that gets averaged away the moment anything is stacked on it. It // also only had one param, so the pad's Y axis fell through to opacity. float response = 4.0 * l * (1.0 - l); float n1 = rand(vUv * uResolution + fract(uTime) * 100.0) - 0.5; float n2 = rand(vUv * uResolution * 0.5 + fract(uTime * 1.7) * 57.0) - 0.5; float grain = (n1 * 0.65 + n2 * 0.35) * response; // Grain lives in three emulsion layers, so it is coloured, not monochrome. vec3 chroma = vec3(rand(vUv * uResolution + 1.3), rand(vUv * uResolution + 7.7), rand(vUv * uResolution + 3.1)) - 0.5; vec3 col = c.rgb + (grain * 1.6 + chroma * 0.5 * response) * uAmount; // Halation: bright areas bleed a warm ring into the emulsion around them. float hal = max(0.0, dot(discBlur(vUv, 11.0), vec3(0.299, 0.587, 0.114)) - 0.55); col += vec3(1.0, 0.40, 0.20) * hal * uHalation * 1.8; gl_FragColor = vec4(col, c.a); }