Copying material's attribute across other materials

Hello guys. I wonder if there is a way to copy one material’s attribute to others? I have 60 pieces of mesh and 60 different materials. Now I need to adjust displacement level and scale for all of them (values should be the same). How can I do that, other than manually open every single material properties and change the displacement value? It takes a lot of time, and for different renders I might change those values again, so I would be extremely glad if you can show me some way to speed up that process.

I think you can select all the objects, then change the value and right click over where you entered the value to get a menu that allows you to apply the change to all selected objects.

I believe I was looking for that “copy to selected” function, but for some reason it stays inactive. Any ideas why could that be?

I also tried to change values with pressed Alt key, and it didn’t work either. Can it be, that Blender’s functionality is limited here? Or am I doing something wrong? I can’t change ANY material property for multiple objects, nor with copy to selected, which is greyed out, nor with Alt key…

I can’t provide help on it, but maybe it is possible via scripting?
Doing 60 is time consuming, sure. But you would have been done by now :wink:
What are these 60 materials since they can share displacement value like this?
If it’s just the color that change, I would use a single material and let object color drive it.
And within that, if a few (not too many) use different textures, I would let object ID drive those.
To speed up the process, I’d create a dummy object with all the materials for easy access.
Possibly separate the objects into a separate file that is appended back later, if it speeds up.
Then replace the displacement node with a group node containing that displacement.
So from now on, every time you need to change all of them, you change only one group node.

My mesh looks like this. This an asset for a VR movie, so every wall piece is about 3x3m, and has UNIQUE 4k texture.The final render will be made by other guy, but to present my work, I need to make some renders. And I have 6 different houses : ) Well, somehow I managed to work manually to this day, but to find a way of optimising the workflow would be just great.


I use adaptive subdivisions, and it tend to look different from different distance, so changing displacement value for every new render is too time consuming.
This how it looks with the default settings from afar (not too bad, but I would like to reduce displacement strength).

To sum up - still looking for a way to control one parameter of a different materials simultaneously/from one place.

Put a value node in a node group and expose only the output.
Connect the node group output to the relevant input for all similar displacement nodes.
You can now even put the node group as a loose node in world nodes for easy access.
I use similar technique for quickly turning off all interior lights - shader passthrough,
if disconnected inside, no lights or emission shaders will go through it, turning off the light.

2 Likes

Sounds interesting, but not entirely clear tbh. Mainly I use Blender for modelling, and do not have too much experience with nodes. But I definitely will give it a try, thank you.

When you create a node group and simply copy and paste it into a different material, any changes made inside the node group will also apply to all copies in other materials.