Skip to content

Commit 0ee5dc5

Browse files
authored
Merge branch 'develop' into octi/cloner_ordering
2 parents 209ab2d + 7b44452 commit 0ee5dc5

5 files changed

Lines changed: 66 additions & 4 deletions

File tree

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
Added
2+
^^^^^
3+
4+
* Added :meth:`~isaaclab.utils.backend_utils.get_default_renderer_cfg`. to lazy load the IsaacRtxRendererCfg
5+
6+
Changed
7+
^^^^^^^
8+
9+
* :class:`~isaaclab.sensors.camera.CameraCfg` now defaults its render_cfg to :class:`~isaaclab.renderers.RenderCfg`
10+
:meth:`~isaaclab.utils.backend_utils.get_default_renderer_cfg` is called during __post_init__ to replace
11+
the generic RenderCfg with the default config :class:`~isaaclab_physx.renderers.IsaacRtxRendererCfg`

source/isaaclab/isaaclab/sensors/camera/camera.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@ def __init__(self, cfg: CameraCfg):
113113
# IsaacRtxRendererCfg overrides to flip /isaaclab/render/rtx_sensors. The
114114
# flag must be set pre-sim.reset() because SimulationContext.is_rendering
115115
# and several env classes read it before the renderer's __init__ runs.
116-
if self.cfg.renderer_cfg.renderer_type == "isaac_rtx":
116+
renderer_type = getattr(self.cfg.renderer_cfg, "renderer_type", None)
117+
if renderer_type == "isaac_rtx":
117118
get_settings_manager().set_bool("/isaaclab/render/rtx_sensors", True)
118119

119120
# Compute camera orientation (convention conversion) and spawn

source/isaaclab/isaaclab/sensors/camera/camera_cfg.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
from dataclasses import MISSING, field
1010
from typing import TYPE_CHECKING, Literal
1111

12-
from isaaclab_physx.renderers import IsaacRtxRendererCfg
13-
1412
from isaaclab.renderers import RendererCfg
1513
from isaaclab.sim import FisheyeCameraCfg, PinholeCameraCfg
1614
from isaaclab.utils import configclass
@@ -191,7 +189,7 @@ class OffsetCfg:
191189
on :attr:`renderer_cfg` instead.
192190
"""
193191

194-
renderer_cfg: RendererCfg = field(default_factory=IsaacRtxRendererCfg)
192+
renderer_cfg: RendererCfg = field(default_factory=RendererCfg)
195193
"""Renderer configuration for camera sensor."""
196194

197195
def __post_init__(self):
@@ -201,6 +199,14 @@ def __post_init__(self):
201199
:class:`DeprecationWarning` and is copied onto ``self.renderer_cfg``
202200
when that cfg defines the same-named field.
203201
"""
202+
# TODO when Camera.__init__ moves rtx_sensor setting out of camera initialization
203+
# the default renderer config instantiation can be moved into the render factory
204+
# and get_default_render_cfg method can be removed from backend_utils
205+
renderer_type = getattr(self.renderer_cfg, "renderer_type", None)
206+
if renderer_type == "default":
207+
from isaaclab.utils.backend_utils import get_default_renderer_cfg
208+
209+
self.renderer_cfg = get_default_renderer_cfg()
204210
# Forwarded by name: any same-named field on ``renderer_cfg`` will receive the value.
205211
for field_name, default in _DEPRECATED_RENDERER_FIELD_DEFAULTS.items():
206212
value = getattr(self, field_name)

source/isaaclab/isaaclab/sensors/camera/tiled_camera_cfg.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ class TiledCameraCfg(CameraCfg):
2727
class_type: type["TiledCamera"] | str = "{DIR}.tiled_camera:TiledCamera"
2828

2929
def __post_init__(self):
30+
# TODO when Camera.__init__ moves rtx_sensor setting out of camera initialization
31+
# the default renderer config instantiation can be moved into the render factory
32+
# and get_default_render_cfg method can be removed from backend_utils
33+
renderer_type = getattr(self.renderer_cfg, "renderer_type", None)
34+
if renderer_type == "default":
35+
from isaaclab.utils.backend_utils import get_default_renderer_cfg
36+
37+
self.renderer_cfg = get_default_renderer_cfg()
3038
warnings.warn(
3139
"TiledCameraCfg is deprecated. Use CameraCfg directly — "
3240
"Camera now includes TiledCamera's vectorized rendering optimizations.",

source/isaaclab/isaaclab/utils/backend_utils.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,48 @@
33
#
44
# SPDX-License-Identifier: BSD-3-Clause
55

6+
from __future__ import annotations
7+
68
import importlib
79
import logging
10+
from typing import TYPE_CHECKING
11+
12+
if TYPE_CHECKING:
13+
from isaaclab.renderers.renderer_cfg import RendererCfg
814

915
logger = logging.getLogger(__name__)
1016

1117

18+
def get_default_renderer_cfg() -> RendererCfg:
19+
"""Return the default :class:`~isaaclab.renderers.renderer_cfg.RendererCfg` for cameras.
20+
21+
Lazily imports :mod:`isaaclab_physx.renderers` and returns a new
22+
:class:`~isaaclab_physx.renderers.IsaacRtxRendererCfg` instance.
23+
24+
Returns:
25+
A new default Isaac RTX renderer configuration.
26+
27+
Raises:
28+
ImportError: If :mod:`isaaclab_physx.renderers` cannot be imported or does not
29+
expose ``IsaacRtxRendererCfg``.
30+
"""
31+
try:
32+
renderers_mod = importlib.import_module("isaaclab_physx.renderers")
33+
except ImportError as e:
34+
raise ImportError(
35+
"The default camera renderer configuration requires the optional 'isaaclab_physx' "
36+
"package (import 'isaaclab_physx.renderers'). Install isaaclab_physx or set "
37+
"CameraCfg.renderer_cfg explicitly."
38+
) from e
39+
try:
40+
default_cls = renderers_mod.IsaacRtxRendererCfg
41+
except AttributeError as e:
42+
raise ImportError(
43+
"Module 'isaaclab_physx.renderers' is available but does not define 'IsaacRtxRendererCfg'."
44+
) from e
45+
return default_cls()
46+
47+
1248
class FactoryBase:
1349
"""A generic factory class that dynamically loads backends."""
1450

0 commit comments

Comments
 (0)