diff options
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/effect_downsample_frag.glsl')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/effect_downsample_frag.glsl | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/effect_downsample_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_downsample_frag.glsl new file mode 100644 index 00000000000..156be108a14 --- /dev/null +++ b/source/blender/draw/engines/eevee/shaders/effect_downsample_frag.glsl @@ -0,0 +1,37 @@ +/** + * Simple downsample shader. Takes the average of the 4 texels of lower mip. + **/ + +uniform sampler2D source; +uniform float fireflyFactor; + +out vec4 FragColor; + +float brightness(vec3 c) +{ + return max(max(c.r, c.g), c.b); +} + +void main() +{ +#if 0 + /* Reconstructing Target uvs like this avoid missing pixels if NPO2 */ + vec2 uvs = gl_FragCoord.xy * 2.0 / vec2(textureSize(source, 0)); + + FragColor = textureLod(source, uvs, 0.0); +#else + vec2 texel_size = 1.0 / vec2(textureSize(source, 0)); + vec2 uvs = gl_FragCoord.xy * 2.0 * texel_size; + vec4 ofs = texel_size.xyxy * vec4(0.75, 0.75, -0.75, -0.75); + + FragColor = textureLod(source, uvs + ofs.xy, 0.0); + FragColor += textureLod(source, uvs + ofs.xw, 0.0); + FragColor += textureLod(source, uvs + ofs.zy, 0.0); + FragColor += textureLod(source, uvs + ofs.zw, 0.0); + FragColor *= 0.25; + + /* Clamped brightness. */ + float luma = max(1e-8, brightness(FragColor.rgb)); + FragColor *= 1.0 - max(0.0, luma - fireflyFactor) / luma; +#endif +}
\ No newline at end of file |