#!/usr/bin/env python3 # Copyright (c) Meta Platforms, Inc. and affiliates. # All rights reserved. # # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. """Create multiview data.""" import sys from os import path # Making sure you can run this, even if pulsar hasn't been installed yet. sys.path.insert(0, path.join(path.dirname(__file__), "..", "..")) def create_multiview(): """Test multiview optimization.""" import imageio # import cv2 # import skvideo.io import numpy as np import torch from pytorch3d.renderer.points.pulsar import Renderer from torch import nn from torch.autograd import Variable # Constructor. n_points = 10 width = 1000 height = 1000 class Model(nn.Module): """A dummy model to test the integration into a stacked model.""" def __init__(self): super(Model, self).__init__() self.gamma = 0.1 self.renderer = Renderer(width, height, n_points) def forward(self, vp, vc, vr, cam_params): # self.gamma *= 0.995 # print("gamma: ", self.gamma) return self.renderer.forward(vp, vc, vr, cam_params, self.gamma, 45.0) # Generate sample data. 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 # print(vert_pos[0]) vert_col = torch.rand(n_points, 3, dtype=torch.float32) vert_rad = torch.rand(n_points, dtype=torch.float32) # Distortion. # vert_pos[:, 1] += 0.5 vert_col *= 0.5 # vert_rad *= 0.7 for device in [torch.device("cuda")]: model = Model().to(device) vert_pos = vert_pos.to(device) vert_col = vert_col.to(device) vert_rad = vert_rad.to(device) for angle_idx, angle in enumerate([-1.5, -0.8, -0.4, -0.1, 0.1, 0.4, 0.8, 1.5]): vert_pos_v = Variable(vert_pos, requires_grad=False) vert_col_v = Variable(vert_col, requires_grad=False) vert_rad_v = Variable(vert_rad, requires_grad=False) cam_params = torch.tensor( [ np.sin(angle) * 35.0, 0.0, 30.0 - np.cos(angle) * 35.0, 0.0, -angle, 0.0, 5.0, 2.0, ], dtype=torch.float32, ).to(device) cam_params_v = Variable(cam_params, requires_grad=False) result = model.forward(vert_pos_v, vert_col_v, vert_rad_v, cam_params_v) result_im = (result.cpu().detach().numpy() * 255).astype(np.uint8) imageio.imsave( "reference/examples_TestRenderer_test_multiview_%d.png" % (angle_idx), result_im, ) if __name__ == "__main__": create_multiview()