- by binding different materials (Bxdfs and upstream pattern graphs) to each object instance. This approach is the easiest, but may incur setup overhead - for large numbers of instances, it may be tedious to set different shading parameters per instance. Also, a Bxdf bound to an instance will override all Bxdfs bound to the master, even if the master is comprised of multiple pieces of geometry with multiple different Bxdfs.
- by linking different lights and light filters to the object instance. Light linking on the master can be overridden by specifying different light links on the instances.
- by setting different user attributes per object instance, and driving Bxdfs using these attributes. RenderMan supports the use of completely arbitrary user attributes that may be set differently for every object in the scene. The use of these user attributes, combined with a PxrAttribute pattern node, lends itself well to driving shading variation, particularly if the values of those user attributes can be derived automatically. Any user attributes defined by the master definition can be overridden by different values for the same user attributes specified on the instance.