ぼっちプログラマのメモ

UE4とかVRとかについて書いたり書かなかったり。

UE4でMMDのモーションを使ってみる

UE4 4.5から、スケルトンが異なっていてもアニメーションを流用できる
機能が追加されました。
Unreal Engine | アニメーション リターゲット(異なるスケルトン)

今回は、この機能を使ってMMDのモーションをUE4のSkeltonMeshに
適用してみました。(これまではスケルトンの違いから無理でした)

f:id:pafuhana1213:20141018213803j:plain

f:id:pafuhana1213:20141018200536p:plain
このコンテンツは、『ユニティちゃんライセンス』で提供されています



MMDモデル・モーションのFBX化

まずは、配布されているMMDモデル・モーションをUE4上で扱えるように
FBX形式に変換します。
MMDモデルはMMD標準モデルPMXパック - BowlRoll
モーションは以下の動画で配布されているものを使用しました。


FBXへの変換は、MMD4Mecanimに含まれているpmx2fbx.exeを使用しました。
MMD4Mecanimの配布ページ:Stereoarts Homepage

pmx2fbx.exeの使い方は簡単で、引数にモデル(.pmx)と
モーション(.vmd)を渡すだけです。引数の与え方はグーグル先生に聞いて下さい。
itecbook.com » exeに引数を渡して実行する方法

これで、モデルがあった場所に変換されたFBXファイルがある筈です。
そのファイルをUE4に読み込ませます。モデルとモーションの読み込みについては
以下の記事が参考になると思います。
UE4でゼロからユニティちゃんを表示させるまで - Let's Enjoy Unreal Engine


リグの設定

異なるスケルトンを持つキャラクター間でアニメーションを流用するためには
その橋渡しになるリグの設定を行う必要があります。

リグの設定は以下のサイト、または@housakusleepingさんが
作成された解説動画を参考になると思います。
Unreal Engine | アニメーション リターゲット(異なるスケルトン)

この設定は、モーション流用元・先で行う必要があります。

一度設定すれば、そのリグの設定が行われているスケルトンを
使用している全モーションが使いたい放題になります。
根気のいる作業ですが頑張りましょう


MMDモデルのリグ設定に関して

MMDモデルを変換したFBXファイルのスケルトンなのですが、
ボーン名が日本語が使われているせいで文字化けしています
なので、リグの設定はこんな感じになります。日本語でおkです。
f:id:pafuhana1213:20141018204348j:plain

ケルトン編集画面でボーン位置を確認することも出来ますが、
かなり面倒です。心が折れます。
f:id:pafuhana1213:20141018205139j:plain

そこで、PMXエディターを使って文字化けしていないボーン名を確認します。
このボーン名と頭にある番号を使って、UE4側で文字化けしているボーン名を
解読します。
PMXエディター配布先:ダウンロード: とある工房
f:id:pafuhana1213:20141018205345j:plain

一度設定すれば、pmx2fbx.exeに渡すモーションファイルを変えることで
使用できるモーションアセットを量産できます。
超根気のいる作業ですが頑張りましょう。

基本ポーズの調整

ルールが決まっているのかは知りませんが、MMDモデルの
基本ポーズはA-Poseが使われています。

なので、T-Poseが使われているUE4標準のスケルトンアセットや
Unityちゃんのスケルトンアセットにリターゲットすると、
腕まわりのモーションがおかしくなります。

この問題を解決するために、MMDモデルの基本ポーズをT-Poseに
変える必要があります。
方法は、以下のサイトの「基本ポーズをリターゲットする」を参照して下さい。
Unreal Engine | アニメーション リターゲット(異なるスケルトン)
f:id:pafuhana1213:20141018210939j:plain


リグの調整

ここまで出来たら、スケルトンのリターゲットをしてみましょう。
モーションが流用先のフォルダに生成されていると思うので、早速再生してみましょう!
f:id:pafuhana1213:20141018211455j:plain
おそらく、モデルが恐ろしいことになっていると思います。

この問題を解決するためには、ボーン移動の設定を変更する必要があります。
以下のサイトの「調整をリターゲットする」を参照して下さい。
Unreal Engine | アニメーション リターゲット(異なるスケルトン)

参考までに、今回動画で用いたアセットでは、
肩・足・首のボーンに対して、↑の対応をしました。
Unityちゃんの場合だと、以下のボーンが対象になります。

  • Character1_LeftUpLeg
  • Character1_RightUpLef
  • Character1_Neck
  • Character1_LeftShoulder
  • Character1_RightShoulder

モーションが上手く再生されない時は、まずこの調整を行うといいと思います。
それでも解決しない場合は、リグのボーン設定が間違っていないか確認します。
それでもダメな場合は、妥協するか諦めましょう。

今回の動画作成では、以下の動画で配布されているモーションは
指周りが上手くいかなかったので諦めました。
[MMD] ミス・モノクローム「ポーカーフェイス」 [モーション配布] ‐ ニコニコ動画:GINZA



ここまでの作業で、とりあえずモーションが正常に使えるようになっていると思います。
ただし、表情モーフはないので表情固定だったり、Unityちゃんのように
独特の髪型の場合だと、髪が揺れなくて結構違和感あると思います。
この辺りを表情モーフパラメータの調整や
物理の適用、専用リグの作成などで解決するのが、今後の課題かなと思います。