From 7d79dbac409724ed4afd3cc0b867b61d846b4b72 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Sat, 8 Mar 2025 14:29:17 +0100 Subject: [PATCH] Fix shadows sampling error in shader due to incorrect sampler used #3000 --- Source/Shaders/ShadowsSampling.hlsl | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Source/Shaders/ShadowsSampling.hlsl b/Source/Shaders/ShadowsSampling.hlsl index 393234fc4..c2b67301e 100644 --- a/Source/Shaders/ShadowsSampling.hlsl +++ b/Source/Shaders/ShadowsSampling.hlsl @@ -11,11 +11,13 @@ #endif #if FEATURE_LEVEL >= FEATURE_LEVEL_SM5 -#define SAMPLE_SHADOW_MAP(shadowMap, shadowUV, sceneDepth) shadowMap.SampleCmpLevelZero(ShadowSamplerLinear, shadowUV, sceneDepth) -#define SAMPLE_SHADOW_MAP_OFFSET(shadowMap, shadowUV, texelOffset, sceneDepth) shadowMap.SampleCmpLevelZero(ShadowSamplerLinear, shadowUV, sceneDepth, texelOffset) +#define SAMPLE_SHADOW_SAMPLER ShadowSamplerLinear +#define SAMPLE_SHADOW_MAP(shadowMap, shadowUV, sceneDepth) shadowMap.SampleCmpLevelZero(SAMPLE_SHADOW_SAMPLER, shadowUV, sceneDepth) +#define SAMPLE_SHADOW_MAP_OFFSET(shadowMap, shadowUV, texelOffset, sceneDepth) shadowMap.SampleCmpLevelZero(SAMPLE_SHADOW_SAMPLER, shadowUV, sceneDepth, texelOffset) #else -#define SAMPLE_SHADOW_MAP(shadowMap, shadowUV, sceneDepth) (sceneDepth < shadowMap.SampleLevel(SamplerLinearClamp, shadowUV, 0).r) -#define SAMPLE_SHADOW_MAP_OFFSET(shadowMap, shadowUV, texelOffset, sceneDepth) (sceneDepth < shadowMap.SampleLevel(SamplerLinearClamp, shadowUV, 0, texelOffset).r) +#define SAMPLE_SHADOW_SAMPLER SamplerLinearClamp +#define SAMPLE_SHADOW_MAP(shadowMap, shadowUV, sceneDepth) (sceneDepth < shadowMap.SampleLevel(SAMPLE_SHADOW_SAMPLER, shadowUV, 0).r) +#define SAMPLE_SHADOW_MAP_OFFSET(shadowMap, shadowUV, texelOffset, sceneDepth) (sceneDepth < shadowMap.SampleLevel(SAMPLE_SHADOW_SAMPLER, shadowUV, 0, texelOffset).r) #endif float4 GetShadowMask(ShadowSample shadow) @@ -276,7 +278,7 @@ ShadowSample SampleDirectionalLightShadow(LightData light, Buffer shadow { float opacity = gBuffer.CustomData.a; shadowMapUV = GetLightShadowAtlasUV(shadow, shadowTile, gBuffer.WorldPos, shadowPosition); - float shadowMapDepth = shadowMap.SampleLevel(SamplerLinearClamp, shadowMapUV, 0).r; + float shadowMapDepth = shadowMap.SampleLevel(SAMPLE_SHADOW_SAMPLER, shadowMapUV, 0).r; result.TransmissionShadow = CalculateSubsurfaceOcclusion(opacity, shadowPosition.z, shadowMapDepth); result.TransmissionShadow = PostProcessShadow(shadow, result.TransmissionShadow); } @@ -337,7 +339,7 @@ ShadowSample SampleLocalLightShadow(LightData light, Buffer shadowsBuffe { float opacity = gBuffer.CustomData.a; shadowMapUV = GetLightShadowAtlasUV(shadow, shadowTile, gBuffer.WorldPos, shadowPosition); - float shadowMapDepth = shadowMap.SampleLevel(SamplerLinearClamp, shadowMapUV, 0).r; + float shadowMapDepth = shadowMap.SampleLevel(SAMPLE_SHADOW_SAMPLER, shadowMapUV, 0).r; result.TransmissionShadow = CalculateSubsurfaceOcclusion(opacity, shadowPosition.z, shadowMapDepth); result.TransmissionShadow = PostProcessShadow(shadow, result.TransmissionShadow); }