blender script 快速删除零权重和空的顶点组

原始脚本来源
https://blog.csdn.net/u011086331/article/details/103246839
https://blender.stackexchange.com/questions/16517/how-to-quickly-remove-all-zero-weight-vertex-groups#

快速删除活动物体的零权重和空的顶点组
我就增加一下注释,改下变量名,便于自己学习

使用方法,保存以下脚本,然后在blender script 面板打开
然后选中你要处理的模型,然后在 script 面板上方启动该脚本,即可成功。

注意要选择的是网格体,不然会报错。

打开blender的控制台,观察输出,你能看到被删掉的顶点组的编号,成功后会输出 Success。

'''
blender script
在blender v2.92中成功使用

功能:
删除活动物体的空顶点组

空的顶点组代表着 一个顶点组
不包含任意顶点
或
顶点组内全部顶点的权重均小于等于0
'''

print(f'Start {__file__}')

import bpy

def check_each_vertex_group_max_weight(obj):
    gid_to_maxw = {}
    # 让统计字典内的顶点组的初始值为0
    for g in obj.vertex_groups:
        gid_to_maxw[g.index] = 0
        
    # 循环网格体的每一个顶点,统计每个顶点组的最大权重
    for v in obj.data.vertices:
        for g in v.groups:
            gid = g.group
            w = obj.vertex_groups[gid].weight(v.index)
            if (gid_to_maxw.get(gid) is None or w>gid_to_maxw[gid]):
                gid_to_maxw[gid] = w
    return gid_to_maxw

# 获得活动对象
obj = bpy.context.active_object

# 获得活动对象的 每个顶点组到最大权重的字典
gid_to_maxw = check_each_vertex_group_max_weight(obj)

# 让字典的值按大到小排序,这是为了从大到小逐个删除时,删除序号大的不会影响序号小。
wait_to_del_gids = []
for gid, maxw in gid_to_maxw.items():
    if maxw <= 0:
        wait_to_del_gids.append(gid)

# 让顶点组编号从大到小排序,这先删除编号大的不会对编号小的造成影响
wait_to_del_gids = sorted(wait_to_del_gids)[::-1]

print(f'Delete vertex group index list {wait_to_del_gids}')

# 逐个删除空顶点组
for gid in wait_to_del_gids:
    obj.vertex_groups.remove(obj.vertex_groups[gid])

print('Success')

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值