mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2025-08-02 03:42:50 +08:00
has_verts_normals for Meshes
Summary: Add ability to ask a Meshes if it already has normals. If it does, then requesting normals will not trigger a calculation. MeshesFormatInterpreters will therefore be able to decide whether to save normals. Reviewed By: theschnitz, nikhilaravi Differential Revision: D27765261 fbshipit-source-id: 7c87dbf999d5616d20f5eb2c01039ee5ff65a830
This commit is contained in:
parent
2bbca5f2a7
commit
66b97a0c28
@ -732,6 +732,12 @@ class Meshes(object):
|
||||
)
|
||||
return self._verts_padded_to_packed_idx
|
||||
|
||||
def has_verts_normals(self) -> bool:
|
||||
"""
|
||||
Check whether vertex normals are already present.
|
||||
"""
|
||||
return self._verts_normals_packed is not None
|
||||
|
||||
def verts_normals_packed(self):
|
||||
"""
|
||||
Get the packed representation of the vertex normals.
|
||||
|
@ -1003,7 +1003,7 @@ class TestMeshes(TestCaseMixin, unittest.TestCase):
|
||||
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]], dtype=torch.int64
|
||||
)
|
||||
mesh = Meshes(verts=[verts], faces=[faces])
|
||||
|
||||
self.assertFalse(mesh.has_verts_normals())
|
||||
verts_normals_expected = torch.tensor(
|
||||
[
|
||||
[0.0, 0.0, 1.0],
|
||||
@ -1025,6 +1025,7 @@ class TestMeshes(TestCaseMixin, unittest.TestCase):
|
||||
self.assertTrue(
|
||||
torch.allclose(mesh.verts_normals_list()[0], verts_normals_expected)
|
||||
)
|
||||
self.assertTrue(mesh.has_verts_normals())
|
||||
self.assertTrue(
|
||||
torch.allclose(mesh.faces_normals_list()[0], faces_normals_expected)
|
||||
)
|
||||
@ -1141,11 +1142,14 @@ class TestMeshes(TestCaseMixin, unittest.TestCase):
|
||||
def test_assigned_normals(self):
|
||||
verts = torch.rand(2, 6, 3)
|
||||
faces = torch.randint(6, size=(2, 4, 3))
|
||||
no_normals = Meshes(verts=verts, faces=faces)
|
||||
self.assertFalse(no_normals.has_verts_normals())
|
||||
|
||||
for verts_normals in [list(verts.unbind(0)), verts]:
|
||||
yes_normals = Meshes(
|
||||
verts=verts.clone(), faces=faces, verts_normals=verts_normals
|
||||
)
|
||||
self.assertTrue(yes_normals.has_verts_normals())
|
||||
self.assertClose(yes_normals.verts_normals_padded(), verts)
|
||||
yes_normals.offset_verts_(torch.FloatTensor([1, 2, 3]))
|
||||
self.assertClose(yes_normals.verts_normals_padded(), verts)
|
||||
|
Loading…
x
Reference in New Issue
Block a user