Houdini Resources

Updated on June 26  2024



Deborah R. Fowler



USD and Houdini

Posted Dec 2  2019
Updated on Aug 12  2024

With Houdini 18 came the introduction of USD or Universal Scene Description developed by Pixar. It is necessary to also introduce a few other items:
MISSING IMAGE
documentation tutorials AND FILES on LOPS/USD (more and more are being produced)

Now that we are in 20.5, USDs will be the underlying file format that is gaining popularity.


Sop import node 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.



USD - no, not US dollar, but "Universal Scene Description" developed by Pixar.

USD 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:


Overview and 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 having a common file format. It consists of layers, and sometimes an anology to photoshop is used in terms of layers. 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 to compose layers.

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

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

It allows differing departments (modeling, shading, animation, lighting, fx, rendering) to have their own format, but still be 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

The physics option 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 allows you to mute in viewer - again good complex scene practices

Best practices - look at the multi-shot workflow for the market scene.

Glossary of common USD terms (there are more than listed here)

Common nodes in Houdini related to USD/Solaris


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 I found 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 brace. 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 zip file of 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 Obj/geo context with a USD import node. Both render perfectly in Karma (ignore the odd looking corners in the Vulcan viewport).

This is a good start to understanding the layering of 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 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 that were created in notepad++.


A few key points regarding Sops vs Lops