今回はBlendeのRigifyで作ったアニメーションを、このシンプルな骨格でfbxエクスポートできるようにします。

なんでそうするかと言うと
ふつうにエクスポートした場合
意図してないボーンが入るというか、すごいゴチャゴチャした構造で書き出されるんですね。

動きを見るだけならこれでも問題ないんですが、
Maya・Unityなど他のソフトで編集しようものなら、カオスすぎて手に負えなくなる。
なのでエクスポート専用ボーンをRigifyに仕込んで、超シンプルな骨格でエクスポートしようという作戦です。
このシンプル骨格にして以来、他のソフトへの移植がずっと楽になりました。
関連記事 Blender→Mayaにモデル・ボーンを移植する
関連記事 BlenderのアニメーションをMayaでリターゲット
エクスポート用ボーンを作る
メタリグからエクスポート用ボーンを作っていきます。

メタリグをコピーします。
オブジェクトモードでメタリグを選択して、ビューポート上で Ctrl+D → Enter 。
「metarig.001」ができます。

この「metarig.001」をエクスポート用のアーマチュアにします。
名前を「export」に変えておきます。

export用アーマチュアにrootボーンを追加します。
export用アーマチュアを選択 > 編集モード > 追加 > 単一ボーン

でかいボーンができます。

これをrootボーンにするので「root」にリネームします。

ボーンの親子構造が
root:親
spine:子 になるよう直します。
spine → root の順番でボーンを複数選択 > Pキー >オフセット保持

アウトライナを見て、rootの中にspineが入ってればOK。

rootボーンがデカすぎるので小さくします。
編集モードでrootボーンを選択して、
X=0
Y=0.1
Z=0 を入力。

※rootは座標情報だけあればいいボーンなので、長さは適当でOK。
ただしMayaと違って長さ0にするとBlenderを閉じたら消滅するので0にはしない
rootがちっちゃくなった

これでエクスポート用ボーンができました!
次はこのボーンをリグに仕込んで動かせるようにします。
エクスポート用ボーンをリグに仕込んで動かす
exportボーンがDEFボーンと同じ動きをするようにコンストレイントを入れます。
ボーン1個ずつやるのは面倒なのでスクリプトで一括でやります。
テキストエディターを開きます。

新規テキストを作成。

下記のスクリプトをコピペします。
import bpy
# 設定
EXPORT_ARMATURE_NAME = "export" # exportアーマチュアのオブジェクト名
RIG_ARMATURE_NAME = "rig" # rigアーマチュアのオブジェクト名
EXPORT_PREFIX = "" # exportボーンのプレフィックス(なければ空文字)
RIG_PREFIX = "DEF-" # rigボーンのプレフィックス
def add_copy_transforms():
export_obj = bpy.data.objects.get(EXPORT_ARMATURE_NAME)
rig_obj = bpy.data.objects.get(RIG_ARMATURE_NAME)
if not export_obj or not rig_obj:
print("ERROR: アーマチュアが見つかりません")
return
# ポーズモードに切り替え
bpy.context.view_layer.objects.active = export_obj
bpy.ops.object.mode_set(mode='POSE')
count = 0
skipped = 0
for pose_bone in export_obj.pose.bones:
bone_name = pose_bone.name # 例: "tail.001"
# 対応するDEFボーン名を組み立て
target_bone_name = RIG_PREFIX + bone_name # 例: "DEF-tail.001"
# rigアーマチュアにそのボーンが存在するか確認
if target_bone_name not in rig_obj.pose.bones:
print(f"SKIP: {target_bone_name} が rig に見つかりません")
skipped += 1
continue
# 既存のCopy Transformsコンストレイントを削除(重複防止)
for c in pose_bone.constraints:
if c.type == 'COPY_TRANSFORMS' and c.name == "Copy DEF Transforms":
pose_bone.constraints.remove(c)
# コンストレイントを追加
constraint = pose_bone.constraints.new('COPY_TRANSFORMS')
constraint.name = "Copy DEF Transforms"
constraint.target = rig_obj
constraint.subtarget = target_bone_name
print(f"OK: {bone_name} → {target_bone_name}")
count += 1
bpy.ops.object.mode_set(mode='OBJECT')
print(f"\n完了: {count}本追加, {skipped}本スキップ")
add_copy_transforms()
スクリプトの定数部分は、必要に応じて書き換えます。
4行目 “export” さっき作ったexport用アーマチュア名
5行目 “rig” リグのオブジェクト名
自分のリグに合った名前に書き換えたら、スクリプト実行(▶ボタン)をクリック。

ちゃんとスクリプトが効いたか確認します。
リグをポーズモードで動かして、exportボーンが一緒に動いてれば成功。

ただしrootボーンは対応するDEFボーンがないので動きません。
そのため手動でボーンコンストレイントを追加します。
リグにrootボーンをコンストレイント
ポーズモードでrootボーンを選択。

ボーンコンストレイント > ボーンコンストレイントを追加 > トランスフォームコピー

ターゲット:リグのアーマチュア名
ボーン:リグのrootコントローラー にします。

これでrootボーンがrootコントローラーと同じ動きをします。

試しにリグを動かしてみて、
全部のexport用ボーンがリグで動くようになってればOK。

ボーンだけFBXにする場合は、これで完成!
モデルもFBXにしたい場合は、モデルのウェイトをexport用ボーンに割り当ててください。
エクスポート用ボーンをFBXに書き出す
あとはexport用ボーンを選択してFBXエクスポートするだけです。
ファイル > エクスポート > FBX

エクスポートの設定「アニメーションのベイク」に✓を入れるのを忘れないように。

以上、シンプルな骨格でアニメーションFBXを書き出すやりかたでした。