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("已移除未使用的材质槽。")
相关推荐
程序员_三木2 天前
Three.js资源-贴图材质网站推荐
javascript·webgl·three.js·材质·贴图
程序员_三木2 天前
React和Three.js结合-React Three Fiber
前端·javascript·react.js·前端框架·webgl·材质
一刀不二4 天前
blender 制作莫比乌斯带
blender
子燕若水4 天前
blender merge点Vertices 补洞hole(建模基础操作)
算法·blender
小芳矶4 天前
解决blender投影歪斜问题
blender
九流下半5 天前
threejs 建筑设计(室内设计)软件 技术调研之二 墙体材质改变
材质·threejs墙体材质·threejs点击切换面颜色·threejs点击切换面材质
ue星空5 天前
UE材质常用节点
ue5·虚幻·材质·虚幻引擎
胡说ba道6 天前
生活小妙招之UE CaptureRT改
ue4·材质
财经科技社9 天前
三思照明匠心之作!在杀菌灯材质上下功夫
材质
程序员_三木9 天前
Three.js入门-材质详解,构建视觉真实感的核心
开发语言·javascript·webgl·three.js·材质