Skip to content

Commit 79d69f4

Browse files
committed
update
1 parent 600f82a commit 79d69f4

File tree

6 files changed

+52
-39
lines changed

6 files changed

+52
-39
lines changed

examples/rigid/single_franka_batch_render.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ def main():
1515
parser.add_argument("-r", "--render_all_cameras", action="store_true", default=False)
1616
parser.add_argument("-o", "--output_dir", type=str, default="img_output/test")
1717
parser.add_argument("-u", "--use_rasterizer", action="store_true", default=False)
18+
parser.add_argument("-d", "--debug", action="store_true", default=False)
1819
args = parser.parse_args()
1920

2021
########################## init ##########################
@@ -37,6 +38,14 @@ def main():
3738
)
3839

3940
########################## cameras ##########################
41+
debug_cam = scene.add_camera(
42+
res=(720, 1280),
43+
pos=(1.5, -0.5, 1.0),
44+
lookat=(0.0, 0.0, 0.5),
45+
fov=60,
46+
GUI=args.vis,
47+
debug=True,
48+
)
4049
cam_0 = scene.add_camera(
4150
res=(512, 512),
4251
pos=(1.5, 0.5, 1.5),
@@ -75,14 +84,20 @@ def main():
7584
# Create an image exporter
7685
exporter = FrameImageExporter(args.output_dir)
7786

87+
if args.debug:
88+
debug_cam.start_recording()
7889
for i in range(args.n_steps):
7990
scene.step()
91+
if args.debug:
92+
debug_cam.render()
8093
if args.render_all_cameras:
8194
rgba, depth, _, _ = scene.render_all_cameras(rgb=True, depth=True)
8295
exporter.export_frame_all_cameras(i, rgb=rgba, depth=depth)
8396
else:
8497
rgba, depth, _, _ = cam_1.render(rgb=True, depth=True)
8598
exporter.export_frame_single_camera(i, cam_1.idx, rgb=rgba, depth=depth)
99+
if args.debug:
100+
debug_cam.stop_recording("debug_cam.mp4")
86101

87102

88103
if __name__ == "__main__":

genesis/constants.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,6 @@ def __format__(self, format_spec):
2323
return f"<{self.name}: {self.value}>"
2424

2525

26-
class CAMERA_TYPE(IntEnum):
27-
RASTERIZER = 0
28-
RAYTRACER = 1
29-
BATCH_RENDERER = 2
30-
31-
3226
# geom type in rigid solver
3327
class GEOM_TYPE(IntEnum):
3428
# Beware PLANE must be the first geometry type as this is assumed by MPR collision detection.

genesis/engine/scene.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
from genesis.engine.entities import Emitter
1717
from genesis.engine.states.solvers import SimState
1818
from genesis.engine.simulator import Simulator
19-
from genesis.constants import CAMERA_TYPE
2019
from genesis.options import (
2120
AvatarOptions,
2221
BaseCouplerOptions,
@@ -529,7 +528,7 @@ def add_camera(
529528
spp=256,
530529
denoise=True,
531530
env_idx=None,
532-
camera_type=CAMERA_TYPE.RASTERIZER,
531+
debug=False,
533532
):
534533
"""
535534
Add a camera to the scene.
@@ -568,16 +567,16 @@ def add_camera(
568567
Whether to denoise the camera's rendered image. Only available when using the RayTracer renderer. Defaults
569568
to True. If OptiX denoiser is not available in your platform, consider enabling the OIDN denoiser option
570569
when building the RayTracer.
571-
camera_type : CAMERA_TYPE
572-
The type of camera to add. Options are CAMERA_TYPE.RASTERIZER, CAMERA_TYPE.RAYTRACER, CAMERA_TYPE.BATCH_RENDERER.
570+
debug : bool
571+
Whether to use the debug camera (Rasterizer). Effective for BatchRenderer and RayTracer settings. Defaults to False.
573572
574573
Returns
575574
-------
576575
camera : genesis.Camera
577576
The created camera object.
578577
"""
579578
return self._visualizer.add_camera(
580-
res, pos, lookat, up, model, fov, aperture, focus_dist, GUI, spp, denoise, env_idx, camera_type
579+
res, pos, lookat, up, model, fov, aperture, focus_dist, GUI, spp, denoise, env_idx, debug
581580
)
582581

583582
@gs.assert_unbuilt

genesis/vis/batch_renderer.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
import genesis as gs
88
from genesis.repr_base import RBC
9-
from genesis.constants import CAMERA_TYPE
109

1110
try:
1211
from gs_madrona.renderer_gs import MadronaBatchRendererAdapter
@@ -86,9 +85,7 @@ def build(self):
8685
if gs.backend != gs.cuda:
8786
gs.raise_exception("BatchRenderer requires CUDA backend.")
8887

89-
self._cameras = gs.List(
90-
[camera for camera in self._visualizer._cameras if camera.camera_type == CAMERA_TYPE.BATCH_RENDERER]
91-
)
88+
self._cameras = gs.List([camera for camera in self._visualizer._cameras if not camera.debug])
9289
lights = self._lights
9390
rigid = self._visualizer.scene.rigid_solver
9491
n_envs = max(self._visualizer.scene.n_envs, 1)
@@ -220,3 +217,7 @@ def reset(self):
220217
@property
221218
def lights(self):
222219
return self._lights
220+
221+
@property
222+
def cameras(self):
223+
return self._cameras

genesis/vis/camera.py

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import os
33
import time
44
import math
5+
from functools import lru_cache
56

67
import cv2
78
import numpy as np
@@ -11,7 +12,6 @@
1112
import genesis.utils.geom as gu
1213
from genesis.sensors import Sensor
1314
from genesis.utils.misc import tensor_to_array
14-
from genesis.constants import CAMERA_TYPE
1515

1616

1717
# quat for Madrona needs to be transformed to y-forward
@@ -92,7 +92,7 @@ def __init__(
9292
far=100.0,
9393
transform=None,
9494
env_idx=None,
95-
camera_type=CAMERA_TYPE.RASTERIZER,
95+
debug=False,
9696
):
9797
self._idx = idx
9898
self._uid = gs.UID()
@@ -117,7 +117,7 @@ def __init__(
117117
self._is_built = False
118118
self._attached_link = None
119119
self._attached_offset_T = None
120-
self._camera_type = camera_type
120+
self._debug = debug
121121

122122
self._env_idx = env_idx
123123
self._envs_offset = None
@@ -318,13 +318,13 @@ def _batch_render(
318318
# If n_envs == 0, the second dimension of the output is camera.
319319
# Only return the current camera's image
320320
if rgb_arr:
321-
rgb_arr = rgb_arr[self._idx]
321+
rgb_arr = rgb_arr[self.b_idx]
322322
if depth:
323-
depth_arr = depth_arr[self._idx]
323+
depth_arr = depth_arr[self.b_idx]
324324
if segmentation:
325-
seg_arr = seg_arr[self._idx]
325+
seg_arr = seg_arr[self.b_idx]
326326
if normal:
327-
normal_arr = normal_arr[self._idx]
327+
normal_arr = normal_arr[self.b_idx]
328328
return rgb_arr, depth_arr, seg_arr, normal_arr
329329

330330
@gs.assert_built
@@ -380,25 +380,22 @@ def render(
380380
"""
381381
rgb_arr, depth_arr, seg_arr, seg_color_arr, normal_arr = None, None, None, None, None
382382

383-
if self._camera_type == CAMERA_TYPE.BATCH_RENDERER:
384-
assert self._batch_renderer is not None, "Batch renderer is not initialized."
383+
if not self._debug and self._batch_renderer is not None:
385384
rgb_arr, depth_arr, seg_idxc_arr, normal_arr = self._batch_render(
386385
rgb, depth, segmentation, normal, force_render, antialiasing
387386
)
388-
elif self._camera_type == CAMERA_TYPE.RAYTRACER:
387+
elif self._debug and self._raytracer is not None:
389388
if rgb:
390-
assert self._raytracer is not None, "Ray tracer is not initialized."
391389
self._raytracer.update_scene()
392390
rgb_arr = self._raytracer.render_camera(self)
393391

394392
if depth or segmentation or normal:
395-
assert self._rasterizer is not None, "Rasterizer is not initialized"
396393
self._rasterizer.update_scene()
397394
_, depth_arr, seg_idxc_arr, normal_arr = self._rasterizer.render_camera(
398395
self, False, depth, segmentation, normal=normal
399396
)
400-
elif self._camera_type == CAMERA_TYPE.RASTERIZER:
401-
assert self._rasterizer is not None, "Rasterizer is not initialized"
397+
else:
398+
print("Camera is debug camera")
402399
self._rasterizer.update_scene()
403400
rgb_arr, depth_arr, seg_idxc_arr, normal_arr = self._rasterizer.render_camera(
404401
self, rgb, depth, segmentation, normal=normal
@@ -716,7 +713,7 @@ def stop_recording(self, save_to_filename=None, fps=60):
716713
+ f'_cam_{self.idx}_{time.strftime("%Y%m%d_%H%M%S")}.mp4'
717714
)
718715

719-
if self._rgb_stacked:
716+
if not self._debug and self._rgb_stacked:
720717
for env_idx in self._visualizer._context.rendered_envs_idx:
721718
env_imgs = [imgs[env_idx] for imgs in self._recorded_imgs]
722719
env_name, env_ext = os.path.splitext(save_to_filename)
@@ -774,9 +771,18 @@ def is_built(self):
774771

775772
@property
776773
def idx(self):
777-
"""The integer index of the camera."""
774+
"""The global integer index of the camera."""
778775
return self._idx
779776

777+
@property
778+
@lru_cache(maxsize=1)
779+
def b_idx(self):
780+
"""The index of the camera in the batch renderer."""
781+
assert self._batch_renderer is not None, "Batch renderer is not initialized."
782+
print(f"{[c.uid for c in self._batch_renderer.cameras]}")
783+
print(f"self: {self.uid}")
784+
return self._batch_renderer.cameras.index(self)
785+
780786
@property
781787
def uid(self):
782788
"""The unique ID of the camera"""
@@ -861,9 +867,9 @@ def env_idx(self):
861867
return self._env_idx
862868

863869
@property
864-
def camera_type(self):
865-
"""The type of camera."""
866-
return self._camera_type
870+
def debug(self):
871+
"""Whether the camera is a debug camera."""
872+
return self._debug
867873

868874
@property
869875
def pos(self):

genesis/vis/visualizer.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,7 @@ def destroy(self):
127127
self.viewer_lock = None
128128
self._renderer = None
129129

130-
def add_camera(
131-
self, res, pos, lookat, up, model, fov, aperture, focus_dist, GUI, spp, denoise, env_idx, camera_type
132-
):
130+
def add_camera(self, res, pos, lookat, up, model, fov, aperture, focus_dist, GUI, spp, denoise, env_idx, debug):
133131
cam_idx = len(self._cameras)
134132
camera = Camera(
135133
self,
@@ -145,8 +143,8 @@ def add_camera(
145143
GUI,
146144
spp,
147145
denoise,
148-
env_idx=env_idx,
149-
camera_type=camera_type,
146+
env_idx=0 if debug else env_idx,
147+
debug=debug,
150148
)
151149
self._cameras.append(camera)
152150
return camera

0 commit comments

Comments
 (0)