Skip to content

Keep partitioned environments visible in viewport and XR views - #7270

Open
rwiltz wants to merge 1 commit into
isaac-sim:developfrom
rwiltz:rwiltz/fix-partition-rendering-xr
Open

Keep partitioned environments visible in viewport and XR views#7270
rwiltz wants to merge 1 commit into
isaac-sim:developfrom
rwiltz:rwiltz/fix-partition-rendering-xr

Conversation

@rwiltz

@rwiltz rwiltz commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

#Description

AppLauncher enables the all-environment spectator view by passing
--/rtx/scenePartitioning/showAllPartitionsByDefault=true whenever a Kit visualizer,
viewport, recording, livestream, or XR is requested. The Kit builds shipped with the
pinned Isaac Sim (6.0.1.0, Kit 110.1.2+production.326809) do not implement that
setting — it appears nowhere in the omni.hydra.rtx binaries.

Since per-environment scene partitioning became the default in #7053, RTX therefore
culls every prim carrying omni:scenePartition from cameras without a matching token.
The Kit viewport and the XR view carry no token, so partitioned environments vanish from
both while environment-scoped camera sensors still render them. RTX honors the token
only for non-instanced geometry, so the failure looks selective: on
IsaacContrib-PickPlace-Locomanipulation-G1-Abs the robot and packing table (USD
instance proxies) render, while the steering wheel and bin (plain meshes) appear only in
the XR picture-in-picture feed.

KitVisualizer._apply_viewport_camera_scene_partition() has a working fallback that
tags the viewport camera with env_0, but it is skipped because the ineffective setting
reads back as true. Nothing tags the XR camera at all.

This defaults per-environment scene partitioning off for launches that render a view
without a partition token, in the same AppLauncher branch that already decides visual
output intent. Partitioning only isolates per-environment camera renders, which a
spectator launch does not need. The Kit argument is still passed, so relaxing the gate
is a one-line change once the Isaac Sim bump #7053 assumed (alpha.50 / Kit 360924) lands.

Precedence is unchanged: an explicit ISAAC_LAB_ENABLE_ISAAC_RTX_PER_ENV_SCENE_PARTITION
or a task-set IsaacRtxRendererCfg.enable_scene_partitioning still wins.

Reproducer:

  uv run --extra teleop isaaclab teleop run \
    --task IsaacContrib-PickPlace-Locomanipulation-G1-Abs --visualizer kit --xr

Type of change

  • Bug fix (non-breaking change which fixes an issue)

Checklist

  • I have read and understood the contribution guidelines
  • I have run the pre-commit checks with ./isaaclab.sh --format
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • I have added a changelog fragment under source/<pkg>/changelog.d/ for every touched package (do not edit CHANGELOG.rst or bump extension.toml — CI handles that)
  • I have added my name to the CONTRIBUTORS.md or my name already exists there

RTX culls geometry carrying omni:scenePartition from any camera whose token
does not match, and the Kit builds shipped with the pinned Isaac Sim do not
implement /rtx/scenePartitioning/showAllPartitionsByDefault. Enabling the
all-environment spectator view therefore had no effect: the Kit viewport and
the XR view, which carry no token, lost every partitioned environment while
environment-scoped camera sensors still rendered them.

Default per-environment scene partitioning off for launches that render such a
view. Partitioning only isolates per-environment camera renders, which a
spectator launch does not need. An explicit
ISAAC_LAB_ENABLE_ISAAC_RTX_PER_ENV_SCENE_PARTITION or a task-set
IsaacRtxRendererCfg.enable_scene_partitioning still wins.
@rwiltz
rwiltz requested a review from a team August 21, 2026 14:01
@github-actions github-actions Bot added bug Something isn't working isaac-lab Related to Isaac Lab team labels Aug 21, 2026
@greptile-apps

greptile-apps Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR keeps partitioned environments visible in untokened viewport and XR views by disabling per-environment RTX scene partitioning by default for spectator launches while preserving explicit configuration precedence.

  • Adds a mutable scene-partitioning fallback consumed when the environment variable is unset.
  • Applies the disabled fallback when AppLauncher detects viewport, visualizer, recording, livestream, or XR output.
  • Adds launcher and renderer utility tests covering spectator intent and explicit environment overrides.
  • Documents the behavioral change and new helper in a changelog fragment.

Confidence Score: 5/5

The PR appears safe to merge, with no concrete blocking or independently actionable non-blocking issues identified.

The changed launcher path preserves explicit scene-partitioning overrides, and the accompanying tests cover both spectator defaults and environment-variable precedence.

Important Files Changed

Filename Overview
source/isaaclab/isaaclab/app/app_launcher.py Spectator-output detection now disables the fallback for per-environment scene partition authoring while retaining the existing Kit argument.
source/isaaclab/isaaclab/utils/renderers.py Adds a process-level default setter and preserves environment-variable precedence when resolving scene partitioning.
source/isaaclab/test/app/test_app_launcher_argv.py Extends launcher tests to verify spectator launches disable the fallback and explicit opt-in remains effective.
source/isaaclab/test/utils/test_renderers.py Tests the mutable fallback and environment-variable override behavior.
source/isaaclab/changelog.d/rwiltz-spectator-scene-partitioning.minor.rst Documents the viewport/XR visibility fix, override mechanisms, and new renderer utility.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[AppLauncher resolves output intent] --> B{Spectator view requested?}
    B -- No --> C[Keep scene partitioning enabled by default]
    B -- Yes --> D[Pass showAllPartitionsByDefault Kit argument]
    D --> E[Set per-environment partitioning fallback to disabled]
    E --> F{Explicit environment or renderer config override?}
    F -- Yes --> G[Use explicit value]
    F -- No --> H[Do not author per-environment partition tokens]
    H --> I[Partitioned geometry remains visible in viewport and XR]
Loading

Reviews (1): Last reviewed commit: "Keep partitioned environments visible in..." | Re-trigger Greptile

@isaaclab-review-bot isaaclab-review-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isaac Lab Review Bot

The change defaults per-environment RTX scene partitioning off for visual-output launches so cameras without partition tokens can display environments on the pinned Kit build. The candidate concern about video and livestream changing camera-sensor content is not established by the supplied context; those modes already share the spectator-view requirement targeted by the fix.

  • Design and architecture: The process-wide renderer fallback is set during AppLauncher Kit-argument resolution and consumed when IsaacRtxRendererCfg derives its default. This is a deliberate compatibility path for viewport, recording, livestream, and XR output, while non-spectator launches retain the existing enabled default.
  • API: The new setter is documented and changelog-covered. The environment variable continues to take precedence, invalid values still raise, and an explicit IsaacRtxRendererCfg value remains authoritative. The mutable module-level default introduces process-wide state, but the patch documents that behavior and isolates it in tests.
  • Implementation: The AppLauncher trigger, Kit setting injection, renderer-default lookup, environment override, and test reset paths were traced. Tests cover visual-output intent and environment-variable precedence. No supplied evidence demonstrates that the intended video or livestream branches corrupt environment-scoped camera output.

No blocking issues. No inline issue met the actionable-evidence threshold; the assessment above records the review feedback.

Automated review; human maintainers own approval decisions.

setting = argument.partition("=")[0]
if not any(arg.partition("=")[0] == setting for arg in sys.argv + self._kit_args):
self._kit_args.append(argument)
self._disable_per_env_scene_partitioning_default()

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

flipping this here would revert the default behavior we flipped. once the public package includes the fix we won't need this. maybe we can mark this with a temporary workaround or we can condition on isaac sim version

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants