Non-Visual Materials#

Non-visual material labels let lidar, radar, and acoustic sensors map USD materials to sensor-return behavior. The visual material can remain ordinary; sensor semantics come from custom attributes on the bound Material prim.

Author Labels#

    def Xform "Materials"
    {
        def Material "Asphalt"
        {
            token omni:simready:nonvisual:base = "asphalt"
            token omni:simready:nonvisual:coating = "none"
            token[] omni:simready:nonvisual:attributes = ["none"]
            custom string inputs:nonvisual:base = "asphalt"
            custom string inputs:nonvisual:coating = "none"
            custom string inputs:nonvisual:attributes = "none"
            token outputs:mdl:surface.connect = </World/Materials/Asphalt/Shader.outputs:out>
            def Shader "Shader"
            {
                uniform token info:implementationSource = "sourceAsset"
                uniform asset info:mdl:sourceAsset = @OmniPBR.mdl@
                uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR"
                color3f inputs:diffuse_color_constant = (0.04, 0.04, 0.04)
                float inputs:metallic_constant = 0
                float inputs:reflection_roughness_constant = 0.9
                token outputs:out
            }
        }

        def Material "Steel"
        {
            token omni:simready:nonvisual:base = "steel"
            token omni:simready:nonvisual:coating = "none"
            token[] omni:simready:nonvisual:attributes = ["none"]
            custom string inputs:nonvisual:base = "steel"
            custom string inputs:nonvisual:coating = "none"
            custom string inputs:nonvisual:attributes = "none"
            token outputs:mdl:surface.connect = </World/Materials/Steel/Shader.outputs:out>
            def Shader "Shader"
            {
                uniform token info:implementationSource = "sourceAsset"
                uniform asset info:mdl:sourceAsset = @OmniPBR.mdl@
                uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR"
                color3f inputs:diffuse_color_constant = (0.55, 0.55, 0.60)
                float inputs:metallic_constant = 1
                float inputs:reflection_roughness_constant = 0.25
                token outputs:out
            }
        }

        def Material "Concrete"
        {
            token omni:simready:nonvisual:base = "concrete"
            token omni:simready:nonvisual:coating = "none"
            token[] omni:simready:nonvisual:attributes = ["none"]
            custom string inputs:nonvisual:base = "concrete"
            custom string inputs:nonvisual:coating = "none"
            custom string inputs:nonvisual:attributes = "none"
            token outputs:mdl:surface.connect = </World/Materials/Concrete/Shader.outputs:out>
            def Shader "Shader"
            {
                uniform token info:implementationSource = "sourceAsset"
                uniform asset info:mdl:sourceAsset = @OmniPBR.mdl@
                uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR"
                color3f inputs:diffuse_color_constant = (0.45, 0.43, 0.39)
                float inputs:metallic_constant = 0
                float inputs:reflection_roughness_constant = 0.8
                token outputs:out
            }
        }
    }
    def Xform "Materials"
    {
        def Material "Asphalt"
        {
            token omni:simready:nonvisual:base = "asphalt"
            token omni:simready:nonvisual:coating = "none"
            token[] omni:simready:nonvisual:attributes = ["none"]
            custom string inputs:nonvisual:base = "asphalt"
            custom string inputs:nonvisual:coating = "none"
            custom string inputs:nonvisual:attributes = "none"
            token outputs:mdl:surface.connect = </World/Materials/Asphalt/Shader.outputs:out>
            def Shader "Shader"
            {
                uniform token info:implementationSource = "sourceAsset"
                uniform asset info:mdl:sourceAsset = @OmniPBR.mdl@
                uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR"
                color3f inputs:diffuse_color_constant = (0.04, 0.04, 0.04)
                float inputs:metallic_constant = 0
                float inputs:reflection_roughness_constant = 0.9
                token outputs:out
            }
        }

        def Material "Steel"
        {
            token omni:simready:nonvisual:base = "steel"
            token omni:simready:nonvisual:coating = "none"
            token[] omni:simready:nonvisual:attributes = ["none"]
            custom string inputs:nonvisual:base = "steel"
            custom string inputs:nonvisual:coating = "none"
            custom string inputs:nonvisual:attributes = "none"
            token outputs:mdl:surface.connect = </World/Materials/Steel/Shader.outputs:out>
            def Shader "Shader"
            {
                uniform token info:implementationSource = "sourceAsset"
                uniform asset info:mdl:sourceAsset = @OmniPBR.mdl@
                uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR"
                color3f inputs:diffuse_color_constant = (0.55, 0.55, 0.60)
                float inputs:metallic_constant = 1
                float inputs:reflection_roughness_constant = 0.25
                token outputs:out
            }
        }

        def Material "Concrete"
        {
            token omni:simready:nonvisual:base = "concrete"
            token omni:simready:nonvisual:coating = "none"
            token[] omni:simready:nonvisual:attributes = ["none"]
            custom string inputs:nonvisual:base = "concrete"
            custom string inputs:nonvisual:coating = "none"
            custom string inputs:nonvisual:attributes = "none"
            token outputs:mdl:surface.connect = </World/Materials/Concrete/Shader.outputs:out>
            def Shader "Shader"
            {
                uniform token info:implementationSource = "sourceAsset"
                uniform asset info:mdl:sourceAsset = @OmniPBR.mdl@
                uniform token info:mdl:sourceAsset:subIdentifier = "OmniPBR"
                color3f inputs:diffuse_color_constant = (0.45, 0.43, 0.39)
                float inputs:metallic_constant = 0
                float inputs:reflection_roughness_constant = 0.8
                token outputs:out
            }
        }
    }

The default runtime prefix is omni:simready:nonvisual. The alternate supported prefix is inputs:nonvisual, selected by /rtx/materialDb/nonVisualMaterialSemantics/prefix. Public examples may author both prefixes so scenes work with either runtime setting.

Labels belong on the Material prim that geometry binds through material:binding. Use Material Binding when the geometry still needs to be bound to the material.

Base Materials#

Use exact base-material strings. Common values include:

Category

Values

Default

none

Metals

aluminum, steel, oxidized_steel, iron, oxidized_iron, silver, brass, bronze, oxidized_Bronze_Patina, tin

Polymers

plastic, fiberglass, carbon_fiber, vinyl, plexiglass, pvc, nylon, polyester

Glass

clear_glass, frosted_glass, one_way_mirror, mirror, ceramic_glass

Other

asphalt, concrete, leaf_grass, dead_leaf_grass, rubber, wood, bark, cardboard, paper, fabric, skin, fur_hair, leather, marble, brick, stone, gravel, dirt, mud, water, salt_water, snow, ice, calibration_lambertian

none and calibration_lambertian map to default-material behavior. Other base materials default to composite-material behavior.

Coatings and Attributes#

Kind

Values

Coating

none, paint, clearcoat, paint_clearcoat

Attribute flags

none, emissive, retroreflective, single_sided, visually_transparent

Attributes are encoded as a bit field, so multiple attributes can be combined when the USD representation supports a list.

Troubleshooting#

  • If every object behaves like the same material, check that the runtime prefix matches the authored prefix.

  • Preserve coating and attribute flags unless base-material-only behavior is intentional.

  • MaterialId lidar channels can be used to debug which material id was assigned to a hit.

  • Semantic labels for segmentation are separate from non-visual material labels. See Semantic Labels for semantic class labels.