From b371847ed885876554fe09c1aaca88922ae7376b Mon Sep 17 00:00:00 2001 From: Nikita Fediuchin Date: Sun, 2 Feb 2025 23:36:09 +0200 Subject: [PATCH] Better voxel tracing normal computation --- resources/shaders/common/voxel-tracing.gsl | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/resources/shaders/common/voxel-tracing.gsl b/resources/shaders/common/voxel-tracing.gsl index a90614a..1439796 100644 --- a/resources/shaders/common/voxel-tracing.gsl +++ b/resources/shaders/common/voxel-tracing.gsl @@ -96,12 +96,10 @@ void raycastVoxel(VoxelTraceConsts consts, inout VoxelTraceData data) } float3 computeVoxelNormal(VoxelTraceData data) { - float3 normal = data.traceOrigin - (float3(data.voxelPosition) + 0.5f); - float3 absNormal = abs(normal); - float maxNormal = max(max(absNormal.x, absNormal.y), absNormal.z); - if (maxNormal == absNormal.x) normal = float3(sign(normal.x), 0.0f, 0.0f); - else if (maxNormal == absNormal.y) normal = float3(0.0f, sign(normal.y), 0.0f); - else normal = float3(0.0f, 0.0f, sign(normal.z)); + float3 normal; + float3 surfacePos = data.traceOrigin - (float3(data.voxelPosition) + 0.5f); + int32 index = getLowest(abs(abs(surfacePos) - 0.5f)); + normal[index] = surfacePos[index] > 0.0f ? 1.0f : -1.0f; return normal; }