|
@@ -139,7 +139,6 @@
|
|
if (index{X} >= 0)
|
|
if (index{X} >= 0)
|
|
#endif
|
|
#endif
|
|
{
|
|
{
|
|
- float frustumLength = frustumLengths{X}[index{X}];
|
|
|
|
#if defined(SHADOWPCF{X})
|
|
#if defined(SHADOWPCF{X})
|
|
#if defined(SHADOWLOWQUALITY{X})
|
|
#if defined(SHADOWLOWQUALITY{X})
|
|
shadow = computeShadowWithCSMPCF1(float(index{X}), vPositionFromLight{X}[index{X}], vDepthMetric{X}[index{X}], shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
|
|
shadow = computeShadowWithCSMPCF1(float(index{X}), vPositionFromLight{X}[index{X}], vDepthMetric{X}[index{X}], shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
|
|
@@ -164,36 +163,39 @@
|
|
shadowDebug{X} = vec3(shadow) * vCascadeColorsMultiplier{X}[index{X}];
|
|
shadowDebug{X} = vec3(shadow) * vCascadeColorsMultiplier{X}[index{X}];
|
|
#endif
|
|
#endif
|
|
|
|
|
|
- float diffRatio = clamp(diff{X} / frustumLength, 0., 1.) * cascadeBlendFactor{X};
|
|
|
|
- if (index{X} < (SHADOWCSMNUM_CASCADES{X} - 1) && diffRatio < 1.)
|
|
|
|
- {
|
|
|
|
- index{X} += 1;
|
|
|
|
- float nextShadow = 0.;
|
|
|
|
- #if defined(SHADOWPCF{X})
|
|
|
|
- #if defined(SHADOWLOWQUALITY{X})
|
|
|
|
- nextShadow = computeShadowWithCSMPCF1(float(index{X}), vPositionFromLight{X}[index{X}], vDepthMetric{X}[index{X}], shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
|
|
|
|
- #elif defined(SHADOWMEDIUMQUALITY{X})
|
|
|
|
- nextShadow = computeShadowWithCSMPCF3(float(index{X}), vPositionFromLight{X}[index{X}], vDepthMetric{X}[index{X}], shadowSampler{X}, light{X}.shadowsInfo.yz, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
|
|
|
|
|
|
+ #ifndef SHADOWCSMNOBLEND{X}
|
|
|
|
+ float frustumLength = frustumLengths{X}[index{X}];
|
|
|
|
+ float diffRatio = clamp(diff{X} / frustumLength, 0., 1.) * cascadeBlendFactor{X};
|
|
|
|
+ if (index{X} < (SHADOWCSMNUM_CASCADES{X} - 1) && diffRatio < 1.)
|
|
|
|
+ {
|
|
|
|
+ index{X} += 1;
|
|
|
|
+ float nextShadow = 0.;
|
|
|
|
+ #if defined(SHADOWPCF{X})
|
|
|
|
+ #if defined(SHADOWLOWQUALITY{X})
|
|
|
|
+ nextShadow = computeShadowWithCSMPCF1(float(index{X}), vPositionFromLight{X}[index{X}], vDepthMetric{X}[index{X}], shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
|
|
|
|
+ #elif defined(SHADOWMEDIUMQUALITY{X})
|
|
|
|
+ nextShadow = computeShadowWithCSMPCF3(float(index{X}), vPositionFromLight{X}[index{X}], vDepthMetric{X}[index{X}], shadowSampler{X}, light{X}.shadowsInfo.yz, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
|
|
|
|
+ #else
|
|
|
|
+ nextShadow = computeShadowWithCSMPCF5(float(index{X}), vPositionFromLight{X}[index{X}], vDepthMetric{X}[index{X}], shadowSampler{X}, light{X}.shadowsInfo.yz, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
|
|
|
|
+ #endif
|
|
|
|
+ #elif defined(SHADOWPCSS{X})
|
|
|
|
+ #if defined(SHADOWLOWQUALITY{X})
|
|
|
|
+ nextShadow = computeShadowWithCSMPCSS16(float(index{X}), vPositionFromLight{X}[index{X}], vDepthMetric{X}[index{X}], depthSampler{X}, shadowSampler{X}, light{X}.shadowsInfo.y, light{X}.shadowsInfo.z, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w, lightSizeUVCorrection{X}[index{X}], depthCorrection{X}[index{X}], penumbraDarkness{X});
|
|
|
|
+ #elif defined(SHADOWMEDIUMQUALITY{X})
|
|
|
|
+ nextShadow = computeShadowWithCSMPCSS32(float(index{X}), vPositionFromLight{X}[index{X}], vDepthMetric{X}[index{X}], depthSampler{X}, shadowSampler{X}, light{X}.shadowsInfo.y, light{X}.shadowsInfo.z, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w, lightSizeUVCorrection{X}[index{X}], depthCorrection{X}[index{X}], penumbraDarkness{X});
|
|
|
|
+ #else
|
|
|
|
+ nextShadow = computeShadowWithCSMPCSS64(float(index{X}), vPositionFromLight{X}[index{X}], vDepthMetric{X}[index{X}], depthSampler{X}, shadowSampler{X}, light{X}.shadowsInfo.y, light{X}.shadowsInfo.z, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w, lightSizeUVCorrection{X}[index{X}], depthCorrection{X}[index{X}], penumbraDarkness{X});
|
|
|
|
+ #endif
|
|
#else
|
|
#else
|
|
- nextShadow = computeShadowWithCSMPCF5(float(index{X}), vPositionFromLight{X}[index{X}], vDepthMetric{X}[index{X}], shadowSampler{X}, light{X}.shadowsInfo.yz, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
|
|
|
|
|
|
+ nextShadow = computeShadowCSM(float(index{X}), vPositionFromLight{X}[index{X}], vDepthMetric{X}[index{X}], shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
|
|
#endif
|
|
#endif
|
|
- #elif defined(SHADOWPCSS{X})
|
|
|
|
- #if defined(SHADOWLOWQUALITY{X})
|
|
|
|
- nextShadow = computeShadowWithCSMPCSS16(float(index{X}), vPositionFromLight{X}[index{X}], vDepthMetric{X}[index{X}], depthSampler{X}, shadowSampler{X}, light{X}.shadowsInfo.y, light{X}.shadowsInfo.z, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w, lightSizeUVCorrection{X}[index{X}], depthCorrection{X}[index{X}], penumbraDarkness{X});
|
|
|
|
- #elif defined(SHADOWMEDIUMQUALITY{X})
|
|
|
|
- nextShadow = computeShadowWithCSMPCSS32(float(index{X}), vPositionFromLight{X}[index{X}], vDepthMetric{X}[index{X}], depthSampler{X}, shadowSampler{X}, light{X}.shadowsInfo.y, light{X}.shadowsInfo.z, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w, lightSizeUVCorrection{X}[index{X}], depthCorrection{X}[index{X}], penumbraDarkness{X});
|
|
|
|
- #else
|
|
|
|
- nextShadow = computeShadowWithCSMPCSS64(float(index{X}), vPositionFromLight{X}[index{X}], vDepthMetric{X}[index{X}], depthSampler{X}, shadowSampler{X}, light{X}.shadowsInfo.y, light{X}.shadowsInfo.z, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w, lightSizeUVCorrection{X}[index{X}], depthCorrection{X}[index{X}], penumbraDarkness{X});
|
|
|
|
- #endif
|
|
|
|
- #else
|
|
|
|
- nextShadow = computeShadowCSM(float(index{X}), vPositionFromLight{X}[index{X}], vDepthMetric{X}[index{X}], shadowSampler{X}, light{X}.shadowsInfo.x, light{X}.shadowsInfo.w);
|
|
|
|
- #endif
|
|
|
|
|
|
|
|
- shadow = mix(nextShadow, shadow, diffRatio);
|
|
|
|
- #ifdef SHADOWCSMDEBUG{X}
|
|
|
|
- shadowDebug{X} = mix(vec3(nextShadow) * vCascadeColorsMultiplier{X}[index{X}], shadowDebug{X}, diffRatio);
|
|
|
|
- #endif
|
|
|
|
- }
|
|
|
|
|
|
+ shadow = mix(nextShadow, shadow, diffRatio);
|
|
|
|
+ #ifdef SHADOWCSMDEBUG{X}
|
|
|
|
+ shadowDebug{X} = mix(vec3(nextShadow) * vCascadeColorsMultiplier{X}[index{X}], shadowDebug{X}, diffRatio);
|
|
|
|
+ #endif
|
|
|
|
+ }
|
|
|
|
+ #endif
|
|
}
|
|
}
|
|
#elif defined(SHADOWCLOSEESM{X})
|
|
#elif defined(SHADOWCLOSEESM{X})
|
|
#if defined(SHADOWCUBE{X})
|
|
#if defined(SHADOWCUBE{X})
|