| 298 | class 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 |