Ben Traje
← Back to solaris

Materials in Houdini Solaris (LOPs)

24 Jul 26 (2mo ago)

First off, you need to drop down a Material Library LOP and build your shaders inside it. Once your shaders are built, you can either manually fill the material list on the library node or just hit Auto Fill Materials. Just because a material exists inside your library node doesn't mean it's automatically applied to your scene. Yea, right? LOL.

To actually apply it, you drop down an Assign Material LOP after the library, select your target geometry (prims), and assign the shader.

Scene Organization: You can use multiple Material Library LOPs (e.g., one for foliage, one for buildings, etc.). The Assign Material LOP isn't locked to a single library—it can pull materials from any Material Library node further up the stream.

It definitely feels a bit convoluted for simple scenes, but when you're managing complex shots, keeping creation and assignment separated is a lifesaver.

USD & MaterialX Quirks to Watch Out For

Coming from Maya (Arnold), C4D (Redshift), or Blender (Cycles), the MaterialX setup in LOPs can feel annoying because standard shader roots aren't auto-connected for you. You have to wire everything manually. Ugh.

Here are a few specific gotchas I stumbled across:

  • Connecting Output Nodes: The final node in a MaterialX network is usually mtlxsurfacematerial. You wire your surface shader (and displacement shader) directly into this node. It doesn't need an extra "Output" node downstream unless you're combining shaders with a Collect node.
  • Vertex Color (Cd): The point attribute Cd from SOPs automatically gets converted into displayColor when transferred into USD. To fetch it inside your MaterialX shader, use a Geometry Property Value (mtlxgeompropvalue) node and set the signature to color3 and the property name to displayColor.
  • Emissive Surfaces: If you need an emission shader, the MaterialX equivalent is somewhat handled by the Surface Unlit (mtlxsurface_unlit) node or using emission parameters on standard surface nodes.

Get ready to get comfortable with MaterialX nodes—it's the native standard here now. I really hope it's for the better because I really don't want to lock myself into render-engine-specific shader networks anymore. I thought we were way past the render wars by now... come on, it's 2026 already!