Payload

Payloads are lazily loaded references. When a prim uses a payload, USD can be told to opt out of loading these layers unless the user requests to do so.

When a referenced layer is heavy due to the amount of data or hierarchy complexity, it is often beneficial to have the user manually load those in after opening the layer in a stage. Generally speaking, non-important layers should be behind payloads. If they’re not loaded, they also cannot be traversed and should not contain anything considered “important”.
The definition of “important” depends entirely on the use case of course.

Example → Putting a high res model behind a payload

With unloaded payloads, the resulting hierarchy looks like this

Unloaded Payload

unloaded

However, the payload can be toggled on/off after the stage has been loaded.

Payload Toggle On/Off

loaded

As a result, the full hierarchy is loaded

Loaded Payload

unloaded

simple_payload_example.usd

#usda 1.0
(
    defaultPrim = "Asset"
)
 
def Scope "Asset"
{
    def Xform "Geometry"
    (
        prepend payload=@./highres_model.usd@
    )
    {
    }
}