Runtime Physics Isolation Matrix#
Status: enforced. This document is the policy guide for the runtime physics isolation rules
RV.010(variant-section purity) andRV.011(composed-stage isolation), implemented inruntime_variants/validation.pyand required by theFET_000_PHYSX,FET_000_NEWTON, andFET_000_MUJOCOfeatures. The allow / require / forbid table below is the authoritative policy those checkers apply.
Purpose#
When a single physics runtime variant is selected on a SimReady asset, the
composed stage must contain only the schemas and attributes that the
selected runtime can consume, plus the runtime-neutral base. Anything else is a
leak that can silently break the runtime (for example a stray
physics:approximation = "sdf" under Newton, or a value other than
convexHull under MuJoCo).
The variant scaffolding rules (RV.001–RV.009) only check the variant set,
payload location, and metadata; they never inspect what the composed stage
actually carries. This matrix is the missing policy: the authoritative
allow / require / forbid table, per runtime, at the composed-stage level.
Scope and model#
Evaluated on the composed stage, per selection. For each declared physics variant
V, compose withV = Enabledand every other physics variant set= Disabled. The target runtime isV. Classify every authored physics-domain schema/attribute on the composed prims.Neutral / all-Disabled is treated as its own target (“Standard”): no runtime is selected, so only runtime-neutral data may be present.
Composition strength (LIVRPS) matters: a value can leak from the neutral base, from another variant set left
Disabled, or from a payload. This check does not care where the opinion came from, only what the composed result is.
Classification legend#
Symbol |
Meaning |
|---|---|
REQ |
Required for a conforming asset of this runtime (where applicable to the prim). |
OK |
Allowed to be present. |
N/A |
Not consumed by this runtime; expected absent. Presence is a warning (leak), not necessarily fatal. |
FORBID |
Must not be present under this selection; presence is a failure (pollution / conflict). |
Namespace legend#
Group |
Identifies by |
Examples |
|---|---|---|
Neutral (OpenUSD) |
|
|
PhysX |
schema prefix |
|
Newton |
schema prefix |
|
MuJoCo |
schema prefix |
|
Master matrix#
Rows are namespace groups; columns are the target runtime of the composed stage.
Namespace group |
Standard (neutral) |
PhysX |
Newton |
MuJoCo |
|---|---|---|---|---|
Neutral |
REQ/OK |
OK |
OK |
OK |
PhysX schemas / |
FORBID |
REQ/OK |
FORBID |
FORBID |
Newton collision ( |
FORBID |
FORBID |
REQ/OK |
OK (inherited by |
Newton mesh/SDF ( |
FORBID |
FORBID |
REQ/OK (exactly one per mesh) |
FORBID (not inherited by |
Newton scene / articulation ( |
FORBID |
FORBID |
OK |
FORBID |
MuJoCo collision ( |
FORBID |
FORBID |
FORBID (strict; see Resolved Decision 1) |
REQ/OK |
MuJoCo scene ( |
FORBID |
FORBID |
FORBID |
OK |
|
FORBID |
FORBID |
FORBID |
FORBID ( |
|
FORBID |
FORBID |
FORBID ( |
FORBID |
Notes:
“REQ” applies only where the prim role makes it required (e.g. a mesh collider or the articulation root). A prop with no articulation does not require articulation-root schemas. A
UsdPhysics.Sceneis a scenario-level concern and is not required for a single asset, so its runtime scene APIs areOK(allowed) rather than required.Neutral data is always OK because every runtime layers on top of it.
Value-level attribute rules#
Some attributes are neutral by name but runtime-sensitive by value. These need value checks, not just presence checks.
physics:approximation#
Target |
Rule |
|---|---|
Standard (neutral) |
Unauthored, or a neutral OpenUSD token ( |
PhysX |
Any valid PhysX approximation token. When |
Newton |
Not consumed by Newton. Newton selects its representation from |
MuJoCo |
Must equal |
This attribute is the canonical example of why the neutral base must not carry
runtime-interpreted attributes: promoting a single physics:approximation to
the base forces every runnable to override it to a runtime-valid value, and
Newton would have to override an attribute it does not even consume. Preferred
design: leave physics:approximation off the neutral base and author it only in
the runnables that consume it (PhysX sdf, MuJoCo convexHull; Newton none).
Documented sharing / inheritance (why some cross-runtime cells are OK)#
MjcCollisionAPIprependsNewtonCollisionAPIin the official MuJoCo USD schema (seephysics_bodies/physics_rigid_bodies/requirements/mujoco-collider-api.md). MuJoCo collision is-a Newton collision, so under MuJoCo the inheritedNewtonCollisionAPIand itsnewton:contact*attributes are legitimately present. This inheritance is one-directional (Mjc → Newton); it does not by itself justify a Newton layer carrying MuJoCo collision data.NewtonSDFCollisionAPIandNewtonMeshCollisionAPIinheritNewtonCollisionAPI(seenewton-collider-api.md). ListingNewtonCollisionAPIalongside the SDF variant is redundant, and a single mesh must not carry both mesh and SDF representations.
Negative rules already in force (encode as-is)#
MUJOCO.BA.001: no prim may applyMjcArticulationRootAPIor use theMjcArticulationRoottype; MuJoCo articulation roots stay onUsdPhysics.ArticulationRootAPI.NEWTON.DJ.002:NewtonJointAPImust not be applied; Newton has no such schema.
Resolved Decisions#
Strict Newton isolation. A Newton runtime layer uses only
Newton*collision schemas andnewton:*attributes.Mjc*schemas andmjc:*attributes under a Newton selection are FORBID. The one-directional inheritance (Mjc → Newton) does not license a Newton layer to carry the more-specific MuJoCo schema. Applied:obs_orange_a02/runnables/physics/newton.usdawas updated to dropMjcCollisionAPIandmjc:group, leaving["NewtonCollisionAPI", "PhysicsMeshCollisionAPI", "NewtonMeshCollisionAPI"]newton:contactGap.
Severity: warn on inert leaks, fail on conflicts and foreign schemas.
Warning (
N/A): a not-consumed but harmless attribute, e.g. a neutralphysics:approximationtoken appearing under Newton.Failure (
FORBID): any foreign-runtime schema/attribute for the selected runtime, and any value conflict (e.g.physics:approximation="sdf"under Newton, or any non-convexHullvalue under MuJoCo).
Neutral base is strictly runtime-agnostic. The neutral base (all variants
Disabled) may carry only neutralUsdPhysics/physics:*data and geometry.Physx*,Newton*, andMjc*schemas/attributes on the base are FORBID.
Mapping to the validators#
This matrix is the data table behind two implemented rules in
runtime_variants/validation.py:
Structural (
RV.010, cheap, static): each physics variant’sEnabledoption contains only theprepend payloadarc and no inline prim overrides; theDisabledoption is empty. (Prevents the variant-opinion leak class fixed inobs_orange_a02.) Implemented byRuntimeVariantSectionPurityChecker.Semantic (
RV.011, composed-per-variant): for each declared physics variant (and the neutral base), compose that selection and evaluate authored physics schemas/attributes against the matrix above, including thephysics:approximationvalue rules. Reports foreign-schema pollution and value conflicts against the selected runtime. Implemented byRuntimePhysicsIsolationChecker.