diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2021-03-04 13:59:49 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2021-03-08 19:25:16 +0300 |
commit | ba75ea8012084aa84ba8c9ac088b88a8dcf4fb21 (patch) | |
tree | 32610751177961885185afee8f4c4773ccda4ced /source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl | |
parent | 6afe2d373a00a49a7a51cafec50d03ada0fe0743 (diff) |
EEVEE: Use Fullscreen maxZBuffer instead of halfres
This removes the need for per mipmap scalling factor and trilinear interpolation
issues. We pad the texture so that all mipmaps have pixels in the next mip.
This simplifies the downsampling shader too.
This also change the SSR radiance buffer as well in the same fashion.
Diffstat (limited to 'source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl')
-rw-r--r-- | source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl b/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl index aebd1c3aef3..fbc13d832bd 100644 --- a/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl +++ b/source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl @@ -16,10 +16,7 @@ float sample_depth(vec2 uv, int index, float lod) } else { #endif - lod = clamp(floor(lod), 0.0, 8.0); - /* Correct UVs for mipmaping mis-alignment */ - uv *= mipRatio[int(lod) + hizMipOffset]; - return textureLod(maxzBuffer, uv, lod).r; + return textureLod(maxzBuffer, uv * hizUvScale.xy, floor(lod)).r; #ifdef PLANAR_PROBE_RAYTRACE } #endif @@ -37,10 +34,10 @@ vec4 sample_depth_grouped(vec4 uv1, vec4 uv2, int index, float lod) } else { #endif - depths.x = textureLod(maxzBuffer, uv1.xy, lod).r; - depths.y = textureLod(maxzBuffer, uv1.zw, lod).r; - depths.z = textureLod(maxzBuffer, uv2.xy, lod).r; - depths.w = textureLod(maxzBuffer, uv2.zw, lod).r; + depths.x = textureLod(maxzBuffer, uv1.xy * hizUvScale.xy, lod).r; + depths.y = textureLod(maxzBuffer, uv1.zw * hizUvScale.xy, lod).r; + depths.z = textureLod(maxzBuffer, uv2.xy * hizUvScale.xy, lod).r; + depths.w = textureLod(maxzBuffer, uv2.zw * hizUvScale.xy, lod).r; #ifdef PLANAR_PROBE_RAYTRACE } #endif @@ -131,9 +128,6 @@ void prepare_raycast(vec3 ray_origin, #endif ss_ray = ss_start * m.xyyy + 0.5; ss_step *= m.xyyy; - - /* take the center of the texel. */ - // ss_ray.xy += sign(ss_ray.xy) * m * ssrPixelSize * (1.0 + hizMipOffset); } /* See times_and_deltas. */ @@ -175,9 +169,7 @@ vec3 raycast(int index, bool hit = false; float iter; for (iter = 1.0; !hit && (ray_time < max_time) && (iter < MAX_STEP); iter++) { - /* Minimum stride of 2 because we are using half res minmax zbuffer. */ - /* WORKAROUND: Factor is a bit higher than 2 to avoid some banding. To investigate. */ - float stride = max(1.0, iter * trace_quality) * (2.0 + 0.05); + float stride = max(1.01, iter * trace_quality); float lod = log2(stride * 0.5 * trace_quality) * lod_fac; ray_time += stride; |