Scene Management With The Scene Explorer

We introduced the Scene Explorer tab as part of our growing support for USD, making navigating and exploring scenes easier. The scene explorer contains panels for two scene graphs:

  • USD Scene Graph-  Inspect and manipulate the properties and attributes of prims in the stage hierarchy.

  • Katana Scene Graph - The Katana Scene Graph for non-USD items.

Note:  The Katana Scenegraph is explained in Using the Scene Graph.

The workflow for the Scene Explorer will be familiar if you’ve used the Katana Scene Graph. Both the USD Scene Graph and the Katana Scene Graph panels in the Scene Explorer share working set columns for essential operations, including visibility in the viewer and renderer. However, the USD Scene Graph adds two USD-specific working set columns so that you can have more control over payloads and prim activation.

As you can see in the image below, the Scene Explorer tab includes the USD Scene Graph and the Katana Scene Graph in the bottom section.

The Scene Explorer. The top section is the USD Scene Graph, and the bottom is the Katana Scene Graph.

Each scene graph is identified by the USD or Katana logo in the top-left corner of the panel next to the Name column.

Note:  To hide the Katana Scene Graph in this panel, either drag the top of the panel bar either to the top or bottom or by toggling either the USD or Katana logo located at the top of the panel.

Viewing Scene Graphs

Use the two selection buttons at the top of the Scene Explorer tab to display the USD Scene Graph or/and the Katana Scene Graph.

If a panel is hidden, its icon is greyed-out.

USD Scene Graph Columns

Data Columns

The USD Scene Graph part of the Scene Explorer tab has four columns of key information for each item:

  • Name - The name of the prim.

  • Type -  The data category of an element.

  • Kind - The organizational role of an element in the hierarchy. It is categorized as values such as component for leaf level items or assembly for a collection of components.
    See Kind in Pixar’s USD Glossary.

  • Purpose - The category for visibility of components or primitives. For example, a default purpose generally means that it is a primary element of the scene, and is involved in various processes, such as rendering, simulation, and interaction within the viewport. A proxy purpose would indicate its use in viewports but not in renders, whereas a render purpose indicates use in renders but not viewports.
    See  Purpose in Pixar’s USD Glossary.

By default all purpose types are displayed in the Viewer. However, you can choose which are shown by selecting Display > Purposes in the Viewer tab.

Note:  When prims with the proxy purpose are added to Katana, by default they have their render visibility turned off.

Common Working Set Columns

The USD Scene Graph shares three working set columns with the Katana Scene Graph:

These three working set columns control visibility in the viewer and renderer. To find out how to work with these, see Working Sets.

USD-Specific Working Set Columns

The USD Scene Graph also includes two columns for payload management and prim activation/deactivation.

Payloads for Selective Stage Loading

Katana makes use of deferred loading to improve performance. When working with large datasets, portions of the data can be kept in reserve until needed, thus freeing up computational resources for more pressing tasks. In the Katana Scene Graph this is achieved by selectively expanding branches of the tree. In the USD Scene Graph part of the Scene Explorer, it is achieved using payloads.

A payload is a reference to scene information that can be loaded into the stage when needed. Any prim can contain one or more payloads, or have none.

For example, imagine you have a tree asset that is highly detailed. You want to include multiple instances of the tree in a forest.

Your tree asset looks like this:

Copy
#usda 1.0
def Xform "Tree" {
    def Mesh "Trunk" { /*... mesh details ...*/ }
    def Mesh "Leaves" { /*... mesh details ...*/ }
    // ... Perhaps more variations or details like fruits, flowers, etc.
}

To include trees as payloads in your forest, the USD file could be written as follows:

Copy
#usda 1.0
    ()

def Xform "Forest"() {

    def Cube "Tree1"
        (

            prepend payload = @. / tree.usda @ < /Tree>
        ) {
            double3 xformOp: translate = (0, 0, 0) uniform token[] xformOpOrder = ["xformOp:translate"]
        }

    def Cone "Tree2"(
        prepend payload = @. / tree.usda @ < /Tree>
    ) {
        double3 xformOp: translate = (5, 0, 10) // Positioned for natural tree spacinguniform token[] xformOpOrder = ["xformOp:translate"]
    }
}

Using payload enables selective loading and unloading of specific portions of a USD stage to speed up your workflow. Loading any prims or layers that are not currently needed can be deferred until required.

Example: Consider working with a large cityscape. Instead of loading all the buildings, cars, and trees simultaneously, which can be resource-intensive and slow, you can use payloads to load only the parts of the city that are currently visible or necessary for the scene. As you shift the focus of your work, you can revise the payload loading options to select the parts you need.

Deferred loading should be familiar to experienced users who have worked with the Katana Scene Graph. As part of the USD workflow, we have incorporated deferred loading using payloads into the Scene Explorer.

Payloads and Recomposition

Loading and unloading payloads triggers the recomposition of the USD stage. When a payload is loaded, it brings in new data, such as prims and properties to the stage. As a result, the scene graph needs to be updated to incorporate this newfound information. Similarly, when you remove a payload from a stage, recomposition is triggered as data is removed from the scene graph.

Loading and Unloading USD Payloads

Payload management is activated by selecting the Payload button in the Scene Explorer toolbar.

When payload management is deactivated, payloads are loaded via expansion of USD scene graph locations. Expanding a location loads any payloads on that prim, but it does not trigger the loading of any payloads on its descendants.

Prims with payloads have a down arrow icon in the  Payload column.

Payloads are managed by assigning a rule to a prim. This rule determines if payloads are to be loaded for the prim and its descendants.

There are three stage load rules available, as shown in the image below. Either right-click the dot for  the options or use the mouse-click combinations listed.

Right-click in the payload column to open the context menu.

Note:  Though named differently, the three stage load rules map directly to the stage load rules found in USD.  Load One is the OnlyRule, Load None is the NoneRule, and Load All is the AllRule.

The rules only apply if there are payloads on the stage. When there are no payload the rules have no effect.

Effects of Stage Load Rules

The table below describes how payloads are managed according to the stage load rule on the prim.

To help understand how the rules affect payload loading,  the tree diagrams in the table below represent some simple scenes. Each box is a prim and the connecting lines show the prim hierarchy. A green box indicates if there is a payload at this prim, then this payload is loaded. A grey box indicates if there is a payload at this prim, then the payload is not loaded.

 

Load One

Click to toggle

Load payloads on the prim but not its descendants

 

Only the payload on the prim in green is loaded.

Example: Suppose the scene is In an old church, full of details like candlesticks, icons,  stained glass windows, and furniture. You choose to work initially on the daylight shining through the windows. By using the Load One payload method you load only the structural components and windows, reducing memory overhead and enhancing viewport performance. This allows you to fine-tune the primary light dynamics without the computational overhead of secondary assets like books and artifacts.

Load All

Shift + click

Include payloads on the prim plus all its descendants

 

Payloads on the prim and on all descendant prims are loaded if present.

Example: In the church example above, once you have addressed primary lighting behaviour, you could then use Load All to bring in all other objects and address more detailed lighting challenges.

 

 

Load None

Ctrl + click

Exclude payloads on the prim and all its descendants.


No payloads are loaded on the prim and any descendant prims with payloads.

 

Example: In any building environment, such as the previous church example, there may be detailed items that you don’t need to see to address a particular lighting task. Load None gives you an easy way of turning off loading for entire sections of your scene that are not in your area of focus. Aside from geometry, this could be any kind of data that you don’t need, such as animation data.

 

Empty

the default value, or click until it resets to this value

If no rule is assigned and the prim has a payload, then the behavior depends on the load rules on the prim’s ancestors and descendants.

For example, load the payload if any of the following is true:

  • there are no load rules on the stage

  • there are no load rules on any of the prim’s ancestors

  • the closest* ancestor with a rule, has the Load All rule

  • the closest* descendant with a rule, has a Load All or a Load One rule

The payload is not loaded if:

  • the closest* ancestor with a rule, has a Load One or Load None rule.

(*closest can be any number of generations away, but the intermediate generations have no rule assigned)

Cascading Payload Rules to Refine Prim Loading

In real-world production scenarios, it may be preferable that certain parts of a scene should not be loaded to conserve memory. However, specific sections might still be required for a particular shot, sequence, or operation. With USD, child prims can override their ancestors' load policies, giving artists and developers precise control to optimize scenes for their specific requirements.

To achieve this, you can apply rules at different levels of the hierarchy to include or exclude specific prims as needed. For example, the tree below shows the effect of combining two rules.

A combination of payload rules on a simple graph. The leftmost node has a Load None rule but if present the payload would be loaded as there is a downstream Load One rule.

Prim Payload Status

The color of both the arrow and the background change to indicate the payload status on a particular prim. The table below shows the possible states.

 

Payload Rule

Payload Management Column Active

Loaded

Unloaded

Empty

Load One

Load All

Load None

By Inheritance

(loaded due to implicit loading by ancestors or descendant load rules)

n/a

If the prim has been deactivated, Katana desaturates the icon and draws it in a grey circle.

Activating and Deactivating Prims

When managing a scene, there are times when you need to toggle a prim’s presence to remove its appearance and/or influence on the scene. USD does not offer a way to delete primitives, as it is built for non-destructive editing. However, you can simply deactivate prims so they are hidden from the stage and have no effect on the result, removing them from stage composition.

Example: You may often have multiple layers contributing to the final scene. Activation/deactivation enables non-destructive overrides in more influential layers. For instance, a prim present in a base layer can be deactivated in an override layer, changing the final scene without altering the original content.

You can enable selective pruning by activation and deactivation using the Activation button in the Scene Explorer toolbar.

Click the power style button to enable activation/deactivation.

With the Activation column toggled on, you can easily deactivate and re-activate prims using the button in the column.

Click on the button or right-click to open the context menu.

With stage activation on, prim activation can have one of four states:

Status

Icon

Info

Empty

(Default)

No active state has been assigned to the prim by the Scene Explorer, and the prim is active in the stage.

Inactive 

Set by USD or node

No active state has been assigned to the prim by the Scene Explorer, and the prim is inactive in the stage.

Active 

Click to toggle

The prim is set to active by the Scene Explorer. All the descendants are active unless otherwise deactivated.

Inactive

Ctrl + click

The prim has been deactivated by the Scene Explorer, its descendants are not included in the stage.

Note:  There may be other combinations due to the interplay of the Scene Explorer Active column control with the USD, but inactivity is essentially indicated by a light-grey power symbol. A color-filled circle means that the active status is being controlled by the Scene Explorer

Inspecting USD Location Properties Using the Attributes Tab

The Scene Explorer tab integrates seamlessly with the Attributes tab for inspecting USD properties. As with the Katana Scene Graph, click on any location in the USD Scene Graph to view the properties in the Attributes tab.

Click on a scene graph location to view the properties in the Attributes tab.

USD location properties are of two types:

  • Attributes - Attributes store typed values linked to a prim, defining properties like appearance, transformation, and behavior. They can be either dynamic or hold constant values, and each has a specific data type such as float, string, or vector. Attributes can be set using UsdAttributeSet.

  • Relationships - In USD, relationships establish direct connections between prims, allowing for referencing other prims or properties within the scene graph. Relationships can be set using UsdRelationshipSet.

Note: For more information on USD properties, see Attribute and Relationship in Pixar’s USD Glossary.