diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2017-08-09 16:31:57 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2017-08-10 16:43:48 +0300 |
commit | 0ab8b93fdd548174cc8c5b05e239cfec7179ab61 (patch) | |
tree | 18b5da2ef4cb4cda3c644576a4dbc060801eafaf /source/blender/draw | |
parent | 99f37bf2a2ad452ee995cd8ce9ce60d010b1f7f9 (diff) |
Eevee: SSR: Blur Mipmaps more.
Cost is negligeable (Only 0.02 ms more) and it improve stability.
Diffstat (limited to 'source/blender/draw')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/effect_downsample_frag.glsl | 12 | ||||
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_frag.glsl | 30 |
2 files changed, 27 insertions, 15 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 index 1e57aec5ea2..fc29079cf19 100644 --- a/source/blender/draw/engines/eevee/shaders/effect_downsample_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/effect_downsample_frag.glsl @@ -8,8 +8,20 @@ out vec4 FragColor; 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; +#endif }
\ No newline at end of file diff --git a/source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_frag.glsl b/source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_frag.glsl index c2ef085ca01..44e0c176010 100644 --- a/source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_frag.glsl +++ b/source/blender/draw/engines/eevee/shaders/lightprobe_planar_downsample_frag.glsl @@ -12,20 +12,20 @@ out vec4 FragColor; void main() { - /* Reconstructing Target uvs like this avoid missing pixels */ - vec2 uvs = gl_FragCoord.xy * 2.0 / vec2(textureSize(source, 0).xy); - -#if 0 /* Slower and does not match the main framebuffer downsampling. */ - /* Downsample with a 4x4 box filter */ - vec4 d = texelSize.xyxy * vec4(-1, -1, +1, +1); - - FragColor = texture(source, vec3(uvs + d.xy, layer)).rgba; - FragColor += texture(source, vec3(uvs + d.zy, layer)).rgba; - FragColor += texture(source, vec3(uvs + d.xw, layer)).rgba; - FragColor += texture(source, vec3(uvs + d.zw, layer)).rgba; - - FragColor /= 4.0; +#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, vec3(uvs, layer), 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, vec3(uvs + ofs.xy, layer), 0.0); + FragColor += textureLod(source, vec3(uvs + ofs.xw, layer), 0.0); + FragColor += textureLod(source, vec3(uvs + ofs.zy, layer), 0.0); + FragColor += textureLod(source, vec3(uvs + ofs.zw, layer), 0.0); + FragColor *= 0.25; #endif - - FragColor = texture(source, vec3(uvs, layer)); }
\ No newline at end of file |