前回記事の続きとなります。
bluebirdofoz.hatenablog.com
Unityに取り込んだダンスモーションをユニティちゃんのモーションとして利用してみます。
ちゃんと流用できています。ただ、微妙に動きがおかしいところがあります。
まずMMD for Unityの説明にあった「UnityとMikuMikuDanceでは線形補間の方法が異なる」のが原因と考えました。
・MMD for Unityの使い方
https://mmd-for-unity-proj.github.io/mmd-for-unity/howto.html
もしそうならば、線形補完をBlender上でやればよい訳です。
幸い、Blenderではモーションはおかしくなっていないので、この問題はBlender上でキーフレームを増やすことで解決できます。
ファイルサイズも増えますが、モデル自体に比べれば小さいです。
しかし自動で行う方法が分からなかったのでUWSCを使って全てのキーフレームを半自動の手動設定を行いました。
以下、UWSCの実行プログラムです。キーボード操作とマウス操作で等間隔にキーフレームを打ちこみます。
MMV(1120,500,100) CNT = 1 WHILE CNT < 324 KBD(VK_RIGHT,CLICK,100) KBD(VK_RIGHT,CLICK,100) KBD(VK_RIGHT,CLICK,100) KBD(VK_RIGHT,CLICK,100) KBD(VK_RIGHT,CLICK,100) KBD(VK_RIGHT,CLICK,100) KBD(VK_RIGHT,CLICK,100) KBD(VK_RIGHT,CLICK,100) KBD(VK_RIGHT,CLICK,100) KBD(VK_RIGHT,CLICK,100) SLEEP(0.1) KBD(VK_I,CLICK,100) SLEEP(0.1) BTN(LEFT,CLICK,1120,500,100) CNT = CNT + 1 WEND
もはや力技です。私自身の疲労の色が伺え始めます。
しかし更に問題が。モーションをよくみると、下半身の部分が動いていませんでした。
これはダンスモーションのキーフレームが「下半身」ボーンに割り当てられているのに、Unityのhuman mecanimの下半身認識は「腰」ボーンで行われているためです。
Unityのhuman mecanimの下半身認識を「下半身」ボーンに切り替えます。すると以下のエラーが発生しました。
human mecanimでは上半身ボーンの親ボーンは下半身ボーンでないとダメのようです。
確認してみると、mmd_toolsでBlenderに読み込んだモデルは確かに「上半身」ボーンの親が「腰」ボーンになっていました。
どんな影響が出るか、現状ではわかりませんが、「上半身」ボーンの親を「下半身」ボーンに変更します。
変更を完了し、改めてFBX形式で出力します。
今度は「下半身」ボーンをちゃんと設定して反映すると……。
やはりというか、ダンス時の上半身の動きがおかしくなりました……。
特にターンなどの腰を捻る動きの歪みが酷いことから、ボーンを変更した影響と見られます。
結局のところ、MMDのボーン構造とhuman mecanimのボーン構造に違いがあったと言う事なので、この違いをモーションとして上手くマージする手段が必要です。
Rigifyのボーン構造とMMDモデルのボーン構造を比較したところ。下半身部分のボーンが逆方向なのが分かります。
当然ながらMMDのダンスモーションはこの下半身ボーンが下方向である前提でボーンの位置回転キーフレームが設定されている訳です。
流石にこれは一朝一夕の知識と作業では修正対応できません。
今回のところは、BlenderからUnityへのモーション持ち込みについて一通り学ぶことができたのでよしとします。
MMDのダンスモーションをUnityに取り込むのは一旦保留ですね。