small numerical fix to point_mesh

Summary: Small fix by adjusting the area `eps` to account for really small faces when computing point to face distances

Reviewed By: bottler

Differential Revision: D34331336

fbshipit-source-id: 51c4888ea46fefa4e31d5b0bb494a9f9d77813cd
This commit is contained in:
Georgia Gkioxari 2022-02-21 09:16:50 -08:00 committed by Facebook GitHub Bot
parent 3de41223dd
commit ee71c7c447
3 changed files with 8 additions and 4 deletions

View File

@ -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);

View File

@ -651,7 +651,7 @@ static bool IsInsideTriangle(
const vec3<T>& v1,
const vec3<T>& v2) {
bool inside;
if (AreaOfTriangle(v0, v1, v2) < 1e-5) {
if (AreaOfTriangle(v0, v1, v2) < 5e-3) {
inside = 0;
} else {
vec3<T> bary = BarycentricCoords3Forward(p, v0, v1, v2);

View File

@ -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()