Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Fixed
^^^^^

* Fixed OVRTX-backed Newton scenes to keep USD cloning enabled and preserve env-local camera transforms in heterogeneous clone plans.
5 changes: 4 additions & 1 deletion source/isaaclab/isaaclab/scene/interactive_scene.py
Original file line number Diff line number Diff line change
Expand Up @@ -165,13 +165,16 @@ def __init__(self, cfg: InteractiveSceneCfg):
# prepare cloner for environment replication
self.env_prim_paths = [f"{self.env_ns}/env_{i}" for i in range(self.cfg.num_envs)]
is_newton_replicated_scene = self.cfg.replicate_physics and self.physics_backend.startswith("newton")
needs_kit = self.sim.get_setting("/isaaclab/runtime/needs_kit")
needs_kit = has_kit() if needs_kit is None else bool(needs_kit)
has_ovrtx_renderer = bool(self.sim.get_setting("/isaaclab/runtime/has_ovrtx_renderer"))

self.cloner_cfg = cloner.CloneCfg(
clone_regex=self.env_regex_ns,
clone_in_fabric=self.cfg.clone_in_fabric,
device=self.device,
physics_clone_fn=physics_clone_fn,
clone_usd=not is_newton_replicated_scene or has_kit(),
clone_usd=not is_newton_replicated_scene or needs_kit or has_ovrtx_renderer,
)

# create source prim
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Fixed
^^^^^

* Fixed launch-time runtime metadata for OVRTX-backed scenes so kitless visualizer flows preserve the expected USD cloning behavior.
32 changes: 19 additions & 13 deletions source/isaaclab_tasks/isaaclab_tasks/utils/sim_launcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from contextlib import contextmanager
from typing import Any

from isaaclab.app.settings_manager import get_settings_manager
from isaaclab.physics.physics_manager_cfg import PhysicsCfg
from isaaclab.renderers.renderer_cfg import RendererCfg
from isaaclab.sensors.camera.camera_cfg import CameraCfg
Expand Down Expand Up @@ -371,23 +372,21 @@ def launch_simulation(
# loading both in the same process causes a dynamic-linker crash. Use
# --visualizer newton instead, which is compatible with ovrtx presets.
early_visualizer_types = _get_visualizer_types(launcher_args)
if "kit" in early_visualizer_types:
has_ovrtx = _scan_config(
env_cfg, [lambda node: isinstance(node, RendererCfg) and getattr(node, "renderer_type", None) == "ovrtx"]
)[0]
if has_ovrtx:
raise ValueError(
"[launch_simulation] '--visualizer kit' is incompatible with 'ovrtx_renderer'. "
"Both Kit (Isaac Sim) and ovrtx ship conflicting RTX hydra libraries "
"(librtx.hydra.so, liblegacy.hydra.so) compiled against different USD namespaces, "
"which causes a dynamic-linker crash when loaded into the same process. "
"Use '--visualizer newton' instead, which is fully compatible with ovrtx presets."
)
has_ovrtx_renderer = _scan_config(env_cfg, [_is_ovrtx_renderer])[0]
if "kit" in early_visualizer_types and has_ovrtx_renderer:
raise ValueError(
"[launch_simulation] '--visualizer kit' is incompatible with 'ovrtx_renderer'. "
"Both Kit (Isaac Sim) and ovrtx ship conflicting RTX hydra libraries "
"(librtx.hydra.so, liblegacy.hydra.so) compiled against different USD namespaces, "
"which causes a dynamic-linker crash when loaded into the same process. "
"Use '--visualizer newton' instead, which is fully compatible with ovrtx presets."
)

validate_runtime_compatibility(env_cfg, launcher_args)
_ensure_livestream_kit_visualizer(launcher_args)
needs_kit, has_kit_cameras, visualizer_types = compute_kit_requirements(env_cfg, launcher_args)
visualizer_intent = _compute_visualizer_intent(env_cfg)
has_kit_visualizer = "kit" in visualizer_types or visualizer_intent.get("has_kit_visualizer", False)
_set_visualizer_intent_on_launcher_args(launcher_args, visualizer_intent)

if needs_kit and has_kit_cameras:
Expand Down Expand Up @@ -473,7 +472,14 @@ def launch_simulation(
if sim_cfg is not None and hasattr(app_launcher, "device"):
sim_cfg.device = app_launcher.device
close_fn = app_launcher.app.close
elif visualizer_types or visualizer_explicit_none:

settings = get_settings_manager()
settings.set_bool("/isaaclab/runtime/needs_kit", bool(needs_kit))
settings.set_bool("/isaaclab/runtime/has_kit_cameras", bool(has_kit_cameras))
settings.set_bool("/isaaclab/runtime/has_kit_visualizer", bool(has_kit_visualizer))
settings.set_bool("/isaaclab/runtime/has_ovrtx_renderer", bool(has_ovrtx_renderer))

if not needs_kit and (visualizer_types or visualizer_explicit_none):
# Newton path without Kit: AppLauncher is skipped, so manually store the visualizer
# selection in SettingsManager (works in standalone mode via plain dict) so that
# SimulationContext._get_cli_visualizer_types() can find it.
Expand Down
Loading