ttxskk
update
d7e58f0
import torch
try:
from detrsmpl.core.renderer.mpr_renderer.cuda.rasterizer import \
estimate_normals as estimate_normals_cuda # noqa: E501
from detrsmpl.core.renderer.mpr_renderer.cuda.rasterizer import \
project_mesh as project_mesh_cuda # noqa: E501
except (ImportError, ModuleNotFoundError):
print('Please reinstall MMHuman3D to build mpr_renderer.')
raise
def estimate_normals(vertices, faces, pinhole, vertices_filter=None):
"""Estimate the vertices normals with the specified faces and camera.
Args:
vertices (torch.tensor): Shape should be (num_verts, 3).
faces (torch.tensor): The faces of the vertices.
pinhole (object): The object of the camera.
Returns:
coords (torch.tensor): The estimated coordinates.
normals (torch.tensor): The estimated normals.
"""
if vertices_filter is None:
assert torch.is_tensor(vertices)
assert vertices.is_cuda
assert len(vertices.shape) == 2
n = vertices.shape[0]
vertices_filter = torch.ones((n),
dtype=torch.uint8,
device=vertices.device)
vertices = vertices.contiguous()
vertices_ndc = pinhole.project_ndc(vertices)
coords, normals = estimate_normals_cuda(vertices_ndc, faces, vertices,
vertices_filter, pinhole.h,
pinhole.w)
return coords, normals
def project_mesh(vertices,
faces,
vertice_values,
pinhole,
vertices_filter=None):
"""Project mesh to the image plane with the specified faces and camera.
Args:
vertices (torch.tensor): Shape should be (num_verts, 3).
faces (torch.tensor): The faces of the vertices.
vertice_values (torch.tensor): The depth of the each vertex.
pinhole (object): The object of the camera.
Returns:
torch.tensor: The projected mesh.
"""
if vertices_filter is None:
assert torch.is_tensor(vertices)
assert vertices.is_cuda
assert len(vertices.shape) == 2
n = vertices.shape[0]
vertices_filter = torch.ones((n),
dtype=torch.uint8,
device=vertices.device)
vertices = vertices.contiguous()
vertices_ndc = pinhole.project_ndc(vertices)
return project_mesh_cuda(vertices_ndc, faces, vertice_values,
vertices_filter, pinhole.h, pinhole.w)