Is there a quick way to delete all materials in the scene? I have a scene containing 20+ materials and all linked to objects. I'd like to remove all the materials from my blender file.
Yes, you can. Easy way would be:
- Select all objects, keep one active, remove all materials on it by pressing the "-" button on the right-hand side of material slot list;
- Then, from the drop-down list (below it), choose Copy Material to Others. Save the file.
All unused material data will be removed after saving. You cannot see them anymore after reopening.
-
$\begingroup$ I never knew such a thing ever existed. Found the button, done and gone. $\endgroup$ – ikel Feb 19 '14 at 4:53
-
1$\begingroup$ This answer just saved me Two thousand, nine hundred and sixty five mouseclicks. You sir, are a legend. $\endgroup$ – Jachym Michal Nov 20 '19 at 20:15
-
1$\begingroup$ @JachymMichal Glad to help sir. It's 2.8 now, and we still have to do this kinda quick and dirty trick... T_T $\endgroup$ – Leon Cheung Nov 21 '19 at 2:51
-
$\begingroup$ I have no materials assigned, and reopening the file doesn't remove any of them $\endgroup$ – stackers Jan 3 '20 at 19:10
to delete all materials:
import bpy
for material in bpy.data.materials:
material.user_clear()
bpy.data.materials.remove(material)
-
1
-
$\begingroup$ Would it be an easy update to make your script remove the material slots too? $\endgroup$ – Pieter De Bie Dec 4 '20 at 5:46
There's an addon Material Utils, which ships with Blender.
Enable it in the User Preferences > Addons, select all objects A, hit Q over 3D View and chose Remove Material Slots:
It currently works on the active object only, despite the tooltip stating it would work for multiple objects. Here's a scripted solution for all selected, editable (non-linked) objects:
import bpy
for ob in bpy.context.selected_editable_objects:
ob.active_material_index = 0
for i in range(len(ob.material_slots)):
bpy.ops.object.material_slot_remove({'object': ob})
-
1$\begingroup$ According to the tooltip: "Remove all material slots from active objects", so a Copy Material to Others operation is still needed. Btw, you are supposed to suggest a coding way, I bet. :P $\endgroup$ – Leon Cheung Feb 19 '14 at 8:05
-
1$\begingroup$ Interesting, it says objects, but seems to work on the active object only. I should either fix the tooltip or add an option to chose what to delete (slots of active object, selected objects, scene objects, all). $\endgroup$ – CodeManX Feb 19 '14 at 8:13
-
4
-
3$\begingroup$ Added a scripted solution to really remove all slots of all selected objects :) $\endgroup$ – CodeManX Feb 19 '14 at 8:27
-
$\begingroup$ I'm working on the Material Utils addon and it looks like it currently fails for a lot of scenarios? I wonder how slot cleanup should behave, I could let it remove all empty slots (but they can actually be assigned without material!), or only slots with materials not used by the object, or a mix of both... Won't work for text objects however, they don't seem to expose the materials :( $\endgroup$ – CodeManX Feb 23 '14 at 1:39
just had to solve this problem too. The other answers here didnt work for me. My solution:
- Select all of the objects you want to remove materials from.
- In Object Mode, Join them (menu: Object/Join or shortcut: ctrl + 'j').
- Remove the material(s) in the materials panel by pressing the '-' button.
- In Edit Mode, select all ('a'), press 'p' and separate (by loose parts in my case) to get your individual objects back.
-
3$\begingroup$ I'd use this if and only if none of the original objects had loose parts, or shared the same origin, or had meaningful names (mesh or object). $\endgroup$ – batFINGER Oct 21 '17 at 12:04
-
1$\begingroup$ This might not work as expected for mesh objects containing several meshes, like e.g. monkey. After your procedure there will be monkey and 2 eyes objects. Answers shown here still work for this situation $\endgroup$ – Mr Zak Oct 21 '17 at 12:28
-