モーションの破綻の修正
記事作成日 2018/11/22
※注意
各ソフトウェアは、解説に使用されているものと完全に同一のバージョンをダウンロードして使用してください。少しでもバージョンが違うと、相性問題が発生することが多いためです。
1.概要
とりあえず作成・表示するで作成した動画は、一部のモーションが破綻していました。(後半になると顔面がホラー映画のゾンビのように崩れてきます)
これを修正します。
モーションの破綻のうち、物理演算に係る破綻を、俗に「荒ぶり」と呼びます。物理の荒ぶりは、パーツが押し合い続けること、関節部のパーツが角度制限で押し返され続けること等により発生します。
MMD/MMMの物理プルプルとの戦いの歴史:簡易にMMDドラマを製作する方法の研究 - ブロマガ
本来は、ツール(PmxEditor用あさってジョイントplugin、MikuMikuMoving用Motion Filter plugin等)や手作業でのモーション調整を試行錯誤しながら駆使しなければ修正できませんが、今回は、とりあえず物理演算エンジンのバージョンを変えてみます。
とりあえず作成・表示するで使用したMMD4Mecanimや、MMD(MikuMikuDance)のクローンソフトであるMMM(MikuMikuMoving)等には、Bullet Physics Engineという物理演算エンジンが搭載されています。
これにより、スカートのヒラヒラ等の表現を自動的にモーションに加えることができます。
なお、Unity本体はRigidbodyという別の物理演算エンジンを採用していますが、MMD4Mecanimを使用する場合は、pmxファイルをfbxファイルに変換するときに、MMD4Mecanimに内蔵されたBulletによって物理演算結果がfbxファイルに焼き込まれます。もちろん、MMD4Mecanim側で物理演算をオフにして、Unityにfbxファイルを読み込んだ後にRigidbodyの方を有効にすることも可能です。
つまり、Unity、MMD4Mecanim、MMMを併用した場合、Bulletの複数のバージョンとRigidbodyを切り替えて使用することが可能です。(MMD4Mecanimでは2.75と2.83の2つのバージョンを切り替えられるので、最大4種類の物理演算エンジンを利用可)
ちなみに、MMD(MikuMikuDance)にも物理演算機能がありますが、結果をモーションデータに焼き込むことができないので(MMD上で動画を出力する場合のみに使用)、Unityを使用する今回のケースでは関係ありません。
そもそも、MMMでは、これまでにリリースされたプラグイン等との互換性維持のためにBulletのバージョンが2.75のままであり、Bullet2.75はMMD4Mecanimでも使えるので、MMDの物理演算を試す必要はありません。
一方、MMMは、更新が頻繁であり(MMDは一度開発が終了し、その後、有志により後継としてMMMがリリースされました)、最新に近いバージョンのBulletを搭載しています。
2.MMMのインストール
MMM(MikuMikuMoving)は、本家MMDよりもインターフェースが複雑ですが、本家にはない機能(物理焼き込み機能等)も備えている、上級者用の高機能版です。
まずMMMによって物理演算結果をvmdファイル(モーションデータ)に焼き込み、それをUnityで読み込めば、MMD4Mecanimとは別のバージョンのBulletによる物理演算を利用できることになります。
とりあえず、MMMによる物理演算の結果を確認してみましょう。もしそれも破綻していれば、さらに他の物理演算エンジンも試します。
最初に、MMM(MikuMikuMoving)をインストールします。
mikumikumoving
からMikuMikuMoving(V2 ベータ版ではない方)
をダウンロードしてください。
Windows7以前であれば32bit版(ファイル名に64が入っていないもの)、Windows8以降であれば64bit版(ファイル名に64が入っているもの)の方がベターです(32bit版の方が使用できるプラグインが豊富ですが、Windows8以降だと再生時にエラーが発生する可能性があります)。
次に、ダウンロードしたzipファイルを解凍する前に、Windows標準エクスプローラでzipファイルのプロパティを開き、一番下にあるブロックの解除をクリックします。
これを行わなければ、起動時にエラーが出てMMMを起動できませんので、注意してください。
ブロックを解除したらzipファイルを解凍して、適当な場所にコピーしておきます。
3.MMMで物理演算結果を焼き込む
MMMを使用して、物理演算結果をvmdファイル(モーションデータ)にベイクします(焼き込みます)。
まず、インストールしたMikuMikuMoving.exeを起動してください。(通常はランタイムは自動的にインストールされますが、もしエラーが出て起動しない場合は、MMM同梱のReadme_JPN.txtを読んでランタイムをインストールしてください)
次に、メインメニューのファイル>モデル読み込みから、とりあえず作成・表示するでダウンロードした2B v1.04 (Kaine's outfit) (J&J Edit).Pmxを読み込みます。読み込めない場合は、2B v1.04 (Kaine's outfit) (J&J Edit).pmx(拡張子が小文字x3)にリネームしてください。
次に、画面左側のタイムラインのフレーム番号が0になっていることを確認してから、メインメニューのファイル>モーション読み込みから、とりあえず作成・表示するでダウンロードしたピンクキャットゴリマ式Z1.vmdを読み込みます。
次に、メインメニューの物理演算>常に演算をクリックします。 ※あらかじめ物理演算をオンにしておかないと、焼き込み時、最初に髪やスカート等が揺れた状態になってしまう等の不具合が生じます。(しかし、記事作成時点の最新バージョンでは、どちらにしても揺れてしまうようです)
次に、画面左上にあるフレームを0にしてから、メインメニューの物理演算>物理焼き込みをクリックします。選択ボーンのみのチェックは外してください。
このとき、フレームが0になっていないと、途中からモーションが焼き込まれてしまいますので注意してください。
モーションが早送り再生され、編集中データに物理演算結果が焼き込まれます。
次に、メインメニューのファイル>モーション保存をクリックします。
モーション保存ダイアログが表示されたら、
・出力ファイルの保存先フォルダは~\ピンクキャット\調整すみ、続くファイル名には別の名前(物理焼き込み済み_ピンクキャットゴリマ式Z1.vmd)を入力。
・フォーマット種別のVMDファイルを選択し、レイヤ統合のチェックを外す。
・出力設定の全てのキーフレームを選択。
・下のリストのAllをチェック。(全てにチェックが入ります)
の後、保存ボタンをクリックしてください。
これで、vmdファイルに物理演算結果が焼き込まれました。
4.焼き込み済みモーションデータの読み込み
物理演算結果が焼き込まれたvmdファイルをUnityに読み込みます。
読み込む前に、まず、Unityを起動した後、画面左上側のHierarchyのSampleSceneフォルダの中の2B v1.04 (J&J Edit)を選択し、キーボードのDeleteキーを押して削除します。
終わったら、2B v1.04 (Kaine's outfit) (J&J Edit)も同様に削除してください。
次に、画面左下側にあるProjectパネルのAssetsフォルダの中の2B v1.04 (J&J Edit)を選択し、キーボードのDeleteキーを押して削除します。
終わったら、2B v1.04 (Kaine's outfit) (J&J Edit)も同様に削除してください。
次に、画面左下側にあるProjectパネルのAssetsフォルダの中のピンクキャットを選択し、キーボードのDeleteキーを押して削除します。
次に、以前と同様の手順で、再び2B v1.04 (J&J Edit)、2B v1.04 (Kaine's outfit) (J&J Edit)の2つのキャラクターデータフォルダと、モーションデータフォルダ(ピンクキャット)を読み込み、fbxファイルへの変換を行います。
fbxファイルへの変換を行うとき、InspectorにMMD4Mecanimの変換設定画面が表示されたら、2番めのVMDの空欄には、
3.MMMで物理演算結果を焼き込む
で作成したvmdファイル(物理焼き込み済み_ピンクキャットゴリマ式Z1.vmd)をドラッグ・アンド・ドロップしてください。
また、上の方にあるBullet PhysicsのEnabledのチェックを外してください。
これにより、MMD4Mecanimによる物理演算結果のfbxファイルへの焼き込みが行われなくなります。(このため、もし物理演算結果が焼き込まれていない通常のvmdファイルを使用すれば、物理演算なしのモーションになります)
チェックを入れた場合、せっかく作成した物理焼き込み済みモーションデータが、MMD4Mecanimによる物理演算結果に上書きされてしまいますので注意してください。(MMD4Mecanimによる物理演算結果が優先されます)
fbxファイルへの変換が終わったら、以前と同様の手順通りに操作し、Sceneでモーションを再生して、物理演算結果が正しく反映されているかを確認してください。
スカート等が揺れていればOKです。(もし失敗していたらスカート等が全く揺れません)
確認が終わったら、以前と同様の手順で動画を出力して再生し、モーションの破綻がないかをチェックします。 ※Sceneでのモーション再生時には問題がなかったのに、動画を出力して再生すると破綻している場合もあるので、実際に動画を出力して確認するようにしてください。
上記手順通りであれば、後半の顔面崩壊が直っているはずです。
しかし、今度は髪が常にプルプル動くようになってしまいました。(別の荒ぶりが発生)
本来は、ツールや手作業でのモーション調整を試行錯誤しながら駆使しなければ修正できませんが、今回はMMD4Mecanim内蔵Bullet2.75(最初に使用した物理演算エンジン)だと髪の荒ぶりが発生しないことが分かっていますので、これを利用して解消します。
5.PMXエディタのインストールとボーン構成の把握
物理の荒ぶりを解消する下準備として、PmxEditorを使用し、キャラクターのボーンの構造を調べておきます。
まずダウンロード: とある工房
からPmxEditor_~.zip
をダウンロードしてください。
次に、ダウンロードしたzipファイルを解凍する前に、Windows標準エクスプローラでzipファイルのプロパティを開き、一番下にあるブロックの解除をクリックします。
これを行わなければ、起動時にエラーが出てPMXエディタを起動できませんので、注意してください。
ブロックを解除したらzipファイルを解凍して、適当な場所にコピーしておきます。
次に、インストールしたPmxEditor_x64.exeを起動してください。(通常はランタイムは自動的にインストールされますが、もしエラーが出て起動しない場合は、PMXエディタ同梱のreadme.txtを読んでランタイムをインストールしてください)
次に、Pmx編集ウィンドウのメインメニューのファイル>開くから、2B v1.04 (J&J Edit).pmxを読み込みます。
次に、Pmx編集ウィンドウのボーンタブを開き、左側のボーン一覧の項目をクリックすると、右側にボーン名と親ボーンがどのボーンかが表示されます。(同時に、PmxViewウィンドウで該当ボーンの位置が赤く表示されます)
これを繰り返し、左側のボーン一覧の中の全ての項目のボーン名と親ボーンを調べ、髪と親子関係になっていないボーン、および、髪と親子関係になっているボーンの2種類に分けて把握しておきます。
なお、該当ボーンに親ボーンがある場合、その親ボーンだけを把握しておけばOKです。(後でまとめて再帰的に読み込むことができます)
以下の一覧がその結果です。
・髪と親子関係になっていないボーン(58個)
下半身
左肩
右肩
head jaw
head eyelid upper right
head eyelid upper left
head nose tip
head nostril left
head eyebrow middle
head nose bridge
head cheek left 1
head cheek left 2
head lip upper middle
head lip upper left
head eyebrow left 1
head eyebrow left 2
head eyebrow left 3
unusedbkdf.002
head cheek left 3
unusedbkdf
head mouth corner left
head lip up adj
unusedye
unusedfor
unusedfor.001
unusedfor.002
head eyelid lower left
head eyelid lower right
head nostril right
head cheek right 1
head cheek right 2
head lip upper right
head eyebrow right 1
head eyebrow right 2
head eyebrow right 3
unusedbkdf.003
head cheek right 3
unusedbkdf.001
head mouth corner right
unusedye.001
unusedfor.003
unusedfor.004
head eye cor left
head eye cor right
右乳下
右乳上
左乳下
左乳上
右乳
左乳
胸
左足IK
右足IK
センター先
上半身2先
両目
左目
右目
・髪と親子関係になっているボーン(8個)
腰
上半身
上半身2
首
頭
グルーブ
センター
全ての親
これをメモしておきます。
6.部位ごとの物理演算エンジンの使い分け
4.焼き込み済みモーションデータの読み込みの前半と同様に、Hierarchy・Projectパネルそれぞれから、2つのキャラクターデータフォルダとモーションデータフォルダをいったん削除し、再度読み込んで、fbxファイルへの変換を行います。
fbxファイルへの変換を行うとき、InspectorにMMD4Mecanimの変換設定画面が表示されたら、まず一番右上にあるAdvanced Modeのチェックを入れてください。チェックを入れると、設定項目が大幅に増えます。
また、一番下の方にあるVMDの空欄に、3.MMMで物理演算結果を焼き込むで作成したvmdファイル(物理焼き込み済み_ピンクキャットゴリマ式Z1.vmd)をドラッグ・アンド・ドロップしてください。
また、VMDの少し上にFreeze Rigid Body Listという項目があるので、+Addボタンをクリックして、5.PMXエディタのインストールとボーン構成の把握で調べた66個の項目を入力してください。なお、髪と親子関係になっていないボーン(58個)は、右側にあるRecursivelyのチェックも入れてください。(チェックが入っていると、そのボーンに繋がる全ての子ボーンも再帰的に読み込まれます)
※すぐ下にあるFreeze Motion Body Listと間違えやすいので注意。
また、上の方にあるBullet PhysicsのEnabledのチェックを入れてください。これで、Freeze Rigid Body Listで指定したボーン以外のボーン、つまり、髪関連ボーンのみについて、MMD4Mecanim内蔵Bullet2.75による物理演算結果を焼き込むようになります。(髪以外はMMM、髪のみMMD4Mecanim)
変換が終わったら、以前と同様の手順で動画を出力して再生し、モーションの破綻がないかをチェックします。 ※Sceneでのモーション再生時には問題がなかったのに、動画を出力して再生すると破綻している場合もあるので、実際に動画を出力して確認するようにしてください。
後半になっても顔面が崩壊せず、かつ、髪がプルプルしないようになっていれば、モーションの修正は完了です。
2B v1.04 (Kaine's outfit) (J&J Edit)でも、上の操作を同じように繰り返します。
こちらでは、全ボーンに物理演算結果焼き込みを行うとMMD4Mecanimへの読み込みが失敗するので、頭ボーンのみに物理演算結果焼き込みを行ないます。手間減らしのため、上で作成した2B v1.04 (J&J Edit)の頭部分の物理演算結果焼き込みモーションを流用します。
上で作成した2B v1.04 (J&J Edit)用のvmdファイル(物理焼き込み済み_ピンクキャットゴリマ式Z1.vmd)を、2B v1.04 (Kaine's outfit) (J&J Edit)のMMD4Mecanimのfbxファイルへの変換設定画面のVMDの空欄にドラッグ・アンド・ドロップし、髪を除く頭ボーンの子ボーン(44個)を、Freeze Rigid Body Listで指定すればOKです。
ちなみに、物理演算結果を焼き込んだモーションデータのサイズが大き過ぎると、MMD4Mecanimで読み込めません。記録されているキーフレームの数が上限(約139万個までは動作確認済みなので、それより上)を超えると、fbxファイルへの変換中にコマンドプロンプトにエラーが一瞬出て、fbxファイルが生成されずに終了してしまいます。この場合、TIPSの「7.MMD4Mecanimで読み込めないモーションファイルのキーフレーム削減」を行う必要があります。
参考:
MMD/MMMの物理プルプルとの戦いの歴史:簡易にMMDドラマを製作する方法の研究 - ブロマガ
みくだん MMDとMMMの互換と差異
#1 初心者用 MMMで作るモーション講座 ~ダウンロードしよう!:げるPのブロマガ