From befaf65ab1c0ce3c37ed8be0e9935515551844d5 Mon Sep 17 00:00:00 2001 From: Wojciech Figat Date: Fri, 3 Jun 2022 16:11:46 +0200 Subject: [PATCH] Optimize DDGI probes position calculation when sampling irradiance --- Source/Shaders/GI/DDGI.hlsl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/Shaders/GI/DDGI.hlsl b/Source/Shaders/GI/DDGI.hlsl index 69619faa9..2aaf8f74d 100644 --- a/Source/Shaders/GI/DDGI.hlsl +++ b/Source/Shaders/GI/DDGI.hlsl @@ -140,14 +140,15 @@ float3 SampleDDGIIrradiance(DDGIData data, Texture2D probesState, Textur uint probeIndex = GetDDGIScrollingProbeIndex(data, probeCoords); // Load probe position and state - float4 probePositionAndState = LoadDDGIProbePositionAndState(data, probesState, probeIndex, probeCoords); - if (probePositionAndState.w == DDGI_PROBE_STATE_INACTIVE) + float4 probeState = probesState.Load(int3(GetDDGIProbeTexelCoords(data, probeIndex), 0)); + if (probeState.w == DDGI_PROBE_STATE_INACTIVE) continue; + float3 probePosition = baseProbeWorldPosition + ((probeCoords - baseProbeCoords) * data.ProbesSpacing) + probeState.xyz; // Calculate the distance and direction from the (biased and non-biased) shading point and the probe - float3 worldPosToProbe = normalize(probePositionAndState.xyz - worldPosition); - float3 biasedPosToProbe = normalize(probePositionAndState.xyz - biasedWorldPosition); - float biasedPosToProbeDist = length(probePositionAndState.xyz - biasedWorldPosition); + float3 worldPosToProbe = normalize(probePosition.xyz - worldPosition); + float3 biasedPosToProbe = normalize(probePosition.xyz - biasedWorldPosition); + float biasedPosToProbeDist = length(probePosition.xyz - biasedWorldPosition); // Smooth backface test float weight = Square(dot(worldPosToProbe, worldNormal) * 0.5f + 0.5f); @@ -188,7 +189,6 @@ float3 SampleDDGIIrradiance(DDGIData data, Texture2D probesState, Textur #endif // Debug probe offset visualization - //float4 probeState = probesState.Load(int3(GetDDGIProbeTexelCoords(data, probeIndex), 0)); //probeIrradiance = float3(max(frac(probeState.xyz) * 2, 0.1f)); // Accumulate weighted irradiance