Skip to main content

Variable: filmGrainFragmentShader

const filmGrainFragmentShader: "#version 300 es\nprecision highp float;\nprecision highp int;\n\nin vec2 vUV;\nuniform sampler2D uSource;\nuniform vec2 uResolution;\nuniform float uTime;\nuniform float uAmount;\nuniform float uGrainSize;\nuniform float uSpeed;\nout vec4 outputColor;\n\nuint hash(uint value) {\n uint state = value * 747796405u + 2891336453u;\n uint word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;\n return (word >> 22u) ^ word;\n}\n\nvoid main() {\n vec4 source = texture(uSource, vUV);\n uvec2 pixel = uvec2(floor(gl_FragCoord.xy / uGrainSize));\n uint frame = uint(floor(uTime * uSpeed * 60.0));\n uint seed = pixel.x * 1973u + pixel.y * 9277u + frame * 26699u;\n float grain = float(hash(seed)) / 4294967295.0 - 0.5;\n outputColor = vec4(source.rgb + grain * uAmount, source.a);\n}\n"

Defined in: graphics/post-processing/effects/film-grain.ts:4