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("已移除未使用的材质槽。")
相关推荐
向宇it2 小时前
【unity组件介绍】URP Decal Projector贴花投影器,将特定材质(贴花)投影到场景中的其他对象上。
游戏·3d·unity·c#·游戏引擎·材质
top_designer1 天前
3D材质总监的“光影魔法”:用Substance Sampler AI,“擦除”照片中的光影
人工智能·3d·新媒体运营·aigc·游戏程序·材质·材质设计师
阿拉丁的梦1 天前
【3D大比拼第一集】--max,maya,c4d,blender的命令搜索功能
blender·maya
山海鲸可视化1 天前
模型材质一键替换~轻松还原多种三维场景
webgl·数字孪生·材质·3d模型·三维渲染
☆平常心☆2 天前
UE5 相机后处理材质与动态参数修改
c++·ue5·材质
BJ_bafangonline3 天前
如何更改Blender插件安装位置呢?
blender
小赖同学啊4 天前
将Blender、Three.js与Cesium集成构建物联网3D可视化系统
javascript·物联网·blender
远离UE46 天前
blender uv小技巧
blender·uv
向宇it9 天前
【unity小技巧】在 Unity 中将 2D 精灵添加到 3D 游戏中,并实现阴影投射效果,实现类《八分旅人》《饥荒》等等的2.5D游戏效果
游戏·3d·unity·编辑器·游戏引擎·材质
向宇it9 天前
Unity Universal Render Pipeline/Lit光照材质介绍
游戏·unity·c#·游戏引擎·材质