| 3792 | ) |
| 3793 | |
| 3794 | def _set_circle(self): |
| 3795 | |
| 3796 | self.cam_poses = [] # (b, q) |
| 3797 | for i in range(self.total): |
| 3798 | poses = [] |
| 3799 | center_angles = self.params.get('center_angles', None) # (2,) in degree, (to_x, to_z) |
| 3800 | if center_angles is None: |
| 3801 | # determine random center direction |
| 3802 | center_angles = self.rng.rand(2) * 360. # angle in degree |
| 3803 | |
| 3804 | # determine random d for input_imgs |
| 3805 | d = self.params.get('d', None) # (,) |
| 3806 | if d is None: |
| 3807 | assert 'min_r' in self.params |
| 3808 | assert 'max_r' in self.params |
| 3809 | max_r = self.params['max_r'] |
| 3810 | min_r = self.params['min_r'] |
| 3811 | d = self.rng.rand(1) * (max_r - min_r) + min_r |
| 3812 | |
| 3813 | # determine circle r for input_imgs |
| 3814 | r = self.params.get('r', None) # (,) |
| 3815 | if r is None: |
| 3816 | assert 'max_angle' in self.params |
| 3817 | max_angle = self.params['max_angle'] |
| 3818 | r = self.rng.rand(1) * np.tan(max_angle * np.pi / 180.) * d |
| 3819 | |
| 3820 | # generate input camera path |
| 3821 | Hs_c2w = utils.generate_camera_circle_path( |
| 3822 | num_poses=self.n_imgs, |
| 3823 | d_to_origin=d, |
| 3824 | r_circle=r, |
| 3825 | center_angles=center_angles, |
| 3826 | ) # (n, 4, 4) |
| 3827 | for j in range(Hs_c2w.size(0)): |
| 3828 | poses.append(Hs_c2w[j]) # list of H_c2w |
| 3829 | self.cam_poses.append(poses) # list of list of H_c2w |
| 3830 | |
| 3831 | def _set_udlrfb(self): |
| 3832 | # fixed 6 input views: up down left right front back |