Skip to content

Mute repetitive USD out-of-scope material-binding diagnostic - #7654

Closed
matthewtrepte wants to merge 1 commit into
isaac-sim:developfrom
matthewtrepte:mtrepte/suppress-usd-out-of-scope-binding-warnings
Closed

Mute repetitive USD out-of-scope material-binding diagnostic#7654
matthewtrepte wants to merge 1 commit into
isaac-sim:developfrom
matthewtrepte:mtrepte/suppress-usd-out-of-scope-binding-warnings

Conversation

@matthewtrepte

Copy link
Copy Markdown
Contributor

Description

Several shipped assets author a material-binding relationship (material:binding or
material:binding:physics) as an absolute path that falls outside the scope of the
reference or instanceable arc that composes it — for example a MuJoCo-converter payload
split, or Isaac Sim's own _instanceable.usd wrapper convention. When PhysX's
material-binding walk resolves that relationship during scene cooking, USD's composition
engine drops it and logs a refers to a path outside the scope of the reference ... Ignoring diagnostic, once per affected prim. For assets with many collision-geometry
parts this can be dozens to hundreds of lines per run, burying real warnings.

In every case audited so far, the dropped relationship duplicates a correctly-scoped
binding already established elsewhere on the same composed prim, so dropping it is a
functional no-op — reproduced and confirmed with a full RSL-RL training run for each
asset (training completes normally, physics behavior unaffected).

We looked at filtering the console output directly (an OS-level file-descriptor redirect,
and carb's ILogging.add_logger callback) — both failed to intercept these lines at all,
consistent with USD's default Tf diagnostic delegate writing straight to the terminal
device. We also tried removing the out-of-scope opinion from the loaded stage itself
before anything queries it, but the affected relationships in these assets often live on
prims that are themselves marked instanceable, so the opinion lives inside a shared USD
instance prototype; authoring onto a prototype through the Usd API is unsupported and
crashed in testing.

Instead, this sets the existing Kit setting /persistent/app/usd/muteUsdDiagnostics to
true during AppLauncher startup, muting USD diagnostics globally. This is a stopgap:
a newer ovstage release (0.2.0.377349, confirmed in local testing) already flips this
setting by default, muting this diagnostic class without any Isaac Lab change. Our
ovphysx extra is currently pinned to 0.5.11, which hard-requires the older
ovstage==0.1.1.355824, so we can't yet pick up the newer ovstage through the normal
dependency graph. Once an ovphysx release compatible with the newer ovstage ships,
this Isaac Lab workaround should be removed.

Fixes the warning spam reported against FrankaEmika/ShadowHandNewton/H2plus (NVBugs
6629400) and the [Isaac-Sim 6.0 rc59] AllegroHand ovphysx report.

Type of change

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

Testing

  • Reproduced both tracked reports against develop tip: Isaac-Reach-Franka-OSC (with a
    locally mirrored, intentionally-unfixed copy of the Franka asset — 71 occurrences of the
    diagnostic per 2-iteration RSL-RL training run) and Isaac-Reorient-Cube-Allegro-Direct
    (54 occurrences with the shipped asset, physics=isaacsim_physx).
  • With this change, both commands produce 0 occurrences of the diagnostic; training
    completes normally in both cases.
  • Verified with the real, unmodified remote Franka asset (no local override) that nothing
    else regresses.
  • source/isaaclab/test/app/test_app_launcher_argv.py: 17 passed.
  • uv run isaaclab -f.

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
  • I have added my name to the CONTRIBUTORS.md or my name already exists there

Several shipped assets (a MuJoCo-converter payload split, or Isaac Sim's
own "_instanceable.usd" wrapper convention) author a material-binding
relationship outside the scope of the reference or instanceable arc that
composes it. When PhysX resolves it during scene cooking, USD logs a
"refers to a path outside the scope of the reference ... Ignoring"
diagnostic per affected prim, which floods the console for assets with
many collision-geometry parts and buries real warnings. In every case
audited so far the dropped relationship duplicates a correctly-scoped
binding established elsewhere on the prim, so this is a functional no-op.

Fixes the warning spam reported against FrankaEmika/ShadowHandNewton/H2plus
(NVBugs 6629400) and the [Isaac-Sim 6.0 rc59] AllegroHand ovphysx report.
@matthewtrepte
matthewtrepte requested a review from a team September 8, 2026 21:45
@github-actions github-actions Bot added the isaac-lab Related to Isaac Lab team label Sep 8, 2026

@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 workaround suppresses the reported material-binding spam, but it unconditionally enables a global USD diagnostic mute for every AppLauncher workload and overrides any caller-provided false setting.

  • Design and architecture: The launcher settings block is a coherent location for a temporary compatibility workaround, but /persistent/app/usd/muteUsdDiagnostics suppresses all USD/Tf diagnostics rather than only the repetitive diagnostic described. This can hide unrelated asset and composition errors.
  • API: No public Python API changes are introduced. However, the externally configurable Kit setting is overwritten after SimulationApp startup, so callers cannot opt out through kit_args; the workaround should preserve an explicit caller value or be gated by a user-visible option.
  • Implementation: The setting write is mechanically straightforward and its temporary intent is documented, but the unconditional assignment is too broad. Apply the default only when the setting was not explicitly configured, or expose a targeted opt-out.

Minor fixes needed. Posted 1 actionable finding inline.

Automated review; human maintainers own approval decisions.

# warnings for assets with many collision-geometry parts (NVBugs 6629400 and the
# [Isaac-Sim 6.0 rc59] AllegroHand ovphysx report). A future ``ovstage`` release is
# expected to filter this diagnostic class by default; mute it globally until then.
settings.set_bool("/persistent/app/usd/muteUsdDiagnostics", True)

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.

🟡 Warning · Design Architecture — Unconditional global mute overrides user diagnostic settings

muteUsdDiagnostics is a global switch, not a filter for the quoted material-binding message, so all USD/Tf diagnostics (unresolved references, malformed prims) are silenced for every AppLauncher run. Because this write happens after SimulationApp startup, it also overwrites a value explicitly supplied via kit_args (--/persistent/app/usd/muteUsdDiagnostics=false), leaving no opt-out. Set it only when the setting was not explicitly configured, or gate the mute behind a user-visible option.

@greptile-apps

greptile-apps Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 4/5

The PR is not safe to merge until users can retain or restore USD diagnostic visibility.

Findings

  1. P1 Global mute overrides configuration

Summary

  • Applies the setting during AppLauncher extension initialization.
  • Documents the affected asset patterns and planned removal after a compatible ovstage update.
  • The unconditional global setting prevents users from opting back into USD diagnostics for troubleshooting.

# warnings for assets with many collision-geometry parts (NVBugs 6629400 and the
# [Isaac-Sim 6.0 rc59] AllegroHand ovphysx report). A future ``ovstage`` release is
# expected to filter this diagnostic class by default; mute it globally until then.
settings.set_bool("/persistent/app/usd/muteUsdDiagnostics", True)

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.

P1 Global mute overrides configuration

This unconditional write disables all USD diagnostics rather than filtering only the repetitive material-binding message. Because _load_extensions() runs after SimulationApp consumes Kit arguments and the experience file, it also replaces an explicit /persistent/app/usd/muteUsdDiagnostics=false value. Users therefore cannot enable actionable USD warnings and errors when diagnosing asset or composition failures. Please preserve an explicit user value or use a message-specific filter.

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

Labels

isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant