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をコピーしました