diff --git a/Content/Shaders/SSR.flax b/Content/Shaders/SSR.flax index eff8fa529..b662963fb 100644 --- a/Content/Shaders/SSR.flax +++ b/Content/Shaders/SSR.flax @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:95928c48d4140f7c01738b18511a0bf938350d693ccbf8397b999cb1917bb673 -size 11587 +oid sha256:9c5204b30cf9408b70988c46bc6756a1e182934de550f0b8e1606f3c6e17f20c +size 11656 diff --git a/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp b/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp index 80babe20b..b63e9fd3d 100644 --- a/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp +++ b/Source/Engine/Renderer/ScreenSpaceReflectionsPass.cpp @@ -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(maxTraceSamples); diff --git a/Source/Shaders/SSR.shader b/Source/Shaders/SSR.shader index b4b9d5c34..7a132bb7a 100644 --- a/Source/Shaders/SSR.shader +++ b/Source/Shaders/SSR.shader @@ -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