1
$\begingroup$

I am a new Blender Convert. I have spent years using 3D Studio Max. I couldn't spend the big bucks to continue my license many years ago so I use the last version I paid for back in the 90's Max 3.1. I am trying to update and move many of my projects to Blender. (no comparison to what Blender can do vs the old version of Max 3.1 but I'm unlearning the way Max did things)

Now for my question: I have some of my models that I edit fix and add materials. When I append them to a master scene, I always end up with duplicate copies of the materials. (Rusty Yellow.001, etc. in addition to the original material. Not sure how to make the appended object use the existing material instead of a duplicate. Makes for a very messy project.

$\endgroup$
2
  • $\begingroup$ Append creates copies completely independent of the original project. Therefore multiple appends create separate materials copies. $\endgroup$
    – Emir
    Commented Sep 19, 2021 at 16:14
  • $\begingroup$ blender.stackexchange.com/questions/91378/… $\endgroup$
    – batFINGER
    Commented Sep 19, 2021 at 16:44

2 Answers 2

1
$\begingroup$

Unfortunately you can't do this automatically. There are (at least) three approaches to working around it:

  1. Link rather than append, and use Library Overrides when you want the copy to be different than the original, or to use the copy to modify the original.

  2. Manually find every object that uses the duplicate material and use the Browse Materials button in the shader properties panel to select the original. If you click on the button it will bring up a list of materials. Click on the original.

Material drop down

  1. Write a python script to search your objects and replace all uses of material Foo.XXX with Foo. This question contains some examples of how to do that.
$\endgroup$
1
$\begingroup$

You can copy this code into the text editor, and it should replace all the .001 materials with the original materials in the scene.

import bpy

def replace_materials_with_original():
    for obj in bpy.data.objects:
        # Only consider mesh objects with materials
        if obj.type == 'MESH' and obj.material_slots:
            for slot in obj.material_slots:
                # If the material name ends in .001
                if slot.material.name.endswith(".001"):
                    # Try to get the original material (without .001)
                    original_material_name = slot.material.name[:-4]  # Remove .001 from the end
                    original_material = bpy.data.materials.get(original_material_name)
                    
                    # If the original material exists, assign it to the slot
                    if original_material:
                        slot.material = original_material

# Execute the function
replace_materials_with_original()

```
$\endgroup$

You must log in to answer this question.

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