Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2021-03-04 13:59:49 +0300
committerClément Foucault <foucault.clem@gmail.com>2021-03-08 19:25:16 +0300
commitba75ea8012084aa84ba8c9ac088b88a8dcf4fb21 (patch)
tree32610751177961885185afee8f4c4773ccda4ced /source/blender/draw/engines/eevee/shaders/raytrace_lib.glsl
parent6afe2d373a00a49a7a51cafec50d03ada0fe0743 (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.glsl20
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;