diff --git a/Source/Engine/Tools/ModelTool/ModelTool.cpp b/Source/Engine/Tools/ModelTool/ModelTool.cpp index 99c98bb0e..c5a703726 100644 --- a/Source/Engine/Tools/ModelTool/ModelTool.cpp +++ b/Source/Engine/Tools/ModelTool/ModelTool.cpp @@ -572,9 +572,8 @@ bool ModelTool::GenerateModelSDF(Model* inputModel, ModelData* modelData, float const int32 yAddress = resolutionMip.X * y + zAddress; for (int32 x = 0; x < resolutionMip.X; x++) { - // Linear box filter around the voxel - // TODO: use min distance for nearby texels (texel distance + distance to texel) - float distance = 0; + // Min-filter around the voxel + float distance = MAX_float; for (int32 dz = 0; dz < 2; dz++) { const int32 dzAddress = (z * 2 + dz) * (resolution.Y * resolution.X); @@ -585,11 +584,10 @@ bool ModelTool::GenerateModelSDF(Model* inputModel, ModelData* modelData, float { const int32 dxAddress = (x * 2 + dx) + dyAddress; const float d = formatRead((byte*)voxelsMipSrc + dxAddress * formatStride) * decodeMAD.X + decodeMAD.Y; - distance += d; + distance = Math::Min(distance, d); } } } - distance *= 1.0f / 8.0f; const int32 xAddress = x + yAddress; formatWrite((byte*)voxelsMip + xAddress * formatStride, distance * encodeMAD.X + encodeMAD.Y); diff --git a/Source/Shaders/SDF.shader b/Source/Shaders/SDF.shader index a19e6d346..7976558c7 100644 --- a/Source/Shaders/SDF.shader +++ b/Source/Shaders/SDF.shader @@ -218,32 +218,6 @@ void CS_FloodFill(uint3 GroupId : SV_GroupID, uint GroupIndex : SV_GroupIndex) sdf = CombineSDF(sdf, voxelCoord + offset.xyy, nearbyDistance); sdf = CombineSDF(sdf, voxelCoord + offset.yxy, nearbyDistance); sdf = CombineSDF(sdf, voxelCoord + offset.yyx, nearbyDistance); -#if 0 - nearbyDistance = WorldUnitsPerVoxel * 1.41421f; - sdf = CombineSDF(sdf, voxelCoord + offset.xxy, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.xzy, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.zzy, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.zxy, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.xyx, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.xyz, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.zyz, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.zyx, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.yxx, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.yxz, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.yzz, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.yzx, nearbyDistance); -#endif -#if 0 - nearbyDistance = WorldUnitsPerVoxel * 1.73205f; - sdf = CombineSDF(sdf, voxelCoord + offset.xxx, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.xxz, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.xzx, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.xzz, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.zxx, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.zxz, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.zzx, nearbyDistance); - sdf = CombineSDF(sdf, voxelCoord + offset.zzz, nearbyDistance); -#endif } SDF[voxelIndex] = asuint(sdf);