Mute repetitive USD out-of-scope material-binding diagnostic - #7654
Mute repetitive USD out-of-scope material-binding diagnostic#7654matthewtrepte wants to merge 1 commit into
Conversation
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.
There was a problem hiding this comment.
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/muteUsdDiagnosticssuppresses 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) |
There was a problem hiding this comment.
🟡 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.
The PR is not safe to merge until users can retain or restore USD diagnostic visibility. Findings
|
| # 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) |
There was a problem hiding this comment.
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.
Description
Several shipped assets author a material-binding relationship (
material:bindingormaterial:binding:physics) as an absolute path that falls outside the scope of thereference or instanceable arc that composes it — for example a MuJoCo-converter payload
split, or Isaac Sim's own
_instanceable.usdwrapper convention. When PhysX'smaterial-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 ... Ignoringdiagnostic, once per affected prim. For assets with many collision-geometryparts 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_loggercallback) — both failed to intercept these lines at all,consistent with USD's default
Tfdiagnostic delegate writing straight to the terminaldevice. 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 USDinstance prototype; authoring onto a prototype through the
UsdAPI is unsupported andcrashed in testing.
Instead, this sets the existing Kit setting
/persistent/app/usd/muteUsdDiagnosticstotrueduringAppLauncherstartup, muting USD diagnostics globally. This is a stopgap:a newer
ovstagerelease (0.2.0.377349, confirmed in local testing) already flips thissetting by default, muting this diagnostic class without any Isaac Lab change. Our
ovphysxextra is currently pinned to0.5.11, which hard-requires the olderovstage==0.1.1.355824, so we can't yet pick up the newerovstagethrough the normaldependency graph. Once an
ovphysxrelease compatible with the newerovstageships,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
Testing
developtip:Isaac-Reach-Franka-OSC(with alocally 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).completes normally in both cases.
else regresses.
source/isaaclab/test/app/test_app_launcher_argv.py: 17 passed.uv run isaaclab -f.Checklist
pre-commitchecks with./isaaclab.sh --formatsource/<pkg>/changelog.d/for every touched packageCONTRIBUTORS.mdor my name already exists there