| |
| |
| |
| |
| |
|
|
| """Test right hand/left hand system compatibility.""" |
| import logging |
| import sys |
| import unittest |
| from os import path |
|
|
| import torch |
|
|
| from ..common_testing import TestCaseMixin |
|
|
|
|
| |
| sys.path.insert(0, path.join(path.dirname(__file__), "..", "..")) |
| devices = [torch.device("cuda"), torch.device("cpu")] |
|
|
|
|
| class TestHands(TestCaseMixin, unittest.TestCase): |
| """Test right hand/left hand system compatibility.""" |
|
|
| def test_basic(self): |
| """Basic forward test.""" |
| from pytorch3d.renderer.points.pulsar import Renderer |
|
|
| n_points = 10 |
| width = 1000 |
| height = 1000 |
| renderer_left = Renderer(width, height, n_points, right_handed_system=False) |
| renderer_right = Renderer(width, height, n_points, right_handed_system=True) |
| |
| torch.manual_seed(1) |
| vert_pos = torch.rand(n_points, 3, dtype=torch.float32) * 10.0 |
| vert_pos[:, 2] += 25.0 |
| vert_pos[:, :2] -= 5.0 |
| vert_pos_neg = vert_pos.clone() |
| vert_pos_neg[:, 2] *= -1.0 |
| vert_col = torch.rand(n_points, 3, dtype=torch.float32) |
| vert_rad = torch.rand(n_points, dtype=torch.float32) |
| cam_params = torch.tensor( |
| [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 5.0, 2.0], dtype=torch.float32 |
| ) |
| for device in devices: |
| vert_pos = vert_pos.to(device) |
| vert_pos_neg = vert_pos_neg.to(device) |
| vert_col = vert_col.to(device) |
| vert_rad = vert_rad.to(device) |
| cam_params = cam_params.to(device) |
| renderer_left = renderer_left.to(device) |
| renderer_right = renderer_right.to(device) |
| result_left = ( |
| renderer_left.forward( |
| vert_pos, |
| vert_col, |
| vert_rad, |
| cam_params, |
| 1.0e-1, |
| 45.0, |
| percent_allowed_difference=0.01, |
| ) |
| .cpu() |
| .detach() |
| .numpy() |
| ) |
| hits_left = ( |
| renderer_left.forward( |
| vert_pos, |
| vert_col, |
| vert_rad, |
| cam_params, |
| 1.0e-1, |
| 45.0, |
| percent_allowed_difference=0.01, |
| mode=1, |
| ) |
| .cpu() |
| .detach() |
| .numpy() |
| ) |
| result_right = ( |
| renderer_right.forward( |
| vert_pos_neg, |
| vert_col, |
| vert_rad, |
| cam_params, |
| 1.0e-1, |
| 45.0, |
| percent_allowed_difference=0.01, |
| ) |
| .cpu() |
| .detach() |
| .numpy() |
| ) |
| hits_right = ( |
| renderer_right.forward( |
| vert_pos_neg, |
| vert_col, |
| vert_rad, |
| cam_params, |
| 1.0e-1, |
| 45.0, |
| percent_allowed_difference=0.01, |
| mode=1, |
| ) |
| .cpu() |
| .detach() |
| .numpy() |
| ) |
| self.assertClose(result_left, result_right) |
| self.assertClose(hits_left, hits_right) |
|
|
|
|
| if __name__ == "__main__": |
| logging.basicConfig(level=logging.INFO) |
| logging.getLogger("pulsar.renderer").setLevel(logging.WARN) |
| unittest.main() |
|
|