Houdini Resources

Updated on June 28  2025



Deborah R. Fowler



Instancing

Posted June 18  2025
Updated on June 26  2025

USD Table of Contents


Instancing is a broader concept beyond just using it in Houdini. I have used instancing in many contexts such as Renderman, Houdini, and now USD. It is also used in Arnold, Unreal etc. Replacing an object with another at render time, to enhance performance and memory.

Instancing in computer graphics is the practice of rendering many copies of the same object in the scene, however there can be variations of the original, such as different transforms (ie. position, scale, orientation) or look (color, etc)

Why? avoids duplicating the geometry
  • memory efficient (store the mesh once and then store only the information that differs)
  • performance (reduces memory and draw calls - think trees, or crowd agents)
  • customizable (unique attributes such as color, animation, material variation)

The history in Houdini is interesting as we went from using "instance" nodes to provide this functionality (pre H13), then switched to packed primitives (artist friendly instancing) and now that we are in Solaris/USD we are back to "instancer" nodes.

Prior to H13, there was the concept of fast point instancing (for geometry) and full point instancing (for lights). Fast allowed a limited variation of properties for performance optimization; Full allowed more modification.

TIP: when using "copy to points" in Solaris context be sure it is set to Point Instancer. The "instancer" node in the tab menu is preselected to Point Instancer. Lights are different.

Important to talk about as there are nuances to this topic in regards to USD.

In Houdini, the process was typically to pack and override the attributes stored in some way.
This was in particular important for lights (which could not utilized packed).

The examples discussed in class:

Example file showing the concepts also in each section on lighting. Instancing in general and in Karma, Redshift and Mantra featured.

The idea of instancing is to have an object that you keep all detail, but then reference it in some way. Now that we are using USD with Karma instancing becomes more evident. It is very useful for reducing the load of complex scenes.

Packing is highly recommended in Houdini! It is instancing at your finger tips.


However in USD (Solaris stage) there are various options:



Point Instancer
Instanceable Reference

Reference

Instanceable inherit

Inherit

Instanceable specialize, specialize as above but with prepend specialize

So what are inherits, references, specialize doing? prepend modifys list-based properties - inherit provides live hierarchical relationships, references allows modularity and resuse, specilizes allows for controlled variation while preserving the structure.

We will talk about Variant Sets in USD which are similar to instance overrides in that they allow modifiying properties of a prim, but they operate slightly differently.


Examples - use Point Instancer whenever possible

Let's take some cubes in Houdini and use packed geo, vary the orientation and color. The export to usd in sop.
What we get is a prototype cube with instances the reference the original mesh and add transforms. Here is part of the file:


This would be an example of an instanceable reference.

If we create the same setup in Solaris, using Point Instancer we get a point instance version. This is the entire file. Note that it creates a primvar for the displaycolor as well as an orientations (stored quaternion data).

This both appear correctly in usdview.

You can do the same thing from sop context just use a USD configure node. A similar property exists on the sop import so you can also achieve this in solaris while importing packed data.
The file produced looks similar to the one above.



In composer, the display color is not used, but you can also assign individual materials if desired by clicking off the instance checkbox. Interesting tool!