Shared Custom Group
You can use a shared group that exposes sockets that are supposed to be material specific, while using its own values for shared stuff.
- To easily isolate some sockets from the Principled BSDF, connect the sockets you want to isolate to some nodes (here: only base color). Then select the Principled BSDF together with one more node (it can be any temporary node; it doesn't have to be connected, but I did connect it as it will be useful when I hide sockets). Then select the Principled and the one additional node (here Value node), and press ✲ CtrlG:
- Optional step: Now in the Custom Group, you can hide some sockets, by connecting everything to the sockets you don't want to hide, and with the Principled BSDF node selected, pressing ✲ CtrlH. You can also right-click the node and choose "Toggle Node Options":
💡 Those aren't really things you want to do for your own projects, I
do these steps for educational purposes to get rid of irrelevant
- Remove the temporary node and press ⭾ Tab to exit the custom group; there you can also remove another temporary node:
- You can now also "Toggle Node Options" for the custom group, copy-paste it to other materials, and everything inside the custom group will stay synchronized:
Of course you can expose all values and just disconnect some when you decide you want them all to be shared.
💡 Using this technique will make the shared values (here: metaliness)
shared among all polygons using the material. This means that if you
want to share only within a single object, you need to use a different
Custom Groups for other objects.
You can copy one of the material's values as a new driver, and paste that driver to other material's values. It can be hard, however, to remember which material you're supposed to modify, so you may consider creating a new custom property instead:
💡 It's a little misleading I used an object's custom property, even
though (as you see on the GIF) a driver points to a unique place that
isn't updated when you duplicate an object - how could it be updated,
if new materials are not created? Unfortunately a node tree doesn't
have a way to know what is using it when it's evaluated.
Unlike in shading, geometry node trees have modifier wrappers. This means that you can send data from the modifier to the node tree, and since modifiers get duplicated when objects are duplicated (modifiers actually can't be reused, they have only a single user), the drivers are also duplicated and updated to new targets: