Deborah R. Fowler

USD and Houdini — Overview

Posted Dec 2 2019 Updated Feb 16 2026
This section is entirely Houdini centric — USD is a broader topic: USD Table of Contents

Introduction

Also on YouTube.

See also: command line rendering in Karma.

Example file to create sequences of USD files (for example, from simulation) using a USD clip node. (Thanks Davis for the tip.)

Now that we are in 20.5, USD is the underlying file format that is gaining popularity. With Houdini 18 came the introduction of USD — Universal Scene Description, developed by Pixar.


Bringing Data into Solaris

Summary of various common ways to bring data into Solaris (stage or lopnet) — see CoinCopyH20.5New.hipnc

SOP Import note for 20.5

One change in 20.5 to the SOP import node from previous versions is that it now issues a warning if you have not specified an output path. Easy to click and add a save path: $HIP/geo/yourfile.usd

SOP Import output path warning — Houdini 20.5
SOP Import output path warning — Houdini 20.5
↑ Back to top

Solaris, Karma & LOPs

Introducing USD also means introducing a few related tools:

Solaris

Houdini's tool for creating and editing USD. A network context called LOPs for creating layout, lighting, and rendering.

Karma

See also: Houdini and Karma. The Viewport becomes your render view (Hydra-based IPR), and you use a Karma LOP node with "save to disk" to render your scene inside a LOP network context (using USD). CPU and XPU options are available in Karma, and it will replace Mantra.

Tips — Karma
  • You must create your render folder before rendering.
  • Variance threshold limits the samples; pixel samples is the max. Type D to change the preview settings.

Karma LOP documentation

LOPs

To set up your scene in USD format for use with Karma, you will use a LOPs network. It is a way to organize your entire scene.

A LOP network in Houdini
A LOP network in Houdini
Tips — LOPs
  • To move your camera: lock and move.
  • Once geometry is in LOPs, it is referred to as a "prim" or primitive — not the same as a Houdini primitive.
  • To view your USD: use a network panel USD / Scene Graph Tree. The Scene Graph Tree gives a tree view of your USD scene, editable best via stage manager (not the same as a SOP network tree view).
  • In LOPs: right-click on a LOP node → LOP Actions → Inspect Active Layer.
  • You can also view a LOP node by: RMB → LOP Actions → Inspect → Flattened Stage.

Recommended Documentation, Tutorials & Files

usdview

usdview (external) can be run from the command line to bring up and inspect your scene.

usdview screenshot
usdview — inspect USD files from the command line
↑ Back to top

USD Format

USD — no, not US dollar, but "Universal Scene Description", developed by Pixar. It is a toolset for reading, writing, editing, and previewing 3D data. It is "stackable" in non-destructive layers. Hydra is an API for generating an image from a USD scene. USD consists of C++ libraries with Python bindings for scripting.

Advantages

↑ Back to top

Overview & Terminology

Note There is an introduction and overview to USD in the SideFX docs. Below is a very brief summary.

Understanding USD will help you understand Solaris, but the details are handled by the LOPs nodes.

USD has been used by Pixar and is now open source, with the intention of providing a common file format. It consists of layers — sometimes an analogy to Photoshop layers is used. In Houdini there is a prune node that "hides" layers. Working in "stage" in Houdini is the resulting composition of your layers. Stage is a USD term for composing layers.

When composing layers, opinions are considered, so a property will be overridden if the layer has a stronger opinion.

Layers contain Prims (not like a Houdini prim, but a USD concept). Prims and their contents are organized into a layer.

USD allows differing departments (modeling, shading, animation, lighting, FX, rendering) to have their own format while still being readable and interchangeable.

In Houdini, regarding writing USD files: remember that USD stores data, not nodes (like a JPG versus a PSD file, or like a bgeo.sc). Assets also have the concept of purpose — render or proxy. Hydra is the API that talks to USD.

Tips
  • Physics: The physics option in LOPs really has a DOP running in the background, so practice good complex scene practices when using it. On the Edit LOP: right-click and select "Use Physics."
  • Stage muting: Stage allows you to mute in the viewer — again, good complex scene practices apply.
Best Practices Look at the multi-shot workflow for the market scene.
↑ Back to top

Glossary of Common USD Terms

There are more terms than listed here.

prim (primitives) Unit of USD; has a name, properties, and children. Prims are nodes in the tree of objects that make up a stage.
properties Either attributes or relationships. Attributes are more common — e.g., size.
primvar A specific type of attribute. A namespace is added to influence how the Hydra API treats the value; involved in instancing (like geometry attributes).
metadata Named values attached to properties that change how they work.
layers A .usd file is a layer (usdc or usda), but a usdz file can contain multiple layers in one file.
stage The results of loading USD files and composing the layers.
sublayers Import contents over the current tree.
references Import contents by attaching to the existing tree.
variants Used for a family of geometry, level of detail, material assignments. (Seen in SideFX LOPs tutorial 1.)
↑ Back to top

Common Nodes in Houdini Related to USD / Solaris

sopcreate Just a SOP network.
layerbreak USD file only saves from this point if written; creates a new layer manually.
sopimport Allows you to reference geometry from your SOP context (creates an in-memory USD representation for use in Solaris).
prune Hides / makes invisible a layer.
merge In Solaris, has options for how layers are merged (sublayer, merge).
editlop Allows you to use the physics option via RMB → "Use Physics."
configure (nodes) Allow you to change the "kind" of the asset using a configure layer or primitive LOPs.
stagemanager SideFX recommends using a stagemanager node. (Seen in SideFX LOPs tutorial 2.)
↑ Back to top

Example Files

In the documentation noted above, there is a "quick example." However, I was not able to use the two_boxes part of it verbatim (perhaps there is a way; however I found a solution that works). Here is what works with .usda files and .hipnc supplied below.

box.usda works great! Here are my versions:

#usda 1.0
def Cube "box"
{
    double size = 0.5
}

This def defines a new prim called box. The "attributes" (now called properties) are defined in the curly braces. Coming from a C++ background, I tend to match my curly braces with each on its own line (personal preference).

The two-box example as listed in the docs (as of this posting) I could not get to read in properly. The syntax I used was:

#usda 1.0
def "box1" ( references = @./box.usda@</box> )
{

}
def "box2" ( references = @./box.usda@</box> )
{
    double size = 5.0
}

Click here for a zip file of the usda files and hip bringing them in.

This defines the two boxes by referencing the other .usda file where box is defined as a primitive. If you look at the hip file provided with the usda files, you will see this can be imported into Solaris with a file node, or alternatively into the Obj/geo context with a USD import node. Both render perfectly in Karma (ignore the odd-looking corners in the Vulkan viewport).

This is a good start to understanding the layering of the USD file format. We will delve deeper as we talk about command line rendering. Note that you are more likely to be using .usd (or .usdc) rather than the ASCII-readable file, as binary will be smaller. In addition, you will be generating the USD source from the interface with a USD ROP, rather than these files that were created in Notepad++.

↑ Back to top

A Few Key Points: SOPs vs LOPs

↑ Back to top