simready-foundation: SimReady Foundation: NVIDIA’s Compiler for Physical Reality

How a USD-based standard turns 3D assets into simulation-ready contracts, catches physics bugs before runtime, and tries to end the chaos of incompatible units, joints, and runtimes.

8 min read • View on GitHub • More from NVIDIA

A wide editorial scene shows a cluttered drafting desk on one side and a clean simulation stage on the other. The cluttered side is full of broken robot parts, mismatched unit marks, and tangled asset papers, while the clean side is stamped with a contract seal and aligned axes, explaining how SimReady turns messy models into enforceable simulation assets.
SimReady frames simulation readiness as a contract, not a visual check.
Key Takeaways

The compiler metaphor is not hype

Most 3D pipelines still ask a simple question: does it look right? SimReady asks a harsher one: will this asset survive physics, robotics, and sensor simulation without breaking the stack? That is why the repo feels less like a toolkit and more like a compiler for physical reality.

The shift matters because simulation bugs are expensive in a way visual bugs are not. A bad texture is annoying. A bad root prim, a wrong unit scale, or a non-tree articulation can poison an entire training run or make a robot model collapse the moment a solver touches it.

Simulation-ready, or “SimReady,” refers to a standard and ecosystem for physically accurate 3D assets and digital twins that incorporate real-world properties, behaviors, and data bindings (e.g., physics).

NVIDIA, Company · What Is SimReady?

Why simulation assets need a contract

The repo is built around failure modes that 3D interchange formats usually leave to humans. Units disagree. Axes disagree. Joint graphs stop being trees. Physics metadata is missing or inconsistent. Each of those problems can be tolerated in a modeling tool and then explode later in a simulator.

SimReady turns readiness into a staged pipeline, not a single pass or fail gate.

{
  "capabilities": ["geometry", "physics-rigid-bodies", "units"],
  "requirements": ["UN.002", "DJ.011"],
  "tags": ["essential", "performance", "high-quality"]
}

That structure matters because it lets the standard express levels of compliance instead of one blunt verdict. A model can be acceptable for one use case and still fail a stricter tier. In other words, SimReady is trying to turn simulation readiness into something measurable, not subjective.

Inside the spec layer

The source of truth lives in JSON configs under nv_core/sr_specs/config/. Those files define requirements and capabilities outside the validator code, which means policy is data, not hard-coded behavior. That is a quietly powerful choice because it lets the standard evolve without rewriting the whole engine.

The tags are especially revealing. They let NVIDIA distinguish essential rules from performance-oriented or high-quality ones. That gives the standard a kind of grading system, which is exactly what a simulation ecosystem needs if it wants assets to move across tools without collapsing into one lowest-common-denominator format.

A useful way to think about the layers

LayerWhat it definesWhy it matters
CapabilitiesWhat kind of asset behavior is being governedKeeps rules grouped by domain instead of scattered across code
RequirementsAtomic checks such as units or articulation constraintsMakes compliance machine-readable
TagsTiering such as essential, performance, or high-qualityLets the same asset be judged at different strictness levels
Validation codeHow the checks are executedSeparates enforcement from policy

The validator does more than say pass or fail

The validation engine is where the contract becomes real. The repository uses a decorator-based registration pattern, so checks can be attached as named rules rather than buried inside one monolithic function. That design keeps the validator extensible, which matters when the spec itself is expected to grow.

One example stands out: the root-prim check. The code walks the stage and verifies that the hierarchy has exactly one root prim. That sounds almost trivial until you remember what it protects against. For robotics and articulation, a scattered hierarchy is not just messy. It is mathematically awkward or outright invalid.

A close-up cross-section shows a USD asset passing through a mechanical gate. On the left, the asset is tangled with wrong unit labels, disconnected joint loops, and loose metadata tags. On the right, it emerges with physics schemas attached, joints aligned into a tree, and runtime-specific rules locked into place, explaining how SimReady both validates and transforms assets.
The surprise in SimReady is that it can reshape assets, not just reject them.

The repo also leans on a registration pattern that makes validation logic feel modular rather than centralized. That is the right shape for a standards project. You want rules that can be added, versioned, and tiered without turning the whole system into a brittle script.

@omni.asset_validator.core.registerRule("Hierarchy")
class HierarchyHasRootChecker:
    def validate(self, stage):
        # ensure exactly one root prim exists
        ...

The transformation layer is the real surprise

This is where SimReady stops looking like a linter and starts looking like a compiler. Under nv_core/cip_specs/asset_handler_modules/, the repo contains transformation logic that can move an asset from a neutral state toward a runtime-specific one. That means the system does not only police assets. It can prepare them.

That distinction is huge. A validator says no. A transformer says, not yet, then rewrites the input until it meets the target contract. For simulation pipelines, that is the difference between a gatekeeper and an operator.

In practical terms, this is how a generic USD asset can become something Isaac Sim can actually use. The pipeline injects schemas, applies rules, and normalizes assumptions so the asset arrives with the right physics and runtime semantics attached.

SimReady is not in the same category as glTF or MuJoCo

The cleanest way to position the project is by category. glTF and FBX are asset interchange formats. MuJoCo and Bullet are simulation engines or physics frameworks. SimReady sits above both of those layers as a contract system for physically faithful assets.

ProjectCategoryPrimary jobWhere SimReady differs
glTFInterchange formatMoves assets between toolsDoes not define simulation contracts
FBXInterchange formatCarries 3D content across applicationsFocuses on exchange, not physics validity
MuJoCoSimulation engineRuns physics and controlConsumes assets, but does not standardize them
BulletPhysics frameworkSimulates dynamics and collisionsIs a runtime, not an asset standard
SimReadyContract layerDefines and validates simulation-ready assetsStandardizes the rules before execution

That is the dividing line. SimReady is not trying to replace the renderer, the simulator, or the file format. It is trying to define the conditions under which a model is safe to hand off to them.

What this standard is really trying to become

The big ambition is bigger than one repo. SimReady is trying to become a common language for digital twins, robotics training, and physically grounded AI workflows. If it works, the value is not just cleaner assets. It is fewer hidden assumptions between tools, teams, and runtimes.

That makes the project feel foundational rather than finished. It is an early standard, not a turnkey product. But that is also why it matters: standards become important when they start defining what everyone else has to agree on.