Add Global SDF trace step scale for SSR reflections to handle SSR Quality

This commit is contained in:
2026-07-21 14:06:17 +02:00
parent b6204ceb76
commit a4bb293c3e
3 changed files with 12 additions and 4 deletions
Binary file not shown.
@@ -42,6 +42,8 @@ GPU_CB_STRUCT(Data {
float TemporalEffect;
float Intensity;
float FadeOutDistance;
Float3 Padding0;
float RayTraceSDFStepScale;
Matrix ViewMatrix;
Matrix ViewProjectionMatrix;
GlobalSignDistanceFieldPass::ConstantsData GlobalSDF;
@@ -191,21 +193,26 @@ GPUTexture* ScreenSpaceReflectionsPass::Render(RenderContext& renderContext, GPU
// Pick effect settings
int32 maxTraceSamples = 60;
int32 resolveSamples = settings.ResolveSamples;
Data data;
switch (Graphics::SSRQuality)
{
case Quality::Low:
maxTraceSamples = 40;
resolveSamples = Math::Min(resolveSamples, 2);
data.RayTraceSDFStepScale = 1.5f;
break;
case Quality::Medium:
maxTraceSamples = 55;
resolveSamples = Math::Min(resolveSamples, 4);
data.RayTraceSDFStepScale = 1.0f;
break;
case Quality::High:
maxTraceSamples = 70;
data.RayTraceSDFStepScale = 0.8f;
break;
case Quality::Ultra:
maxTraceSamples = 120;
data.RayTraceSDFStepScale = 0.6f;
break;
}
int32 resolvePassIndex = 0;
@@ -217,7 +224,6 @@ GPUTexture* ScreenSpaceReflectionsPass::Render(RenderContext& renderContext, GPU
resolvePassIndex = 1;
// Setup data
Data data;
GBufferPass::SetInputs(view, data.GBuffer);
data.RoughnessFade = Math::Saturate(settings.RoughnessThreshold);
data.MaxTraceSamples = static_cast<float>(maxTraceSamples);
+3 -1
View File
@@ -37,6 +37,8 @@ float RayTraceStep;
float TemporalEffect;
float Intensity;
float FadeOutDistance;
float3 Padding0;
float RayTraceSDFStepScale;
float4x4 ViewMatrix;
float4x4 ViewProjectionMatrix;
GlobalSDFData GlobalSDF;
@@ -155,7 +157,7 @@ float4 PS_RayTracePass(Quad_VS2PS input) : SV_Target0
GlobalSDFTrace sdfTrace;
float maxDistance = GLOBAL_SDF_WORLD_SIZE;
sdfTrace.Init(gBuffer.WorldPos, reflectWS, 0.0f, maxDistance);
GlobalSDFHit sdfHit = RayTraceGlobalSDF(GlobalSDF, GlobalSDFTex, GlobalSDFMip, sdfTrace, 2.0f);
GlobalSDFHit sdfHit = RayTraceGlobalSDF(GlobalSDF, GlobalSDFTex, GlobalSDFMip, sdfTrace, 2.0f, RayTraceSDFStepScale);
if (sdfHit.IsHit())
{
// Sample Global Surface Atlas