最近は、UE4で作るゲーム用のキャラクターモデルをどうやって用意しようかアレコレ考えてます。
以前の記事で、DAZ StudioからUE4に持ち込む方法は試しており、動画も上げてます。
最初はこれでいいやと思ってましたが、自作ゲームの世界観を考えるにつれて、もうちょっとアニメ調のキャラが欲しいな…と思い直して、VRoid Studioを試してみる事にしました。
VRoidは以前のバージョンではなんかクセのある顔立ちだな…とかちょっと思ってましたが、去年11月の正式リリースでは以前よりクセのないスッキリした顔立ちが作れる感じになってました。
髪形や目、衣装のプリセットも豊富に揃ってきていて、自分好みのキャラモデルを作れるソフトとしてかなり完成度高い感じになって来てます。
VRoidは無料でこれだけのモデルが作れるにも拘わらず、出力したモデルは商用利用など含めて自由に利用できるところがすごいです。つまり、自作ゲームや漫画のキャラとしても利用可能です。
ただし、ベータ版では素体モデルやサンプルモデルはCC0で完全に自由に使用できるライセンスでしたが、正式版で作ったモデルはCC0では無い点に注意してください。
主に違う点としては、VRoidから出力したモデルを使って、VRoidと競合するようなキャラメイキングできるアプリを作る場合はpixivに問い合わせてライセンスを受ける必要があります。恐らく主人公キャラのキャラメイクができるようなゲームの場合もこれに当てはまりそうですが、正確なところは実際に利用規約をよく読んでいただいて、pixivに問い合わせて確認してください。
VRoid Studioのサンプルモデルに利用条件はありますか?
VRoid Studio正式版で作成したモデルは商用利用できますか?
VRoidのキャラをUEに入れる事自体は簡単
さて、VRoidで作ったVRM形式のキャラモデルをどうやってUEに入れるのか?というと、はるべえさんが開発してくださってる素晴らしいVRM4Uを導入すれば、サクッとできます。
ただし、VRM4UはVRMモデルのボーンをEpicスケルトンに変換する事はしてくれません。
何故なのか?というと、そもそもVRMフォーマットというのはモデルのボーン構造が厳密に決まってなくて、モデルによってボーン構造がバラバラですから、一律の処理で変換する事が不可能だからだそうです。(VRoidから出力したVRMについてならボーン構造は常に同じですが、VRMフォーマットはVRoid以外でも使われています)
さらに、仮にそれをやったとしても、髪とかスカートとか揺れ物系ボーンがどんどんEpicスケルトンに追加されたりしてってコンフリクトして問題が起きそうという話もあるそうです。
というわけで、EpicスケルトンのアニメーションをVRMモデルに適用したくても、スケルトンに互換性がありませんから、アニメーションをリターゲットする必要があります。
UEは建前としてはどんなスケルトンでもゲームが作れるとしていますが、とは言えマーケットプレイスのアセットでは事実上の標準としてほぼ全てEpicスケルトンが使用されています。
ですからEpicスケルトンじゃないモデルは人権無いみたいな所があるっちゃあるかもしれません。
「でもEpicスケルトンじゃなくてもアニメーションをリターゲットすりゃいいだけでしょ?」と私も最初はそう思ってました。
しかし、実際にマーケットプレイスで入手したゲームテンプレートのキャラクターをVRMモデルに差し替えようとしたら、アニメーションブループリントをリターゲットしただけでは正常に動作しませんでした。
何故なら、例えばブループリント内でIK処理が書かれてる場合、ボーン名が直接指定されてますので、VRMモデルはEpicスケルトンとボーン名が異なりますのでエラーが起きます。
他にもTPSゲームではマウスカーソルの視点の動きに合わせてSpine(背骨)ボーンを直接回転させたりする処理が書かれたりしますが、こういうのもEpicスケルトン以外ではモデルによってボーン回転軸とかが異なるのでちゃんと動いてくれません。
要するに、マケプレアセットはEpicスケルトン前提で作られてるので、そうじゃないスケルトンだとアレコレ壊れてしまうので、ブループリントの処理を読み解いて自力で色んな所を修正して回るハメになります。
しかし、他人のブループリントなんて読み解こうとしてもほとんど理解不能です。大抵の場合はマトモにコメントも書かれてません。かなり地獄めいてます。
という訳で、チンプンカンプンなブループリントをどうこうするよりは、VRMのスケルトンをEpicスケルトンに変換さえできればいいわけで、そっちでどうにかならないか方法をググりました。
先に結論を書くと、簡単にできる方法は今のところ無いみたいです。
失敗した方法
まず、インポート済みのVRMモデルにEpicスケルトンを割り当てようとしても、「ボーン名が全然一致してないのでダメです」と言って怒られます。
融通が効かないなと思いますね。Unityだったら大抵よしなに融通してくれる(それらしいボーン名なら一発でHumanoidに自動変換。メチャクチャなボーン名でも手動でボーンをマッピングすれば大丈夫)というのに。
しかし、VRoidのVRMはボーン構造自体はEpicスケルトンと一致してるように見えます。
というわけで、試しにVRMのボーン名をEpicスケルトンと同じになるようにリネームしてみました。
方法としては、VRoidから出力されたVRMを、直接UEに入れずに、一旦UniVRMを使ってUnityにインポートして、ボーンをリネームしてからまたエクスポートしてUEに入れてみました。
(こんな風にUnityならエディタ上でサクッとボーンのリネームとか調整できちゃうのに、UEはその辺が完全に隠蔽されててエディタ内で弄れない。あくまで「そういうのはDCCツール(BlenderとかMaya)側でやってください」というスタンス。やっぱり融通が効かない)。
ちなみに最初はUnity使わずにUEに入れたVRMをFBXエクスポートしてBlenderに入れてみましたが、UEからエクスポートしたFBXは複数マテリアルの割り当て情報が消えてるみたいで使い物にならないようでした。
というわけでUnity上でボーン名リネームしたVRMをUEに入れてからEpicスケルトンを割り当ててみたら、ちゃんと割り当てられました!
しかし、残念ながら見た目が無残に崩壊してしまいました。
つまり、単にボーンの階層構造とボーン名が一致してるだけではだめで、ボーンの回転とかまで完全に厳密に一致してないとEpicスケルトンにはならないらしいという事です。
この方法は失敗ですね。
しかし、逆に聞きたいんですが、たとえDCCツールでイチから自作したモデルだとしても、そこまで完全にEpicスケルトンと一致したモデルを作るのなんて無理ゲーじゃないですかね?
BlenderからEpicスケルトン互換のモデルを出力する方法
実際、自力でBlenderからEpicスケルトン互換のモデルを出力する方法をググっても情報が出てきません。無理ゲーだから誰もやってないようです。それに、Epicスケルトン互換にできなくても最悪リターゲットすりゃいいからという風潮です。
ただし、有料Blenderアドオンを使えば可能であるそうです。
一つ目のアドオンはAuto-Rig Proです。
https://blendermarket.com/products/auto-rig-pro
価格はライト版が19.5ドル、フル版が40ドルです。ただし、UE向けに出力する機能はフル版でしか使えません。
Auto-Rig Proがどういうアドオンか?というと、ほぼボタン一発で3Dモデルにスキニングとリグを入れてくれるという超便利アドオンです。
このアドオンの追加機能としてゲームエンジン向けの出力機能も充実しているというわけです。
もう一つのアドオンは、Uefyです。
Uefyの価格は、人型モデルだけ使用できるライト版は無料で、動物とか車、ドラゴンも出力できるプロ版が30ドルです。
Uefyがどんなアドオンか?というと、RigifyというBlenderの標準の方法でリギングされたモデルをUE向けにエクスポートすることができるアドオンです。
Auto-Rig Proが全自動リギングだったのに対して、Rigifyは手動でリグを入れる感じになります。
というわけで、BlenderからEpicスケルトンを出力する方法をググると大抵はAuto-Rig ProかUefyを使う手法が出てきます。
BlenderからUnrealEngineへ!モデルをUE4のスケルトンへ合わせる方法「AutoRigPro」編
しかし、そもそも論として、標準のスケルトン互換のモデルを作りたいだけなのに、わざわざこういう有料アドオンを使わない限り、手動だとほぼ不可能なゲームエンジンっておかしくないですか?(まあEpicに言わせれば素直にリターゲットしろという話かもしれないけど)
そして、結局のところVRMモデルをEpicスケルトンに変換する事は、これらのアドオンがあったとしても不可能です。これらのアドオンはゼロベースから作法に沿ってスキニングとリギングをする必要があって、自作モデルならいいですが、すでに独自にスキニングされてあるモデルをUE向けに出力してくれるものではありません。
いや、厳密に言えばAuto Rig-Proを使ってVRoidのVRMをEpicスケルトンで出力してる人達もいるっちゃいます。
元々関節に角度の付いたモデルがAuto-Rig Pro変換時に関節が変な方向を向くのを修正する
「な~んだ、できるんじゃん」と思われるかもしれませんが、これらの方々は、一旦VRMのボーンとスキニングを破棄してから、Auto Rig-Proで自動スキニング、リギングし直す、という凄まじい方法をやってます。
せっかくVRoidで出力したVRMには最初から完全なスキニングが入ってて、さらに揺れ物設定まで入れてくれてるというのに、この方法だと全部やり直しになってしまって個人的にはもったいなと思います。
まあ、もったいなかろうが何だろうが、これ以外に方法が無さそうですから仕方ないんですが…。
もうちょっと何とかなる方法ないんですかね…?
一つだけ見つけた良さげな方法は、こちらの動画です。
こちらの方のスクリプトを使うと、Blenderに入れたVRMにRigifyのリグを適用できるそうです。
もしかするとこれでUefyからEpicスケルトンで出力できるようになるかもしれません。
ただし、動画コメントによると、動画ではベータ版のVRoidを使ってましたから、現在のVRoidでは上手く動作しないらしく、修正も難しいそうです。
消えてしまってた記事をInternetArchiveからサルベージしたものですが、こういう情報もあります。↓
VRoid Studio 0.6.4 のモデルに Rigify(2.80)を適用する(腕・脚・背骨)
ちょっと私はRigifyには詳しくないので手に負えなさそうなのでやってませんが、この記事を読んだ方で上手い事行った!みたいな方法が分かった方がいたら是非教えてください。
というわけで、残念ながら今のところそう簡単にはVRoidのVRMをEpicスケルトンに変換する方法は無い事が分かりました。
おわり
VRMフォーマットって、環境に左右されずに汎用的に使用できるアバターフォーマットとして策定されたはずなのに、どうしてUEではこんなに扱いづらいんだろう?
はるべえさんが開発したVRM4Uのおかげで相当使いやすくなってるとはいえ。
そんな風に思ってしまいそうになりますが、VRMの問題というよりはむしろUEのスケルトン周りが融通が効かなすぎるのが問題でしょう。
VRMは理論上は環境に左右されずに使えるとは言え、実際はUnityベースで作られてるようなもんです。
UnityではHumanoidという抽象化された人型キャラクターの中間フォーマットのようなものが用意されていて、これが非常に柔軟でメッチャクチャ便利です。
Unityではボーン構造が多少食い違ってようが、ボーン名がメチャクチャだろうが、おおむね人型であればHumanoidに変換できます。TポーズだろうがAポーズだろうが大丈夫です。
ですからBlenderであまり深く考えずに適当に作った自作モデルとかでもUnityではノートラブルで使用できます。対してUEではEpicスケルトン互換のモデルを作るには有料アドオンとか使わないとほぼ無理です。
さらに、UnityのHumanoidはアニメーションがボーンの回転量では無く、マッスル値に変換されますから、例えば人差し指を半分だけ曲げたい時は、人差し指のマッスル値に0.5を入れてあげればいいだけで、扱いがメチャ簡単です。
UEならまず人差し指のボーンを探して回転軸を調べて可動範囲もイチイチ調べないとプロシージャルなボーン操作はできないでしょうし、しかもボーンの回転軸とかはモデル毎に違いますから、別のスケルトンモデルに使い回そうとしても全部設定し直しになってしまうでしょう。
Unityなら全てのアニメーションはHumanoid形式で全てのモデルに使い回せるのに対して、UEのアニメーションはスケルトンごとにリターゲットして複製されちゃいますからキャラごとにスケルトンが違うとメモリを無駄に浪費してしまいます。
そんなんですから、正直言って3Dアバターとかを取り扱うアプリを作るんだったら、私だったら今のところUnityの方が簡単に扱えるからUEよりUnity使うだろうな…と思っちゃいます。
実際、VRChatとかClusterとかSTYLYとかバーチャルキャストとかRealityとか、そういう系のアプリは総じてUnityが使われています。
UEはここんとこについてはUnityを見習ってもっと柔軟なスケルトンシステムを作って欲しいです。
というわけで、「なんでVRMのモデルはボーン構造やボーン名に一貫性が無いんだよ!」という話は、Unityだとそういうモデルでも全部一貫して柔軟に扱えるからそうなってるので、むしろボーン名違うだけで文句言ってくるUEの柔軟性の無さが浮き彫りになったよねと言う話でした。
で、結局のところどうすんの?というと、今のところVRoidモデルをEpicスケルトンに変換するのは難しいと分かりましたから、誰かが何とかしてくれるまではやっぱ一旦DAZのモデルを使おうかな…と思いました。DAZモデルならCharacter Creator 3を使えばEpicスケルトンに変換できますからね。