diff --git a/pytorch3d/renderer/points/rasterizer.py b/pytorch3d/renderer/points/rasterizer.py index 9b9e8bbf..91fad704 100644 --- a/pytorch3d/renderer/points/rasterizer.py +++ b/pytorch3d/renderer/points/rasterizer.py @@ -86,22 +86,18 @@ class PointsRasterizer(nn.Module): raise ValueError(msg) pts_world = point_clouds.points_padded() - pts_world_packed = point_clouds.points_packed() - pts_screen = cameras.transform_points(pts_world, **kwargs) - # NOTE: Retaining view space z coordinate for now. # TODO: Remove this line when the convention for the z coordinate in # the rasterizer is decided. i.e. retain z in view space or transform # to a different range. - view_transform = get_world_to_view_transform(R=cameras.R, T=cameras.T) - verts_view = view_transform.transform_points(pts_world) - pts_screen[..., 2] = verts_view[..., 2] - - # Offset points of input pointcloud to reuse cached padded/packed calculations. - pad_to_packed_idx = point_clouds.padded_to_packed_idx() - pts_screen_packed = pts_screen.view(-1, 3)[pad_to_packed_idx, :] - pts_packed_offset = pts_screen_packed - pts_world_packed - point_clouds = point_clouds.offset(pts_packed_offset) + pts_view = cameras.get_world_to_view_transform(**kwargs).transform_points( + pts_world + ) + pts_screen = cameras.get_projection_transform(**kwargs).transform_points( + pts_view + ) + pts_screen[..., 2] = pts_view[..., 2] + point_clouds = point_clouds.update_padded(pts_screen) return point_clouds def forward(self, point_clouds, **kwargs) -> PointFragments: