Goal
My goal is to keep a single source of truth while allowing instances to modify a few expected parameters (a material for example).
This way I can create a small object in a separate file, and create instances of it in many different files. Each instance would allow me to override a param from its default value for the material.
If I ever need to change all objects of that type, I'd just modify the main one.
It's a bit similar to Object-Oriented Programming, but using Blender objects instead.
Unreal Engine 4 has exactly this concept that I'm looking for when it comes to materials: https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/MaterialInstances/
Does Blender Cycles have this concept of params for materials? Does it also have the concept of instances?
Example
File: Ball.blend
- Created a Sphere called Ball.
- Apply a simple diffuse material. By default the color is red. Instances of Ball should be able to choose a different color, so I want to create a param called 'color' for the material.
File: Beach.blend
- Shift+F1 to Link Ball into this file. Any changes made in the original Ball will be reflected here.
- I want to change the color of the ball to green, so I override the param 'color' to 'green'.
I could decide later that all balls should be glossy, so I could apply this shader to the main material and all balls are now glossy while maintaining the green color for my instance since I'm expecting a parameter in the material called 'color'.