見出し画像

【3D】MMD モーションを AutoRigPro に Remap する

概要

MMD のモーションデータ (.vmd) を Blender アドオンである AutoRigPro の Remap 機能を用いて別のRig へと転送する方法を調査した。
Remap を簡単にするため MMD の標準ボーンと AutoRigPro ボーンの対応関係を示すプリセットを作成したので配布する。


手短に

AutoRigPro の Remap 機能についての解説が必要ない方は、文末で配布している MMD ボーンと AutoRigPro ボーンの対応プリセット (.bmap) をダウンロードして Import してください。

使用するソフトウェアバージョン

  • Blender: v3.5.0

  • AutoRigPro: v3.68.33

  • blender_mmd_tools: v2.8.1 

AutoRigPro Remap 機能について

AutoRigPro の Remap 機能はアニメーション Retarget 用の機能であり、ボーンの対応関係を入力することで、異なる構造の Rig 間でアニメーションデータを転送するものである。

今回は MMD 形式の Rig から AutoRigPro 形式の Rig へと MMD モーションデータを転送したいため、これらの Rig の間の対応関係を明らかにすればよい。

ただし、アドオン特有の注意事項があるため、それらについても解説する。

MMD モデルとモーションデータの Import

はじめに Blender に MMD モデル (.pmx) を Import する。
Import には blender_mmd_tools を使用する。

今回のテストにはニコニ立体ちゃんを使用した。

.pmx インポート

次に、mmd_tools のパネルからモーション (.vmd) を Import する。

.vmd インポート
キーフレームの確認

MMD ボーン名を英語にする

この点は注意が必要なポイントである。
MMD ボーン名は日本語だが、AutoRigPro Remap は日本語のボーンを正しく扱うことができない。
幸い mmd_tools にはボーンの翻訳機能が付いているため、これを利用する。

対象となる Rig オブジェクトを選択した状態で mmd_tools のパネルから Translate を選択する。
ポップアップの Modes: Blender NamesAllow Fails にチェックを入れて OK を押せば翻訳が完了する。
ただし、すべてのボーンが正しく翻訳できるわけではなく、部分的に日本語が残ってしまう場合がある。
しかし、MMD 標準ボーンのみを対象とする場合、これは実際には問題にはならないはずである。

ボーン名の翻訳

Remap に MMD と AutoRigPro ボーンの対応を入力

MMD 側の準備ができたので、AutoRigPro Remap 側の作業に移る。

なお、Remap プリセットを利用する場合はこの章の情報は不要である。
次の 「Remap プリセットを使用する」章に進んでください。

AutoRigPro の Remap パネルで、Source Armature に MMD Rig, Target Armature に AutoRigPro Rig を選択する。
その状態で Build Bone List を押すと、ボーンの対応リストが現れる。

Build Bone List

なお、この時日本語ボーンが含まれているとエラーメッセージが表示されるが、必要な標準ボーンはリストアップされているはずなので気にしなくてよい。

日本語ボーンが見つかるとそこでリストアップが終わる

リストアップされたボーンそれぞれについて Source Bones (MMD) と Target Bones (AutoRigPro) の対応関係を指定していく。

対応関係を以下に列挙する。

ボーン対応表一覧

Arm FK, Leg IK で制御する場合の対応関係。
左側 (L) のみ記載。右側 (R) も同様。
指ボーンは第一関節のみ記載。第二・第三関節も同様にマッピングする。

凡例
MMD ボーン英名(和名): AutoRigPro ボーン名

  • ParentNode(全ての親): c_pos

  • Center(センター): c_root_master.x

  • UpperBody (上半身): c_spine_01.x

  • UpperBody2 (上半身2): c_spine_03.x

  • Neck(首): c_neck.x

  • Head(頭): c_head.x

  • Shoulder_L(左肩): c_shoulder.l

  • Arm_L(左腕): c_arm_fk.l

  • Elbow_L(左ひじ): c_forearm_fk.l

  • Wrist_L(左手首): c_hand_fk.l

  • Thumb1_L(親指): c_thumb2.l

  • IndexFinger1_L( 左人指1): c_index1.l

  • MiddleFinger1_L(左中指1): c_middle1.l

  • RingFinger1_L(左薬指1): c_ring1.l

  • LittleFinger1_L(左小指1): c_pinky1.l

  • LowerBody(下半身): c_root.x

  • Ankle_L(左足首): c_foot_ik.l

Remap プリセットを使用する

Remap プリセットを使用して、一括でボーンの対応関係を設定する。
文末の GitHub リポジトリから .bmap ファイルをダウンロードしておいてください。

Remap の Mapping Presets -> Import からダウンロードした .bmap ファイルを読み込めば対応関係が設定されます。

Remap プリセットは二種類用意していて、脚の IK/FK 制御方法が異なりますので目的に合わせて使い分けてください。

  • MMD (FK Arms FK Legs).bmap: 腕を FK, 脚を FK 制御

  • MMD (FK Arms IK Legs).bmap: 腕を FK, 脚を IK 制御

Remap を実行する

ボーンの対応関係が設定出来たら Remap を実行する。
実行前に以下の二つの処理を行っておく。

1. Auto Scale
ボーンの Scale が補正される。

Auto Scale 実行後

2. Redefine Rest Pose
Rest Pose を Target に合わせる。
Redefine Rest Pose を押して現れる Dialog で Preserve, Rest Pose をチェックして OK。
これで実際の Rest Pose は保持したまま、仮想的に Rest Pose を編集できる。

腕ボーンを選択して、Copy Selected Bones Rotation を選択。
これで回転が自動的にコピーされる。
脚についても同様に行いたいのだが、IK は切っているはずなのに Copy が行われないため、手動で Target に合わせて回転させる。
編集が完了したら Apply を押す。

ここまで準備ができたら Re-Target を押して、モーションの転送ができるはずである。

アニメーションキーフレームの Reduction

Remap を行うとすべてのフレームにキーフレームが打たれるため、編集を行うことが難しい。
以下の Tutorial に従ってキーフレームを Reduction することが可能である。

1.  Preferences -> Interface -> Developer Extras にチェックを入れる
これを入れないと自分の環境では Ghost Curve のアイテムが登場しなかった。

2. F3 キーから Create Ghost Curves を検索して実行

3. 同じく F3 キーから Decimate Keyframes を実行

Decimate 前

Decimate 後

MMD UuuNyaa Tools を利用してみる

MMD UuuNyaa Tools に AutoRigPro Rig に直接 MMD モーションデータを適用できる機能があるため試してみた。

以下の Tutorial の通りに行って AutoRigPro でも .vmd を Import を行う。

ただ、残念ながら自分の環境 (UuuNyaa Tools v1.7.2) では Apply MMD Pose を行うと Rest Pose が崩れてしまい、正しくモーションを適用させることができなかった。

一応、AutoRigPro のリグを手動で MMD の Rest Pose に近づければモーションの適用自体は可能であった。
Experimental の機能であるため、今回の調査はここまで。

配布物

以下の GitHub リポジトリで Remap プリセットファイルを配布する。

色々書きましたが、筆者は Rigging の勉強を始めたばかりで、AutoRigPro も MMD も今回初めて触りました。
Remap プリセットの編集・再配布等は許可なく行ってもらって構いませんので、間違っている部分があれば修正をお願いします。

この記事が気に入ったらサポートをしてみませんか?