Extension: omni.kit.property.material-1.15.1

Documentation Generated: Oct 07, 2026

Overview#

This extension provides editing material properties in Omniverse Kit. It has custom UI for editing material properties, with capabilities to handle materials defined in MDL (Material Definition Language).

User Guide#

Material Purposes in the Material Binding Widget#

USD lets a prim (or collection) bind a different material for each material purpose. There are three purposes:

  • All Purpose — the default, unnamed purpose (UsdShade.Tokens.allPurpose, the empty token). Used when a renderer does not ask for a more specific purpose.

  • Preview (preview) — the material a lightweight/preview renderer should use.

  • Full (full) — the material a full-fidelity renderer should use.

The names in bold are how the purposes are labelled in the UI; the value in brackets is the USD token the binding is authored with.

The “Materials on selected models” section of the Property window (the material binding widget) lets you view and edit these bindings. Historically it only showed All Purpose bindings, so assets that bind materials to the Preview/Full purposes appeared to have no material assigned. The widget now surfaces every purpose through a Material Purpose dropdown.

The demonstration scene#

The screenshots below use the extension’s test scene, data/tests/usd/material_purpose.usda. Its prims are named after the material purposes they are bound for, so a selection’s behaviour is predictable. The postfix of each cube encodes which purposes have a binding:

Postfix letter

Material purpose

Bound material

A

All Purpose

/World/Looks/allPurpose

P

Preview

/World/Looks/preview

F

Full

/World/Looks/full

A cube’s postfix is the concatenation of the letters for every purpose it binds. There are two cubes (_01, _02) of each kind so multi-selection can be demonstrated:

Prim

Bound purposes

Cube_A_01, Cube_A_02

All Purpose only

Cube_P_01, Cube_P_02

Preview only

Cube_F_01, Cube_F_02

Full only

Cube_PF_01, Cube_PF_02

Preview + Full

Cube_PA_01, Cube_PA_02

All Purpose + Preview

Cube_AF_01, Cube_AF_02

All Purpose + Full

Cube_PFA_01, Cube_PFA_02

All Purpose + Preview + Full

/World also carries a collection for every purpose combination, using the same postfix convention, to demonstrate collection-based bindings. Each collection contains two cones (Cone_<postfix>_01, Cone_<postfix>_02):

Collection

Bound purposes

World.collection:cones_A

All Purpose only

World.collection:cones_P

Preview only

World.collection:cones_F

Full only

World.collection:cones_AP

All Purpose + Preview

World.collection:cones_AF

All Purpose + Full

World.collection:cones_PF

Preview + Full

World.collection:cones_APF

All Purpose + Preview + Full

The materials live under /World/Looks: allPurpose, preview, full (plus the spare allPurpose2, preview2, full2 used to demonstrate re-binding).

When the purpose dropdown appears#

If the selection only has All Purpose bindings (or nothing bound), the widget looks exactly as before — no dropdown is added. Selecting Cube_A_01:

All Purpose only — no purpose dropdown

As soon as the selection has a binding for a specific purpose (Preview and/or Full), a Material Purpose dropdown appears above the material row. It always lists All Purpose first (its default), followed by the specific purposes present on the selection. Every new selection starts with All Purpose in focus. Selecting Cube_PFA_01:

Purpose dropdown, All Purpose in focus

Opening the dropdown shows only the purposes that the selection actually uses:

Purpose dropdown expanded

The purpose you pick becomes the purpose in focus: the material row is filtered to the binding of that purpose. Choosing Preview for Cube_PFA_01 shows its preview material:

Preview purpose in focus

The purpose in focus is also what edits target: binding a material through the material combo box (or drag-and-drop) writes the binding for the purpose in focus only, leaving the other purposes untouched. The thumbnail’s Copy / Paste context menu follows the same rule — it copies the binding of the purpose in focus and pastes it back for that purpose. “All Purpose” is always offered even when the selection has no All Purpose binding yet, so you can add one.

Only purposes the selection is already bound for are offered. There is no way to add a first Preview or Full binding from this widget: the dropdown lists a specific purpose once something has authored a binding for it, and All Purpose is the only purpose you can always bind.

Selecting multiple prims#

Behaviour change — one summary row replaces the per-material rows. A selection whose prims use several different materials used to render one row per material, each with its own thumbnail, Copy/Paste menu, Select Material button, strength control and drag-and-drop target. It now renders a single summary row standing for the whole selection. This applies to every purpose, All Purpose included — it is not limited to the new Preview/Full paths.

What moved, rather than disappeared: Select Material now selects every material the summary represents; binding a material (from the combo box or by drag-and-drop) applies to every represented prim, including prims that inherit their binding; Copy/Paste and the binding strength act on the selection as a whole. The individual material names are no longer separate rows — they are listed in the summary row’s material field tooltip.

With several prims selected, the material row summarizes them for the purpose in focus:

  • A prim that has no binding for the purpose in focus is shown as None.

  • If the represented prims share one material (or all show None), the row shows that value.

  • If they differ, the material combo box shows Mixed, and a single summary widget represents the whole selection. Its material field tooltip lists the distinct material values (one per line, at most 10, then ...).

  • Whenever the widget represents more than one prim, the prim field shows Mixed and its tooltip lists the prim paths (one per line, at most 10, then ...).

Selecting Cube_PF_01 and Cube_PA_01 with All Purpose in focus: only Cube_PA_01 has an All Purpose binding, so the material is Mixed (/World/Looks/allPurpose and None). Hovering the fields reveals the prim and material lists:

Multi-selection, All Purpose, mixed materials with tooltip

Selecting Cube_PF_01 and Cube_PF_02 (identical bindings) with Preview in focus: both share /World/Looks/preview, so the material row shows it while the prim field is Mixed; its tooltip lists both prims:

Multi-selection, Preview, shared material with prim tooltip

Collections and inheritance#

The purpose dropdown works the same way for collection-based bindings. Selecting the World.collection:cones_APF collection (bound for All Purpose + Preview + Full) shows the dropdown; picking Preview shows the collection’s preview material, and the prim row reads the collection path (labelled Collection).

A collection bound only for specific purposes shows the dropdown too — World.collection:cones_PF offers All Purpose, Preview and Full, and its default All Purpose view reads None because that collection has no All Purpose binding. A collection with no binding for the purpose in focus (e.g. World.collection:cones_A, which only has an All Purpose binding) is shown as None, exactly like a prim.

Selecting a collection member. The purposes offered for a prim come from USD’s binding resolution, not only from the bindings authored on the prim itself. Selecting Cone_P_01 — a member of cones_P, with no binding of its own — therefore offers All Purpose and Preview: the default All Purpose view reads None, and switching to Preview shows the material bound through the collection (marked (inherited), since the binding is authored on /World).

Collection member inheriting the collection's purpose

Inheritance: the same applies to a prim that inherits a binding from an ancestor — the ancestor’s purposes are offered and its material is shown rather than None.

Because a shown material may come from a collection or an ancestor, binding a new material through the widget authors a direct binding for the purpose in focus on the selected prim, which overrides the inherited/collection binding for that prim.