Fix GPU-based SDF generation to reject negative distance from far away triangles

This commit is contained in:
Wojtek Figat
2024-08-12 10:55:27 +02:00
parent 8f18d654ee
commit bcb0200435
2 changed files with 4 additions and 2 deletions

BIN
Content/Shaders/SDF.flax (Stored with Git LFS)

Binary file not shown.

View File

@@ -142,6 +142,8 @@ void CS_RasterizeTriangle(uint3 DispatchThreadId : SV_DispatchThreadID)
int voxelIndex = GetVoxelIndex(voxelCoord); int voxelIndex = GetVoxelIndex(voxelCoord);
float3 voxelPos = GetVoxelPos(voxelCoord); float3 voxelPos = GetVoxelPos(voxelCoord);
float distance = SignedDistancePointToTriangle(voxelPos, v0, v1, v2); float distance = SignedDistancePointToTriangle(voxelPos, v0, v1, v2);
if (distance < -10.0f) // TODO: find a better way to reject negative distance from degenerate triangles that break SDF shape
distance = abs(distance);
InterlockedMin(SDF[voxelIndex], FloatFlip3(distance)); InterlockedMin(SDF[voxelIndex], FloatFlip3(distance));
} }
} }