Skip to content

Commit d354904

Browse files
committed
Fix RayTracer camera initialization.
1 parent 8ae2b99 commit d354904

File tree

2 files changed

+16
-26
lines changed

2 files changed

+16
-26
lines changed

genesis/vis/camera.py

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,13 @@ def __init__(
130130
self._focus_dist = np.linalg.norm(np.asarray(lookat) - np.asarray(pos))
131131

132132
def build(self):
133+
n_envs = max(self._visualizer.scene.n_envs, 1)
134+
self._multi_env_pos_tensor = torch.empty((n_envs, 3), dtype=gs.tc_float, device=gs.device)
135+
self._multi_env_lookat_tensor = torch.empty((n_envs, 3), dtype=gs.tc_float, device=gs.device)
136+
self._multi_env_up_tensor = torch.empty((n_envs, 3), dtype=gs.tc_float, device=gs.device)
137+
self._multi_env_transform_tensor = torch.empty((n_envs, 4, 4), dtype=gs.tc_float, device=gs.device)
138+
self._multi_env_quat_tensor = torch.empty((n_envs, 4), dtype=gs.tc_float, device=gs.device)
139+
133140
self._envs_offset = torch.as_tensor(self._visualizer._scene.envs_offset, dtype=gs.tc_float, device=gs.device)
134141

135142
self._batch_renderer = self._visualizer.batch_renderer
@@ -154,7 +161,12 @@ def build(self):
154161
self._other_stacked = self._visualizer._context.env_separate_rigid
155162

156163
self._is_built = True
157-
self.setup_initial_env_poses()
164+
self.set_pose(
165+
transform=self._initial_transform, pos=self._initial_pos, lookat=self._initial_lookat, up=self._initial_up
166+
)
167+
# FIXME: For some reason, it is necessary to update the camera twice...
168+
if self._raytracer is not None:
169+
self._raytracer.update_camera(self)
158170

159171
def attach(self, rigid_link, offset_T):
160172
"""
@@ -371,7 +383,7 @@ def render(
371383
normal_arr : np.ndarray
372384
The rendered surface normal(s).
373385
"""
374-
rgb_arr, depth_arr, seg_arr, seg_color_arr, normal_arr = None, None, None, None, None
386+
rgb_arr, depth_arr, seg_arr, seg_color_arr, seg_idxc_arr, normal_arr = None, None, None, None, None, None
375387

376388
if self._batch_renderer is not None:
377389
rgb_arr, depth_arr, seg_idxc_arr, normal_arr = self._batch_render(
@@ -521,28 +533,6 @@ def render_pointcloud(self, world_frame=True):
521533
point_cloud = point_cloud[:, :3].reshape((*depth_arr.shape, 3))
522534
return point_cloud, mask
523535

524-
@gs.assert_built
525-
def setup_initial_env_poses(self):
526-
"""
527-
Setup the camera poses for multiple environments.
528-
"""
529-
if self._initial_transform is not None:
530-
assert self._initial_transform.shape == (4, 4)
531-
self._initial_pos, self._initial_lookat, self._initial_up = gu.T_to_pos_lookat_up(self._initial_transform)
532-
else:
533-
self._initial_transform = gu.pos_lookat_up_to_T(self._initial_pos, self._initial_lookat, self._initial_up)
534-
535-
n_envs = max(self._visualizer.scene.n_envs, 1)
536-
self._multi_env_pos_tensor = self._initial_pos.repeat((n_envs, 1))
537-
self._multi_env_lookat_tensor = self._initial_lookat.repeat((n_envs, 1))
538-
self._multi_env_up_tensor = self._initial_up.repeat((n_envs, 1))
539-
self._multi_env_transform_tensor = self._initial_transform.repeat((n_envs, 1, 1))
540-
self._multi_env_quat_tensor = _T_to_quat_for_madrona(self._multi_env_transform_tensor)
541-
542-
self._rasterizer.update_camera(self)
543-
if self._raytracer is not None:
544-
self._raytracer.update_camera(self)
545-
546536
@gs.assert_built
547537
def set_pose(self, transform=None, pos=None, lookat=None, up=None, env_idx=None):
548538
"""

genesis/vis/raytracer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,7 @@ def add_camera(self, camera):
604604
if camera_model == "pinhole":
605605
self._cameras[camera_name] = LuisaRenderPy.PinholeCamera(
606606
name=camera_name,
607-
pose=self.get_transform(camera.transform),
607+
pose=self.get_transform(np.eye(4)),
608608
film=LuisaRenderPy.Film(resolution=camera.res),
609609
filter=LuisaRenderPy.Filter(),
610610
spp=camera.spp,
@@ -613,7 +613,7 @@ def add_camera(self, camera):
613613
elif camera_model == "thinlens":
614614
self._cameras[camera_name] = LuisaRenderPy.ThinLensCamera(
615615
name=camera_name,
616-
pose=self.get_transform(camera.transform),
616+
pose=self.get_transform(np.eye(4)),
617617
film=LuisaRenderPy.Film(resolution=camera.res),
618618
filter=LuisaRenderPy.Filter(),
619619
spp=camera.spp,

0 commit comments

Comments
 (0)