diff --git a/pytorch3d/csrc/utils/geometry_utils.cuh b/pytorch3d/csrc/utils/geometry_utils.cuh index bd2d9a29..c4ddd4aa 100644 --- a/pytorch3d/csrc/utils/geometry_utils.cuh +++ b/pytorch3d/csrc/utils/geometry_utils.cuh @@ -550,7 +550,7 @@ __device__ inline bool IsInsideTriangle( const float3& v1, const float3& v2) { bool inside; - if (AreaOfTriangle(v0, v1, v2) < 1e-5) { + if (AreaOfTriangle(v0, v1, v2) < 5e-3) { inside = 0; } else { float3 bary = BarycentricCoords3Forward(p, v0, v1, v2); diff --git a/pytorch3d/csrc/utils/geometry_utils.h b/pytorch3d/csrc/utils/geometry_utils.h index 2bb647a9..6112f357 100644 --- a/pytorch3d/csrc/utils/geometry_utils.h +++ b/pytorch3d/csrc/utils/geometry_utils.h @@ -651,7 +651,7 @@ static bool IsInsideTriangle( const vec3& v1, const vec3& v2) { bool inside; - if (AreaOfTriangle(v0, v1, v2) < 1e-5) { + if (AreaOfTriangle(v0, v1, v2) < 5e-3) { inside = 0; } else { vec3 bary = BarycentricCoords3Forward(p, v0, v1, v2); diff --git a/tests/test_point_mesh_distance.py b/tests/test_point_mesh_distance.py index 77361c79..2976db15 100644 --- a/tests/test_point_mesh_distance.py +++ b/tests/test_point_mesh_distance.py @@ -11,7 +11,11 @@ import torch from common_testing import TestCaseMixin, get_random_cuda_device from pytorch3d import _C from pytorch3d.loss import point_mesh_edge_distance, point_mesh_face_distance -from pytorch3d.structures import Meshes, Pointclouds, packed_to_list +from pytorch3d.structures import ( + Meshes, + Pointclouds, + packed_to_list, +) class TestPointMeshDistance(TestCaseMixin, unittest.TestCase): @@ -126,7 +130,7 @@ class TestPointMeshDistance(TestCaseMixin, unittest.TestCase): area = torch.cross(v0, v1).norm() / 2.0 # check if triangle is a line or a point. In that case, return False - if area < 1e-5: + if area < 5e-3: return False bary = TestPointMeshDistance._point_to_bary(point, tri) inside = ((bary >= 0.0) * (bary <= 1.0)).all()