Blender脚本-移除未使用的材质槽

1.运行效果

脚本处理前(389个材质)

脚本处理后(5个材质)

2.脚本代码

python 复制代码
import bpy

# 获取当前选择的对象
selected_objects = bpy.context.selected_objects

# 如果没有选择任何对象,则打印警告并退出
if not selected_objects:
    print("未选择任何对象")
    exit()

# 遍历每个选中的对象
for obj in selected_objects:
    if obj.type == 'MESH':  # 仅处理网格对象
        print(f"对象 '{obj.name}' 有 {len(obj.material_slots)} 个材质槽")
        
        # 遍历对象的材质槽
        material_slots_to_remove = []
        for i, material_slot in enumerate(obj.material_slots):
            # 获取材质槽绑定的材质
            material = material_slot.material
            
            if material:
                # 检查是否有任何面使用了这个材质
                material_used = False
                
                # 遍历对象的所有面,查看是否有面使用了该材质
                for poly in obj.data.polygons:
                    if poly.material_index == i:  # 该面使用了该材质槽的材质
                        material_used = True
                        break
                
                # 如果没有面使用该材质,标记该材质槽以待删除
                if not material_used:
                    print(f"标记删除材质槽 {i}:材质 '{material.name}' 没有被任何面使用")
                    material_slots_to_remove.append(i)
        
        # 进入对象模式(确保不是在编辑模式)
        bpy.context.view_layer.objects.active = obj
        bpy.ops.object.mode_set(mode='OBJECT')  # 切换到对象模式
        
        # 删除标记的未使用的材质槽
        for index in reversed(material_slots_to_remove):  # 从后往前删除,避免索引变化
            # 设置当前活动的材质槽索引
            obj.active_material_index = index
            bpy.ops.object.material_slot_remove()  # 使用 bpy.ops 删除材质槽

# 输出清理完成到控制台
print("已移除未使用的材质槽。")
相关推荐
远离UE42 天前
blender uv小技巧
blender·uv
向宇it5 天前
【unity小技巧】在 Unity 中将 2D 精灵添加到 3D 游戏中,并实现阴影投射效果,实现类《八分旅人》《饥荒》等等的2.5D游戏效果
游戏·3d·unity·编辑器·游戏引擎·材质
向宇it5 天前
Unity Universal Render Pipeline/Lit光照材质介绍
游戏·unity·c#·游戏引擎·材质
远离UE47 天前
UE 材质 变体 概念
ue5·材质
Superstarimage7 天前
【EGSR2025】材质+扩散模型+神经网络相关论文整理随笔
人工智能·神经网络·材质
在下胡三汉8 天前
3dmax物理材质转换标准材质,物理材质转VR材质,VR材质转标准材质3dmax物理材质转标准材质插件
vr·材质
在下胡三汉9 天前
3dmax一键烘焙很多张贴图合并成一张贴图插件支持fbx/obj/blender多材质模型合并为一张贴图
blender·材质·贴图
在下胡三汉9 天前
3dmax标准材质转物理材质插件,支持VR材质和CR材质转换成功物理材质,支持多维子材质
vr·材质
九河_11 天前
【blender】使用bpy对一个obj的不同mesh进行不同的材质贴图(涉及对bmesh的操作)
blender·材质·贴图·bpy
Lud_22 天前
OpenGL ES 中的材质
android·材质·opengl es