Skip to content

Commit 6b2c026

Browse files
committed
resync
1 parent 0ca6864 commit 6b2c026

6 files changed

Lines changed: 65 additions & 230 deletions

File tree

source/isaaclab/isaaclab/renderer/__init__.py

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

6-
"""Compatibility wrapper for relocated rendering package."""
6+
"""Compatibility wrapper for relocated rendering-mode package."""
77

8-
from isaaclab.rendering.rendering_quality_presets import get_kit_rendering_preset
8+
from isaaclab.rendering_mode.rendering_mode_presets import get_kit_rendering_preset
99

1010
__all__ = ["get_kit_rendering_preset"]

source/isaaclab/isaaclab/renderer/rendering_quality_presets.py

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

6-
"""Compatibility wrapper for relocated rendering presets module."""
6+
"""Compatibility wrapper for relocated rendering-mode presets module."""
77

8-
from isaaclab.rendering.rendering_quality_presets import * # noqa: F401, F403
8+
from isaaclab.rendering_mode.rendering_mode_presets import * # noqa: F401, F403

source/isaaclab/isaaclab/renderers/renderer_cfg.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,8 @@
1212
class RendererCfg:
1313
"""Configuration for a renderer."""
1414

15-
renderer_type: str = "default"
15+
renderer_type: str | None = None
16+
"""Type identifier for selecting a renderer backend implementation."""
17+
18+
rendering_mode: str | None = None
19+
"""Name of the rendering mode profile to use with this renderer."""

source/isaaclab/isaaclab/sim/simulation_context.py

Lines changed: 17 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525
VisualizerPrebuiltArtifacts,
2626
resolve_scene_data_requirements,
2727
)
28+
from isaaclab.rendering_mode.rendering_mode_utils import (
29+
apply_mode_profile_to_visualizer_cfg,
30+
apply_runtime_mode_profile_to_visualizer,
31+
)
2832
from isaaclab.sim.utils import create_new_stage
2933
from isaaclab.utils.version import has_kit
3034
from isaaclab.visualizers.base_visualizer import BaseVisualizer
@@ -166,6 +170,7 @@ def __init__(self, cfg: SimulationCfg | None = None):
166170
# Initialize visualizer state (provider/visualizers are created lazily during initialize_visualizers()).
167171
self._scene_data_provider: BaseSceneDataProvider | None = None
168172
self._visualizers: list[BaseVisualizer] = []
173+
self._visualizer_mode_keys: dict[int, str | None] = {}
169174
self._scene_data_requirements = SceneDataRequirement()
170175
self._visualizer_prebuilt_artifact: VisualizerPrebuiltArtifacts | None = None
171176
self._visualizer_step_counter = 0
@@ -188,119 +193,19 @@ def __init__(self, cfg: SimulationCfg | None = None):
188193

189194
type(self)._instance = self # Mark as valid singleton only after successful init
190195

191-
def _apply_kit_rendering_preset(self, preset_name: str) -> None:
192-
apply_kit_rendering_preset(self.set_setting, preset_name)
193-
194-
def _apply_kit_rendering_quality_cfg(self, quality_cfg: RenderingQualityCfg) -> None:
195-
apply_kit_rendering_quality_cfg(self.set_setting, quality_cfg)
196-
197-
if rendering_mode:
198-
supported_rendering_modes = {"performance", "balanced", "quality"}
199-
if rendering_mode not in supported_rendering_modes:
200-
raise ValueError(
201-
f"RenderCfg rendering mode '{rendering_mode}' not in supported modes "
202-
f"{sorted(supported_rendering_modes)}."
203-
)
204-
205-
isaaclab_app_exp_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), *[".."] * 4, "apps")
206-
from isaaclab.utils.version import get_isaac_sim_version
207-
208-
if get_isaac_sim_version().major < 6:
209-
isaaclab_app_exp_path = os.path.join(isaaclab_app_exp_path, "isaacsim_5")
210-
211-
preset_filename = os.path.join(isaaclab_app_exp_path, f"rendering_modes/{rendering_mode}.kit")
212-
if os.path.exists(preset_filename):
213-
with open(preset_filename) as file:
214-
preset_dict = toml.load(file)
215-
216-
def _apply_nested(data: dict[str, Any], path: str = "") -> None:
217-
for key, value in data.items():
218-
key_path = f"{path}/{key}" if path else f"/{key}"
219-
if isinstance(value, dict):
220-
_apply_nested(value, key_path)
221-
else:
222-
self.set_setting(key_path.replace(".", "/"), value)
223-
224-
_apply_nested(preset_dict)
225-
else:
226-
logger.warning("[SimulationContext] Render preset file not found: %s", preset_filename)
227-
228-
# RenderCfg fields mapped to setting paths (stored via SettingsManager)
229-
field_to_setting = {
230-
"enable_translucency": "/rtx/translucency/enabled",
231-
"enable_reflections": "/rtx/reflections/enabled",
232-
"enable_global_illumination": "/rtx/indirectDiffuse/enabled",
233-
"enable_dlssg": "/rtx-transient/dlssg/enabled",
234-
"enable_dl_denoiser": "/rtx-transient/dldenoiser/enabled",
235-
"dlss_mode": "/rtx/post/dlss/execMode",
236-
"enable_direct_lighting": "/rtx/directLighting/enabled",
237-
"samples_per_pixel": "/rtx/directLighting/sampledLighting/samplesPerPixel",
238-
"enable_shadows": "/rtx/shadows/enabled",
239-
"enable_ambient_occlusion": "/rtx/ambientOcclusion/enabled",
240-
"dome_light_upper_lower_strategy": "/rtx/domeLight/upperLowerStrategy",
241-
}
242-
243-
for key, value in vars(render_cfg).items():
244-
if value is None or key in {"rendering_mode", "carb_settings", "antialiasing_mode"}:
245-
continue
246-
setting_path = field_to_setting.get(key)
247-
if setting_path is not None:
248-
self.set_setting(setting_path, value)
249-
250-
# Raw overrides from render_cfg (stored via SettingsManager)
251-
extra_settings = getattr(render_cfg, "carb_settings", None)
252-
if extra_settings:
253-
for key, value in extra_settings.items():
254-
if "_" in key:
255-
path = "/" + key.replace("_", "/")
256-
elif "." in key:
257-
path = "/" + key.replace(".", "/")
258-
else:
259-
path = key
260-
self.set_setting(path, value)
261-
262-
# Optional anti-aliasing mode via Replicator (best-effort, may use Omniverse APIs)
263-
antialiasing_mode = getattr(render_cfg, "antialiasing_mode", None)
264-
if antialiasing_mode is not None:
265-
try:
266-
import omni.replicator.core as rep
267-
268-
rep.settings.set_render_rtx_realtime(antialiasing=quality_cfg.kit_antialiasing_mode)
269-
except Exception:
270-
pass
271-
272-
def _apply_newton_quality_cfg_to_visualizer_cfg(self, visualizer_cfg: Any, quality_cfg: RenderingQualityCfg) -> None:
273-
override_fields = {
274-
"newton_enable_shadows": "enable_shadows",
275-
"newton_enable_sky": "enable_sky",
276-
"newton_enable_wireframe": "enable_wireframe",
277-
"newton_sky_upper_color": "sky_upper_color",
278-
"newton_sky_lower_color": "sky_lower_color",
279-
"newton_light_color": "light_color",
280-
}
281-
for quality_field, viz_field in override_fields.items():
282-
value = getattr(quality_cfg, quality_field, None)
283-
if value is not None and hasattr(visualizer_cfg, viz_field):
284-
setattr(visualizer_cfg, viz_field, value)
285-
286-
def _resolve_rendering_quality_name_for_visualizer_cfg(self, visualizer_cfg: Any) -> str | None:
287-
return resolve_rendering_quality_name_for_visualizer_cfg(self.get_setting, visualizer_cfg)
288-
289-
def _resolve_rendering_quality_cfg(self, quality_name: str | None) -> RenderingQualityCfg | None:
290-
quality_cfgs = getattr(self.cfg, "rendering_quality_cfgs", None) or {}
291-
return resolve_rendering_quality_cfg(quality_name, quality_cfgs, logger)
292-
293-
def _apply_quality_profile_to_visualizer_cfg(self, visualizer_cfg: Any) -> None:
294-
quality_cfgs = getattr(self.cfg, "rendering_quality_cfgs", None) or {}
295-
apply_quality_profile_to_visualizer_cfg(
196+
def _apply_mode_profile_to_visualizer_cfg(self, visualizer_cfg: Any) -> None:
197+
"""Apply resolved rendering-mode profile to a visualizer config."""
198+
mode_cfgs = getattr(self.cfg, "rendering_mode_cfgs", None) or {}
199+
apply_mode_profile_to_visualizer_cfg(
296200
self.get_setting,
297201
self.set_setting,
298202
visualizer_cfg,
299203
mode_cfgs,
300204
logger,
301205
)
302206

303-
def _apply_runtime_mode_profile_to_visualizer(self, viz: Visualizer, force: bool = False) -> None:
207+
def _apply_runtime_mode_profile_to_visualizer(self, viz: BaseVisualizer, force: bool = False) -> None:
208+
"""Apply rendering-mode profile updates to an active visualizer instance."""
304209
mode_cfgs = getattr(self.cfg, "rendering_mode_cfgs", None) or {}
305210
apply_runtime_mode_profile_to_visualizer(
306211
self.get_setting,
@@ -481,6 +386,11 @@ def _is_cli_visualizer_disable_all(self) -> bool:
481386

482387
def resolve_visualizer_types(self) -> list[str]:
483388
"""Resolve visualizer types from config or CLI settings."""
389+
if self._is_cli_visualizer_disable_all():
390+
return []
391+
if self._is_cli_visualizer_explicit():
392+
return self._get_cli_visualizer_types()
393+
484394
visualizer_cfgs = self.cfg.visualizer_cfgs
485395
if visualizer_cfgs is None:
486396
return []
@@ -715,6 +625,7 @@ def update_visualizers(self, dt: float) -> None:
715625
visualizers_to_remove = []
716626
for viz in self._visualizers:
717627
try:
628+
self._apply_runtime_mode_profile_to_visualizer(viz)
718629
if viz.is_closed or not viz.is_running():
719630
if viz.is_closed:
720631
logger.info("Visualizer closed: %s", type(viz).__name__)

source/isaaclab/isaaclab/visualizers/visualizer_cfg.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ class VisualizerCfg:
4646
camera_usd_path: str = "/World/envs/env_0/Camera"
4747
"""Absolute USD path to a camera prim when camera_source='usd_path'."""
4848

49-
env_filter_mode: Literal["none", "env_filter_ids", "random_n"] = "none"
50-
"""Env filter mode: 'none', 'env_filter_ids', or 'random_n'."""
49+
env_filter_mode: Literal["none", "env_ids", "random_n"] = "none"
50+
"""Env filter mode: 'none', 'env_ids', or 'random_n'."""
5151

5252
env_filter_random_n: int = 64
5353
"""If env_filter_mode='random_n', number of envs to sample."""
@@ -56,17 +56,17 @@ class VisualizerCfg:
5656
"""Seed for deterministic env sampling."""
5757

5858
env_filter_ids: list[int] = [i for i in range(0, 64, 4)]
59-
"""If env_filter_mode='env_filter_ids', only these env indices are shown.
59+
"""If env_filter_mode='env_ids', only these env indices are shown.
6060
6161
This improves performance, particularly for large-scale training, by reducing scene updates sent to visualizers.
6262
Note, OV visualizer only applies a cosmetic visibility toggle (no performance gain).
6363
"""
6464

65-
rendering_quality: str | None = None
66-
"""Name of the rendering quality profile for this visualizer.
65+
rendering_mode: str | None = None
66+
"""Name of the rendering mode profile for this visualizer.
6767
68-
Selects an entry from :class:`isaaclab.sim.SimulationCfg.rendering_quality_cfgs`.
69-
If None, no rendering quality overrides are applied and backend/native defaults are used.
68+
Selects an entry from :class:`isaaclab.sim.SimulationCfg.rendering_mode_cfgs`.
69+
If None, no rendering mode overrides are applied and backend/native defaults are used.
7070
"""
7171

7272
def get_visualizer_type(self) -> str | None:

0 commit comments

Comments
 (0)