はじめに
BlenderでFBXファイルをインポートした際、特に「リーフボーン(Leaf Bones)」と呼ばれる末端ボーンが、自動的にアーマチュアに追加されることで、リグが複雑化し、作業の妨げになることがあります。
リーフボーンは通常、アニメーションには使用されない補助的なボーンであり、多くの場合、インポート後に不要と判断されて削除されます。しかし、これらを1本ずつ手作業で削除するのは大変です。
本記事では、そんなリーフボーンを不要にも関わらずインポートしてしまったときに、Pythonスクリプトを使って不要なリーフボーンを一括削除する方法をご紹介します。
リーフボーンとは?
リーフボーン(Leaf Bone)とは、ボーン階層の末端に追加される補助的なボーンです。
BlenderでFBXをインポートする際、「リーフボーンを無視」のチェックをしなかった場合には自動的に追加されます。また、”_end” や “leaf” といった名前がつけられることもあります。
これらのボーンはアーマチュア構造の完全性や他ツールとの互換性を目的としたもので、アニメーションには直接関与しないことがほとんどです。
そのため、例えば以下のような場合に不要なノイズとなり得ます。
- アーマチュア構造が煩雑になり、作業がしづらくなる
- リグを軽量化して整理したい
- ウェイトペイントやポーズモードでの操作時に混乱を招く
インポート時に「リーフボーンの」のオプションを無効にすれば回避できますが、すでにインポート済みのデータには適用されません。そのため、後からまとめて削除できる手段があると便利です。
スクリプト:子を持たないボーンを一括削除
「リーフボーンだけを抽出して削除する」と聞くと難しそうに感じますが、実際にはもっとシンプルに考えることができます。
Blenderにおいてリーフボーンは、すべて階層構造の末端に位置する「子を持たないボーン」です。つまり、子を持たないボーンを一括で削除する処理を行えば、そのままリーフボーンをまとめて削除できます。
そこで、以下のPythonスクリプトをBlenderのText Editorから実行すると、アクティブなアーマチュアの中で子を持たないボーン(リーフボーン)が一括削除されます。
import bpy
# アクティブオブジェクトがアーマチュアであることを確認
armature = bpy.context.object
if armature and armature.type == 'ARMATURE':
# 編集モードに切り替え
bpy.ops.object.mode_set(mode='EDIT')
edit_bones = armature.data.edit_bones
# 子を持たないボーンを削除
for bone in list(edit_bones):
if not bone.children:
edit_bones.remove(bone)
# オブジェクトモードに戻す
bpy.ops.object.mode_set(mode='OBJECT')
else:
print("アクティブなアーマチュアが選択されていません。")
実行手順
- 削除したいリーフボーンを含むアーマチュアを選択します。
- [Scripting] (スクリプト作成)タブを開きます。
- 新規テキストを作成し、上記のスクリプトを貼り付けます。
- “Run Script”(下図右上・再生マークのボタン) をクリックして実行します。

注意点
- このスクリプトは、すべての子を持たないボーンを削除します。
- 必要な末端ボーンがある場合は、事前に確認してください。
- 削除したボーンに関連付けられていた頂点グループが不要になった場合は、メッシュ側のグループ整理も忘れずに行いましょう。
おわりに
リーフボーンは他ツールとの互換性の側面で必要になるケースもありますが、Blender上では不要になることも多く、アーマチュアやリグをを整理する上で邪魔になることがあります。
インポート時に外しておければ良いのですが、つい忘れてしまうケースもあるので、そんな場合には今回ご紹介したスクリプトを活用すれば、手間なく不要なリーフボーンを一括で削除でき、リグ構造をスッキリと保つことができます。
コメント