MENU

    Blenderで頂点グループを一括で削除したいときの対処法

    目次

    はじめに

    Blenderでキャラクターモデルなどを扱っていると、一度Armature(アーマチュア)を適用していたオブジェクトに対して、メッシュだけを取り出したり、さらに再編集を加えるために親子関係をリセットする、というケースがあります。このとき、メッシュオブジェクトには元のボーン名に対応した多数の頂点グループ(Vertex Groups)が残ることがあります。

    こうした頂点グループは、以後の編集やリグの再設定などで邪魔になることもあるため、一括削除したくなる場面があります。しかし手動で削除するには、一つ一つ選んで「-」ボタンで削除していく必要があり、非常に手間がかかります。

    この記事では、そのような煩雑な作業を避けるため、Pythonスクリプトによって頂点グループを一括削除する方法をご紹介します。

    なぜボーン名のグループが残る?

    Blenderでは、Armatureを親として設定したメッシュに対し、各ボーンの影響範囲を頂点グループとして割り当てています。この頂点グループは、Armatureのモディファイアや親子関係を解除しても、メッシュオブジェクト側にデータとして残り続けます

    そのため、親子関係をリセットしたり、Armatureモディファイアを削除しても、不要になった頂点グループは手動またはスクリプトで削除する必要があります。

    スクリプトで頂点グループを一括削除する

    スクリプトの記述場所

    Blender上部メニューの「スクリプト」タブ、もしくは「テキストエディター」を開き、以下のスクリプトを貼り付けてください。

    全頂点グループを削除するスクリプト

    import bpy
    
    # アクティブなメッシュオブジェクトを取得
    obj = bpy.context.active_object
    
    # 頂点グループをすべて削除
    if obj and obj.type == 'MESH':
        obj.vertex_groups.clear()
    

    ⚠ 注意:このスクリプトを実行すると、オブジェクトに含まれるすべての頂点グループが削除されます

    一部の頂点グループを残す例(除外指定)

    特定の頂点グループだけは削除したくない場合、以下のようにフィルタを加えることで除外できます。

    import bpy
    
    obj = bpy.context.active_object
    preserve_names = {"Head", "Spine", "Root"}  # 残したい頂点グループ名を指定
    
    if obj and obj.type == 'MESH':
        for vg in obj.vertex_groups:
            if vg.name not in preserve_names:
                obj.vertex_groups.remove(vg)
    

    残したい頂点グループ名については大文字小文字の区別があるので、間違えないように記入してください。
    この方法を使えば、特定のボーンやカスタム頂点グループを残しつつ、不要なグループだけを除去が可能です。

    スクリプトの実行方法

    1. 上部メニューの「スクリプト作成(Scripts)」タブを選択
    2. 左上の「新規」ボタンでテキストを作成
    3. 上記のスクリプトを貼り付け
    4. 「実行」ボタン(再生ボタン)をクリック

    以下の記事でもスクリプトの使い方については説明しているので、分からなかった場合にはこちらもご参照ください。

    終わりに

    Blenderでは、Armatureとの関係を解いた後にもメッシュに残る頂点グループの整理が必要になることがあります。今回ご紹介したように、スクリプトを用いることでこの作業を効率化し、モデリングやリグの再設定などに集中することができます。

    よかったらシェアしてね!
    • URLをコピーしました!
    • URLをコピーしました!

    この記事を書いた人

    このサイトの管理人です。Blenderを主に映像制作やUnityを使った開発業務と組み合わせて使用しています。

    目次