diff --git a/Source/Engine/Renderer/GI/DynamicDiffuseGlobalIllumination.cpp b/Source/Engine/Renderer/GI/DynamicDiffuseGlobalIllumination.cpp index 9082555b2..e1949a7d8 100644 --- a/Source/Engine/Renderer/GI/DynamicDiffuseGlobalIllumination.cpp +++ b/Source/Engine/Renderer/GI/DynamicDiffuseGlobalIllumination.cpp @@ -46,7 +46,8 @@ PACK_STRUCT(struct Data0 GlobalSignDistanceFieldPass::ConstantsData GlobalSDF; GlobalSurfaceAtlasPass::ConstantsData GlobalSurfaceAtlas; GBufferData GBuffer; - Float2 Padding0; + float Padding0; + float ProbesDistanceLimit; float ResetBlend; float TemporalTime; Int4 ProbeScrollClears[4]; @@ -471,6 +472,7 @@ bool DynamicDiffuseGlobalIlluminationPass::RenderInner(RenderContext& renderCont data.DDGI = ddgiData.Result.Constants; data.GlobalSDF = bindingDataSDF.Constants; data.GlobalSurfaceAtlas = bindingDataSurfaceAtlas.Constants; + data.ProbesDistanceLimit = 1.05f; // TODO: expose to be configurable? data.ResetBlend = clear ? 1.0f : 0.0f; for (int32 cascadeIndex = 0; cascadeIndex < cascadesCount; cascadeIndex++) { diff --git a/Source/Shaders/GI/DDGI.shader b/Source/Shaders/GI/DDGI.shader index 2c272df8a..4ecd185ec 100644 --- a/Source/Shaders/GI/DDGI.shader +++ b/Source/Shaders/GI/DDGI.shader @@ -27,7 +27,8 @@ DDGIData DDGI; GlobalSDFData GlobalSDF; GlobalSurfaceAtlasData GlobalSurfaceAtlas; GBufferData GBuffer; -float2 Padding0; +float Padding0; +float ProbesDistanceLimit; float ResetBlend; float TemporalTime; int4 ProbeScrollClears[4]; @@ -111,7 +112,7 @@ void CS_Classify(uint3 DispatchThreadId : SV_DispatchThreadID) #endif float sdfDst = abs(sdf); float threshold = GlobalSDF.CascadeVoxelSize[CascadeIndex]; - float distanceLimit = length(probesSpacing) * 1.5f; + float distanceLimit = length(probesSpacing) * ProbesDistanceLimit; float relocateLimit = length(probesSpacing) * 0.6f; if (sdfDst > distanceLimit) // Probe is too far from geometry {