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 aCollectnode. - Vertex Color (
Cd): The point attributeCdfrom SOPs automatically gets converted intodisplayColorwhen transferred into USD. To fetch it inside your MaterialX shader, use a Geometry Property Value (mtlxgeompropvalue) node and set the signature tocolor3and the property name todisplayColor. - 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!