Minor sdf imporvements
This commit is contained in:
@@ -213,11 +213,11 @@ float3 SampleDDGIIrradiance(DDGIData data, Texture2D<snorm float4> probesData, T
|
||||
float2 uv = GetDDGIProbeUV(data, cascadeIndex, probeIndex, octahedralCoords, DDGI_PROBE_RESOLUTION_DISTANCE);
|
||||
float2 probeDistance = probesDistance.SampleLevel(SamplerLinearClamp, uv, 0).rg * 2.0f;
|
||||
float probeDistanceMean = probeDistance.x;
|
||||
float probeDistanceMean2 = probeDistance.y;
|
||||
|
||||
// Visibility weight (Chebyshev)
|
||||
if (biasedPosToProbeDist > probeDistanceMean)
|
||||
{
|
||||
float probeDistanceMean2 = probeDistance.y;
|
||||
float probeDistanceVariance = abs(Square(probeDistanceMean) - probeDistanceMean2);
|
||||
float chebyshevWeight = probeDistanceVariance / (probeDistanceVariance + Square(biasedPosToProbeDist - probeDistanceMean));
|
||||
weight *= max(chebyshevWeight * chebyshevWeight * chebyshevWeight, 0.05f);
|
||||
|
||||
@@ -223,7 +223,6 @@ GlobalSDFHit RayTraceGlobalSDF(const GlobalSDFData data, Texture3D<float> tex, T
|
||||
float4 cascadePosDistance = data.CascadePosDistance[cascade];
|
||||
float voxelSize = data.CascadeVoxelSize[cascade];
|
||||
float voxelExtent = voxelSize * 0.5f;
|
||||
float cascadeMinStep = voxelSize;
|
||||
float3 worldPosition = trace.WorldPosition + trace.WorldDirection * (voxelSize * cascadeTraceStartBias);
|
||||
|
||||
// Hit the cascade bounds to find the intersection points
|
||||
@@ -270,7 +269,7 @@ GlobalSDFHit RayTraceGlobalSDF(const GlobalSDFData data, Texture3D<float> tex, T
|
||||
stepDistance *= cascadeMaxDistance;
|
||||
|
||||
// Detect surface hit
|
||||
float minSurfaceThickness = voxelExtent * saturate(stepTime / (voxelExtent * 2.0f));
|
||||
float minSurfaceThickness = voxelExtent * saturate(stepTime / voxelSize);
|
||||
if (stepDistance < minSurfaceThickness)
|
||||
{
|
||||
// Surface hit
|
||||
@@ -293,7 +292,7 @@ GlobalSDFHit RayTraceGlobalSDF(const GlobalSDFData data, Texture3D<float> tex, T
|
||||
}
|
||||
|
||||
// Move forward
|
||||
stepTime += max(stepDistance * trace.StepScale, cascadeMinStep);
|
||||
stepTime += max(stepDistance * trace.StepScale, voxelSize);
|
||||
}
|
||||
hit.StepsCount += step;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user