2020年8月17日月曜日

Blender で未使用頂点グループ削除スクリプトを書いてみた

 …のですが、制作途中にもっとちゃんとしたスクリプトを公開している方が多数居る事に気づきまして…
まあ、雑なんですが、せっかく作ったので公開します。尚、2.7、2.8両対応。

# idle vg remover

import bpy

if bpy.context.mode == 'OBJECT':
    for obj in bpy.context.selected_objects:
        if obj.type == 'MESH':
            list_use = [False]*len(obj.vertex_groups)
            for vertex in obj.data.vertices:
                for group in vertex.groups:
                    idxGroup = group.group
                    list_use[idxGroup] = True
            idx = 0
            for vg in obj.vertex_groups:
                if not list_use[idx]:
                    obj.vertex_groups.remove(vg)
                idx = idx+1

使用方法はオブジェクトモードで該当するオブジェクトを選択して、スクリプト実行。
コレが

こうなる

動作の解説をすると
1.オブジェクトに所属する頂点グループの数だけ使用を検証するフラグリストを作る
2.全頂点に対して使用頂点グループのインデックスを調べ、見つかったインデックスのテーブルフラグを上げる
3.最終的にフラグが上がらなかった(=未使用)頂点グループを削除
…正直面白味も何もないコードですね。というか、なぜ標準でこの機能が無いんでしょうか?

0 件のコメント:

コメントを投稿