MCPcopy Create free account
hub / github.com/MoyGcc/vid2avatar / Renderer

Class Renderer

preprocessing/preprocessing_utils.py:298–369  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

296 return img_points
297
298class Renderer():
299
300 def __init__(self, principal_point=None, img_size=None, cam_intrinsic = None):
301
302 super().__init__()
303
304 self.device = torch.device("cuda:0")
305 torch.cuda.set_device(self.device)
306 self.cam_intrinsic = cam_intrinsic
307 self.image_size = img_size
308 self.render_img_size = np.max(img_size)
309
310 principal_point = [-(self.cam_intrinsic[0,2]-self.image_size[1]/2.)/(self.image_size[1]/2.), -(self.cam_intrinsic[1,2]-self.image_size[0]/2.)/(self.image_size[0]/2.)]
311 self.principal_point = torch.tensor(principal_point, device=self.device).unsqueeze(0)
312
313 self.cam_R = torch.from_numpy(np.array([[-1., 0., 0.],
314 [0., -1., 0.],
315 [0., 0., 1.]])).cuda().float().unsqueeze(0)
316
317 self.cam_T = torch.zeros((1,3)).cuda().float()
318
319 half_max_length = max(self.cam_intrinsic[0:2,2])
320 self.focal_length = torch.tensor([(self.cam_intrinsic[0,0]/half_max_length).astype(np.float32), \
321 (self.cam_intrinsic[1,1]/half_max_length).astype(np.float32)]).unsqueeze(0)
322
323 self.cameras = SfMPerspectiveCameras(focal_length=self.focal_length, principal_point=self.principal_point, R=self.cam_R, T=self.cam_T, device=self.device)
324
325 self.lights = PointLights(device=self.device,location=[[0.0, 0.0, 0.0]], ambient_color=((1,1,1),),diffuse_color=((0,0,0),),specular_color=((0,0,0),))
326
327 self.raster_settings = RasterizationSettings(image_size=self.render_img_size, faces_per_pixel=10, blur_radius=0, max_faces_per_bin=30000)
328 self.rasterizer = MeshRasterizer(cameras=self.cameras, raster_settings=self.raster_settings)
329
330 self.shader = SoftPhongShader(device=self.device, cameras=self.cameras, lights=self.lights)
331
332 self.renderer = MeshRenderer(rasterizer=self.rasterizer, shader=self.shader)
333
334 def set_camera(self, R, T):
335 self.cam_R = R
336 self.cam_T = T
337 self.cam_R[:, :2, :] *= -1.0
338 self.cam_T[:, :2] *= -1.0
339 self.cam_R = torch.transpose(self.cam_R,1,2)
340 self.cameras = SfMPerspectiveCameras(focal_length=self.focal_length, principal_point=self.principal_point, R=self.cam_R, T=self.cam_T, device=self.device)
341 self.rasterizer = MeshRasterizer(cameras=self.cameras, raster_settings=self.raster_settings)
342 self.shader = SoftPhongShader(device=self.device, cameras=self.cameras, lights=self.lights)
343 self.renderer = MeshRenderer(rasterizer=self.rasterizer, shader=self.shader)
344
345 def render_mesh_recon(self, verts, faces, R=None, T=None, colors=None, mode='npat'):
346 '''
347 mode: normal, phong, texture
348 '''
349 with torch.no_grad():
350
351 mesh = Meshes(verts, faces)
352
353 normals = torch.stack(mesh.verts_normals_list())
354 front_light = -torch.tensor([0,0,-1]).float().to(verts.device)
355 shades = (normals * front_light.view(1,1,3)).sum(-1).clamp(min=0).unsqueeze(-1).expand(-1,-1,3)

Callers 1

mainFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected