mirror of
https://github.com/facebookresearch/pytorch3d.git
synced 2025-08-02 03:42:50 +08:00
PyTorch3D - Avoid flip in TexturesAtlas
Summary: Performance improvement: Use torch.lerp to map uv coordinates to the range needed for grid_sample (i.e. map [0, 1] to [-1, 1] and invert the y-axis) Reviewed By: bottler Differential Revision: D51961728 fbshipit-source-id: db19a5e3f482e9af7b96b20f88a1e5d0076dac43
This commit is contained in:
parent
94da8841af
commit
06cdc313a7
@ -995,9 +995,13 @@ class TexturesUV(TexturesBase):
|
|||||||
# is the left-top pixel of input, and values x = 1, y = 1 is the
|
# is the left-top pixel of input, and values x = 1, y = 1 is the
|
||||||
# right-bottom pixel of input.
|
# right-bottom pixel of input.
|
||||||
|
|
||||||
pixel_uvs = pixel_uvs * 2.0 - 1.0
|
# map to a range of [-1, 1] and flip the y axis
|
||||||
|
pixel_uvs = torch.lerp(
|
||||||
|
pixel_uvs.new_tensor([-1.0, 1.0]),
|
||||||
|
pixel_uvs.new_tensor([1.0, -1.0]),
|
||||||
|
pixel_uvs,
|
||||||
|
)
|
||||||
|
|
||||||
texture_maps = torch.flip(texture_maps, [2]) # flip y axis of the texture map
|
|
||||||
if texture_maps.device != pixel_uvs.device:
|
if texture_maps.device != pixel_uvs.device:
|
||||||
texture_maps = texture_maps.to(pixel_uvs.device)
|
texture_maps = texture_maps.to(pixel_uvs.device)
|
||||||
texels = F.grid_sample(
|
texels = F.grid_sample(
|
||||||
@ -1035,8 +1039,12 @@ class TexturesUV(TexturesBase):
|
|||||||
texture_maps = self.maps_padded() # NxHxWxC
|
texture_maps = self.maps_padded() # NxHxWxC
|
||||||
texture_maps = texture_maps.permute(0, 3, 1, 2) # NxCxHxW
|
texture_maps = texture_maps.permute(0, 3, 1, 2) # NxCxHxW
|
||||||
|
|
||||||
faces_verts_uvs = faces_verts_uvs * 2.0 - 1.0
|
# map to a range of [-1, 1] and flip the y axis
|
||||||
texture_maps = torch.flip(texture_maps, [2]) # flip y axis of the texture map
|
faces_verts_uvs = torch.lerp(
|
||||||
|
faces_verts_uvs.new_tensor([-1.0, 1.0]),
|
||||||
|
faces_verts_uvs.new_tensor([1.0, -1.0]),
|
||||||
|
faces_verts_uvs,
|
||||||
|
)
|
||||||
|
|
||||||
textures = F.grid_sample(
|
textures = F.grid_sample(
|
||||||
texture_maps,
|
texture_maps,
|
||||||
|
@ -932,7 +932,7 @@ class TestRenderMeshes(TestCaseMixin, unittest.TestCase):
|
|||||||
)
|
)
|
||||||
).save(DATA_DIR / f"DEBUG_test_joinuvs{i}_map3.png")
|
).save(DATA_DIR / f"DEBUG_test_joinuvs{i}_map3.png")
|
||||||
|
|
||||||
self.assertClose(output, merged)
|
self.assertClose(output, merged, atol=0.005)
|
||||||
self.assertClose(output, image_ref, atol=0.005)
|
self.assertClose(output, image_ref, atol=0.005)
|
||||||
self.assertClose(mesh.textures.maps_padded()[0].cpu(), map_ref, atol=0.05)
|
self.assertClose(mesh.textures.maps_padded()[0].cpu(), map_ref, atol=0.05)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user