I want to apply or use the same material for multiple objects. How can I do this without doing it per object ? The target objects already have their own materials and I don't want to override them. I just want to add new material slot and same material across multiple objects.

I can't use Ctrl+L to link material because it will replace existing material.

Any solution ?

The real case is, I'm building a house (3 floors) with basic furnitures. So I got many walls, floors, windows, doors, kitchen set , fence etc.

All these objects has their own basic material setup :

  • wall : concrete, white paint
  • door : wood panel, inox, black frame
  • window : glass, inox ,black frame, alluminium
  • etc.

There is a unique wall (wall A) has a material i want to copy.

  • wall A : concrete, white paint, SECTION

So I want to use this section material into all other objects on the scene (those other walls, doors, windows, kitchen set etc). There are many objects so I'm looking a way to apply this section material without manually applying per object. And I want to keep the existing material :

  • wall : concrete, white paint, SECTION
  • door : wood panel, inox, black frame, SECTION
  • window : glass, inox ,black frame, aluminum, SECTION

I can't find a way to apply selected material to multiple objects without replacing the existing material.


  • 1
    $\begingroup$ To clarify: You have many objects with many materials and you want to add a second material slot to these objects so that they all still have their own first materials and share a second material in their second slot? $\endgroup$ Commented Dec 2, 2020 at 19:17
  • $\begingroup$ @Allen : yes, the target objecs already have 1 or more material. So i want to add second/third slot with this new material. (not replacing the existing slots). $\endgroup$
    – andio
    Commented Dec 2, 2020 at 19:23
  • 2
    $\begingroup$ Can you add more details? I mean if some function can add these materials, how about link them to the object faces? So why just add? $\endgroup$
    – lemon
    Commented Dec 2, 2020 at 19:48
  • $\begingroup$ @lemon i've edited my post , adding some more details on it. Pls have a look. Thanks. $\endgroup$
    – andio
    Commented Dec 3, 2020 at 3:11
  • $\begingroup$ Python is needed again here. $\endgroup$
    – lemon
    Commented Dec 3, 2020 at 13:34

1 Answer 1

import bpy

# Input material's name to append
matname = "SECTION" 

if matname in bpy.data.materials :
    mat = bpy.data.materials[matname]
    objs= bpy.context.selected_objects
    for obj in objs :
        if obj.type == "MESH" :
            if matname not in obj.data.materials :
else :
    print("Material '" + matname+ "' does not exist")
  • $\begingroup$ matvalid = matname in bpy.data.materials, matexist = matname in obj.data.materials $\endgroup$
    – scurest
    Commented Dec 3, 2020 at 17:59
  • $\begingroup$ @scurest , thanks a lot ! $\endgroup$
    – andio
    Commented Dec 3, 2020 at 18:26

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .