Most of what we've seen so far has been comparing USD to sops and geo caches, then we just added some /obj things for lights and cameras. A core part of USD is the idea of taking all these concepts that most apps treat as different entities (well, Houdini definitely does), and unify them.
Next is materials. Default Houdini puts them into a seperate matnet or shopnet context, which you then refer to via material parameters or material sops, how does lops handle this?
- Append a material library to your setup so far, display it
- No change. Good.
- Double click it to dive inside
- Ah, look in the top right of the network view, you see the faint 'vex builder' text, which is a terrible way to tell you you're now in a matnet. Interesting.
- Create a principled shader, make the base colour a bright green
- Jump back up to lops, look in the Scene Graph Tree. There's a new folder, 'materials'. Expand it, there's the principled material. In USD, materials live in the Scene Graph Tree like everything else, they're just not 3d geo. It's like in maya if you turn on 'show DG objects' you get all of nodes in the maya scene visible.
- So the material is there, but unassigned. Lets fix that.
- In the parameter pane turn on 'assign to material'.
- In the scene graph tree, select reference3, and drag it into the 'geometry path' parameter.
- Material assigned!
If you're on mac like me, you might get some viewport glitches like the pig turnign black. Try switching to wireframe and back, or switch to flat lightig and back, but you should see the material.
How is this mapping stored internally? As a property on the object. Select reference3 in the scene graph tree, and look at the scene graph details pane. You'll have to rearrange things a bit, but you'll see a 'material:binding' property, expand it, there's the link to the material.