SimReady Feature: Physically Plausible Appearance Visualization#
Property |
Value |
|---|---|
Feature Name |
|
Runtime |
|
Proprietary Techs |
|
Latest Version |
|
SME PIC |
Divyansh Mishra (Isaac Sim + RTX validation workflow); Beau Perschall (PM); Avinash Devalla (sensor SME) |
State |
In development (post-preflight) |
Approvers
Date |
Name |
Notes |
|---|---|---|
TBD |
Ronnie Sharif US |
SRF engineering |
TBD |
Jason Batchkoff / Ignacio Llamas |
SimReady Core + RTX material-runtime alignment |
TBD |
Divyansh Mishra |
Primary validation workflow; canonical sample, runtime stack, pass/fail |
TBD |
Avinash Devalla |
Sensor SME, camera / material response |
TBD |
Jens Jebens AU |
USD PM |
TBD |
Aaron Luk US |
CC / strategic alignment |
1. Describe what this Feature will enable a user to simulate within a simulator#
A SimReady asset carrying an OpenPBR material (authored in MaterialX) loads into a simulator, renders, and produces plausible material response for camera / perception use without manual material repair. OpenPBR is an open, renderer-agnostic standard and is the SimReady physically-based surface target — it replaces the NVIDIA-specific MDL requirement (MDL is permitted during migration, as Omniverse’s current default). The universal UsdPreviewSurface baseline is a separate feature (FET_006_STANDARD), not part of this one.
Target Vertical |
Target Vertical User |
Target Vertical Simulator |
Use Case Description |
|
|---|---|---|---|---|
1 |
Robotics |
Robotics perception engineer |
Isaac Sim + RTX |
Load a CAD/Blender→SimReady asset, render, validate material response is plausible for camera/perception without manual repair. |
2 |
AIF |
Content-pipeline owner |
Mega / Replicator / SDG |
Standardized PBR + parameter ranges so datasets generated at scale stay plausible and randomizable. |
2. What is needed to test this Feature in runtime?#
Type |
Desc |
|
|---|---|---|
1 |
Platform |
Kit |
2 |
Backend |
RTX |
3 |
Application |
Isaac Sim (primary); USDView (context) |
Runtime Test Desc |
||
1 |
White-box render diff: place the asset in a white-box scene and render; then unapply / alter the OpenPBR material and render again. |
An image diff proves the material resolves, binds, and affects the render. |
2 |
Pass: the OpenPBR surface resolves and binds, and the render changes when it is altered/removed. Fail: binding does not resolve / is ignored, or the asset renders in a single renderer only. Aspirational (not a hard 0.1 gate): common classes (metal, plastic, glass, rubber, painted) show the expected light response. Translucent / glass response may not be testable today — flag if it blocks. |
3. Why is this being defined as a Feature and not as a Capability?#
Justification |
|
|---|---|
1 |
The camera-observed outcome — physically plausible material appearance — materially changes sensor / render output, so it is a Feature. |
2 |
The material authoring, binding and parameter rules live in the |
4. Is there a connection with any of the existing or new Features?#
No feature dependencies — confirmed in the 2026-07-27 pre-flight (this feature does not depend on Object Color Visualization or any other feature).
Related but separate (not dependencies): FET_006_STANDARD, the universal preview-surface baseline and its own feature, and FET_006_MDL. An asset may carry all three surfaces at once, and USD selects between them natively, through two separate calls. The render context picks the surface terminal within a material — UsdShadeMaterial::ComputeSurfaceSource(renderContext), where mtlx selects the OpenPBR shader. The binding purpose picks the material bound to a prim — UsdShadeMaterialBindingAPI::ComputeBoundMaterial(materialPurpose). The two are not interchangeable: USD does not validate the purpose argument, so passing a render context such as "mtlx" to ComputeBoundMaterial raises no error, falls back to the allPurpose binding, and leaves the caller reading the default surface — UsdPreviewSurface on an asset that carries all three. Context only (not dependencies): Visual Lighting (FET008) and Visual Sensor (FET009) are the other half of the observed scenario and ship as their own feature cards next round.
5. Which Feature-Profiles likely would incorporate this Feature?#
Feature Profile Name |
Why? |
|
|---|---|---|
1 |
|
OpenPBR is the physically-based final surface for this profile. Optional. |
2 |
|
OpenPBR is the physically-based final surface for this profile. Optional. |
3 |
|
OpenPBR is the physically-based final surface for this profile. Optional. |
Per TAC Session 2 those three are the profiles carried forward, so prop-robotics-neutral, prop-robotics-physx and robot-body-neutral are not extended to carry the FET_006_* visual-material features. The version blocks above are authored by the OpenPBR appearance specification change rather than by this card.
6. For asset validation, which Capabilities would this Feature likely depend on?#
Capability Name |
Why? What kind of rules would it need for validation? |
|
|---|---|---|
1 |
|
Extends the materials capability with the OpenPBR rules — surface, parameter ranges, MaterialX structure, and material-binding resolution. Full text in Appendix A. |
Simplified#
simulator |
Use case/story |
Capability |
Feature |
Profile |
SR approve |
|---|---|---|---|---|---|
Isaac Sim + RTX |
Plausible material response for camera and perception, without manual material repair |
|
|
|
(Jira status) |
Open questions#
Gap |
Notes |
|
|---|---|---|
1 |
Profile selection |
TAC Session 2 settled the initial set — |
Appendix A: Requirements#
Capability visualization/materials (extend). The requirement set is authored by the OpenPBR appearance specification change, and the Status column below reads relative to it.
ID |
Requirement |
Status |
|---|---|---|
|
OpenPBR final surface. Phased-permissive: OpenPBR (MaterialX) is the standard, OmniPBR (MDL) is permitted during migration. |
New |
|
OpenPBR parameter ranges: unit floats in |
New |
|
MaterialX graph structure: |
New |
|
Material binding scope. |
Defined by |
|
Every renderable Gprim resolves a material through a direct or inherited binding. The material is resolved for the |
In repo, extended |
|
Every authored shader input is declared by the shader’s own definition, with the declared type. |
In repo |
|
Texture size ceiling. |
In repo |
|
OpenPBR texture colour space: the |
New |
Two earlier proposals on this card were dropped once checked against the repo. “Computable material assignment” and “direct bindings only” are both part of VM.MAT.001, so neither needed a new id. A separate VM.BIND.003 covering the collection-binding exclusion was folded into VM.MAT.001 and removed, which is the clause marked (new) in the table above. com.nvidia.usd.VM.PS.001 is not listed here because the preview surface is a separate feature (FET_006_STANDARD); it too moved upstream to usd-validation-nvidia.
Texture colour space is one requirement per surface, because each declares it somewhere different with a different default. VM.TEX.004 is the OpenPBR one and belongs to this feature: it reads the colorSpace on an image node’s inputs:file, where nothing declared means no transform at all. VM.TEX.003 covers UsdPreviewSurface and VM.TEX.005 covers MDL, so neither is part of this feature. VM.TEX.002 is the MDL rule frozen at what FET_006_MDL 0.1.0 shipped and stays listed only by that version.
VM.PBR.001, VM.PBR.002 and VM.PBR.003 are implemented in this repo, as the check_vm_pbr_001_openpbr_surface, check_vm_pbr_002_openpbr_parameter_ranges and check_vm_pbr_003_materialx_graph_structure methods on VisualMaterialsCapabilityChecker in visualization/materials/validation.py. usd-validation-nvidia supplies only the BaseRuleChecker base class and the register_requirements decorator that checker builds on.