Properties vs. Materials
Aside from shaders, every renderer defines certain properties of objects. If these properties are defined on an object, their values will be sent to the renderer if the values are non-default.
However, there is also a Properties SHOP. This doesn’t represent a shader per-se. Rather it provides a place to put object properties. So, a material can have a Properties SHOP as one of the shaders inside. Any object which has such a material applied to it will pick up the properties that are defined on the material.
This is useful, for example, to use in IFD and RIB. In IFD and RIB, the displacement bounds is a parameter which is defined outside of the displacement shader. However, by placing a properties SHOP in the displacement material, it is possible to add the displacement bound property and tie its value to the displacement amount in the shader. This is more convenient because you no longer have to worry about setting displacement bounds, since the property is automatically defined in the material.
Promotion of material parameters
Clicking
on the material tile lets you automatically promote all the shader parameters. This is a short-cut for bringing up the parameter editor and adding extra links to the shader parameters in the subnetwork.
Promoting material parameters does more than provide a unified interface to the material, it also allows parameters to be overridden at the object (or SOP) level.
Inheritance of properties
Properties may be defined in many various places in Houdini. The precedence order is as follows:
Primitive attribute material assignment
Object parameters
Object level material assignment
Output driver properties
Renderer default values
For example, when determining the light mask for a polygon, the material that has the light mask property will be applied to the primitive. If there isn’t one, the light mask property in the object’s parameters will be used. If there isn’t one on the object’s parameters, the light mask property defined on the output driver will be used. Otherwise, the renderer’s default light mask will be used.
The inheritance model gets slightly more complicated when instancing objects. The properties defined on the instance object will override the object parameters on the object being instanced. The instance object’s overrides do not override geometry attribute properties.