MMDからC4Dへキャラクターを移植する時のあれこれ
前提
MMDモデルはモデルごとに規約があり、その中にはMMD以外のソフトウェアでの使用を禁止しているものもあります。
必ず事前にモデルの規約を確認し、問題がないか確認するようにしてください。
今回のデモでは、ドワンゴさんが提供しているアリシア・ソリッドちゃんを使用させていただきます。
また、この記事はMMDからCinema 4D(以下C4D)へモデルを移植し、かつアニメーションやポーズを手付けする人向けとなります。
mixamoやその他のものを用いてアニメーションをリターゲットする等が目的の場合は、こちらの記事が丁寧で参考になると思います。
概要
自分の中で腐らせてたMMDからC4Dへ移植する技術を忘れないようにするための備忘録。
また、こちらの記事(2回目)を見て触発されたため。
結論
■ツール:Blender / Unity + MMD4Mecanim
Unity + Mecanimで出力したfbxのメッシュにBlenderから出力したモデルのウェイトを転写。
その1:下準備
まずはじめに以下のものを準備します。
・Blender 2.8以降(mmd_tools or Cat Blender Pluginが動けば何でも可)
―mmd_tools 又は Cat Blender Plugin をプラグインとしてインストール
・Unity 2018以降
―MMD4Mecanimを事前にダウンロードしておく
今回確認した環境
・Blender 2.81a + Cat Blender Plugin
・Unity 2019.3.4f1 + MMD4Mecanim 20201105
その2:モデルを出力して合体する
下準備で準備した環境でまずはfbxデータを出力します。
Blender側はCat Blender Pluginで以下の設定で読み込み、fbxとして書き出します。
Unity側はpmxをAssetsに読み込んだ時点でfbxがその階層に生成されるので、それをエクスプローラーから引っ張ってきてリネームします。
・Alicia_from_Blender.fbx
(Scale 0.08がミソ。特にRemove doulesに関してはモデルによって致命的なエラーを引き起こすのでチェックしないこと推奨。Rename Bonesあたりはお好みで。書き出しはForwardを-Z ForwardとUpをY Upにするところだけを忘れずに)
・Alicia_from_Unity.fbx
(右クリックのShow in Explorerから対象のfbxがあるディレクトリを直に開けます)
その2.5:モデルを2種類書き出す技術的理由
今回はUnityとBlenderでモデルをそれぞれ書き出していますが、それには理由があります。
まず、それぞれのメリット/デメリットを比較した表が以下。
(MMD tools for C4Dも含まれているがR23から動かなくなってしまったので今回の検証では除外)
上から順に説明していきます。
・複数オブジェクトサポート
それぞれインポートしたモデルを比較するとわかりますが、Unityから出力したモデルの場合はオブジェクトの分割が維持されたままエクスポートされているのに対し、Blenderから出力したモデルの場合は1つのメッシュとして出力されています。
メッシュが1つの状態の場合だと、詳しい内容はモーフターゲットの項目で記述しますが、簡単に書くとファイル容量がでかくなるのと、頂点の増減を伴うモデルの調整が基本的に不可能になるので、可能な限りオブジェクトの分割は維持したい、といった感じです。
・軸方向のサポート
(左がUnityから出力したモデル、右がBlenderから出力したモデル)
上図を比較したとき、左側のモデルは基本的に緑の線が上方向に伸び、赤の線が右方向に伸びているのに対して、右側のモデルは赤・青・緑の線が色んな方向に伸びていることがわかると思います。
一見、左側のほうがきれいに見えますが、右側のモデルはボーンの方向に対してY軸が揃った状態になっています。
(左手の図。ボーンの進行方向に対して緑色の線が伸びていることがわかります。また、赤色の線が回転軸に対して垂直に伸びている(回転がX軸)事もわかります)
そして、手付でアニメーションを作成する場合は、大抵の場合において図の右側のモデルのほうが作りやすいです。
(こんな感じで回転軸に沿って動きをつけられるので…)
コントローラーを取り付けていくときにもこの部分が大きく関わってくるため、この部分はかなり大きなファクターとなっております。
・IK/IK Dynamicsの生成
この部分に関してはどうしてもfbxでは持っていけないので手動で何とかします。
・モーフの文字化け
R20以前ではモーフに2byte文字を使っていると文字化けが発生していましたがR21以降では発生しなくなったので関係ない項目になりました。
・モーフターゲットの自動生成
ここは推測も入ってしまう部分なのですが、C4Dではモーフが入ったfbxを読み込む際に、モーフをメッシュに変換しているようで、このようにモーフの数だけメッシュが生成されてしまいます。(一部抜粋)
(上がUnity、下がBlender)
そのため、先の項目で説明した複数オブジェクトサポートをしてない場合、画像下のように大量のポリゴン数を持った大量のオブジェクトが生成される事態が発生します。
これを放置していると、アニメーション作業時のパフォーマンスやデータ容量に影響を及ぼしてしまいます。
また、頂点の増減を伴う調整が発生した際に下の場合だとモーフの影響によってすべてが破綻してしまうため困難なのに対し、上の場合ではモーフが入ってないオブジェクトに関しては調整が可能のため、融通がききやすいという利点もあります。
・unity humanoid
割愛。
つまりUnityから書き出した時のいいところとBlenderから書き出した時の良いところを合体させてより良いモデルにしよう、ということを今からしていきます。
その3:ウェイトの転写
前述の点から、以下のようにいいとこ取りをしたモデルの作成を目指します。
というわけで、Blenderからのモデルデータ(以下B)のボーンとスキンをUnityからのモデルデータ(以下U)に転写する工程に入ります。
とは言えやること自体は非常に単純で、メニューのキャラクター→マネージャー→VAMPを使ってBのジョイントウェイト/Joint WeightsをUのオブジェクトに転写/Transferするだけです。
(空間/Spaceはグローバルにすること)
ソースはB、ターゲットはUのものを指定し、これをすべてのUのオブジェクト(この場合だとU_Char_0からU_Char_3)に行います。
転写後には必ずB側のボーンを動かしてみて転写がうまく行っているか確認しましょう。
あとは不要になったデータを削除してこんな感じに整理すれば作業終了です。
最終的にはこんな感じになります。
その4:最後に
余裕があったらこの後のテクスチャ/シェーディング工程とコントローラーの仕込み作業(リギング)も書きたいですけど、一旦書き出したいことは書き終えたので満足です。