From 0bafa4399bbd79ece70effbd880872e22a29afeb Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Sat, 3 Nov 2018 16:56:33 +0000 Subject: [PATCH] Use distant shadow maps when the current fragment is outside the depth range of the near ones. --- files/shaders/shadows_fragment.glsl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/files/shaders/shadows_fragment.glsl b/files/shaders/shadows_fragment.glsl index ce9e958d1..220e00efa 100644 --- a/files/shaders/shadows_fragment.glsl +++ b/files/shaders/shadows_fragment.glsl @@ -16,12 +16,13 @@ float unshadowedLightRatio() @foreach shadow_texture_unit_index @shadow_texture_unit_list if (!doneShadows) { - vec2 shadowXY = shadowSpaceCoords@shadow_texture_unit_index.xy / shadowSpaceCoords@shadow_texture_unit_index.w; + vec3 shadowXYZ = shadowSpaceCoords@shadow_texture_unit_index.xyz / shadowSpaceCoords@shadow_texture_unit_index.w; + vec2 shadowXY = shadowXYZ.xy; if (all(lessThan(shadowXY, vec2(1.0, 1.0))) && all(greaterThan(shadowXY, vec2(0.0, 0.0)))) { shadowing = min(shadow2DProj(shadowTexture@shadow_texture_unit_index, shadowSpaceCoords@shadow_texture_unit_index).r, shadowing); - if (all(lessThan(shadowXY, vec2(0.95, 0.95))) && all(greaterThan(shadowXY, vec2(0.05, 0.05)))) + if (all(lessThan(shadowXYZ, vec3(0.95, 0.95, 1.0))) && all(greaterThan(shadowXYZ, vec3(0.05, 0.05, 0.0)))) doneShadows = true; } }