Edited at

UE4でVRMをインポートできるようにしたけど、まだ先は長そうです

「UE4」と「VRM」で検索して情報が出てくるようQiitaに書いてみます。


2018/12/08 追記:最新版は手順が変わっています

導入の際はVRM4U置き場より、最新の手順をご確認ください。

この記事よりも機能が増えています。


やったこと

UnrealEngine4のVRMインポーターとして機能する VRM4Uというプラグインを作成しました。

https://github.com/ruyo/VRM4U

利用するには、DownloadZIPをクリックし、MyGame/Plugins/VRM4U/ となるように配置してください。

エディタを起動し、コンテンツブラウザ上にVRMファイルをドラッグ&ドロップすれば動作します。

image.png


インポートしてみた例

VRoidStudio v0.2.13で出力したもの https://vroid.pixiv.net/

image.png

MToonはUE4の素のマテリアルになります。MorphTarget読めます

ニコニ立体ちゃん (VRM) http://3d.nicovideo.jp/works/td32797

image.png

UnlitTextureはUnlitのマテリアルになります。揺れ物設定はPhysicsAssetに展開します


仕組み

VRM読み込みはAssimpのglTF対応をベースにしています。

※現在(2018/10月)のAssimpはglTFのboneと頂点ウェイトの読み込みに未対応です。VRM拡張も未対応です。

  なので対応しました。VRMには不要なボーンアニメーションも一部対応しました。https://github.com/ruyo/Assimp

  機会あればソースを整頓して本家にパッチを提供したいです。

  …しかし今はVRMが優先です。

少し改造すればAssimpで対応している大半のモデルを、UE4にインポートしたり動的に読むことができるでしょう。夢が膨らみます。

…しかし今はVRMが優先です。

仮ながらAssimpはglTFの出力に対応しているので、そこそこ改造すればUE4上で設定したパラメータをVRMファイルに出力することもできるでしょう。

…しかし今はVRM読み込みが優先です。

インポートのメイン処理は、UE4ランタイム側のモジュールで行っています。

これは動的(ゲームビルドで動作する)なモデル読み込みを前提としているからです。


今出来ることと制限


  • スキンモデル(メッシュと骨)の読み込み

  • MorphTargetの読み込み(いわゆるブレンドシェイプ)


    • ※現状では顔の表情を意図通りに制御するのは難しいでしょう。VRMのBlendShapeGroupへの対応が必要そうです。



  • テクスチャの読み込み(今のところPNGのみ)

  • マスク、半透明マテリアルの作成と割り当て


    • UnlitTextureシェーダ:Unlitのマテリアルになります。

    • MToonシェーダ:UE4の素の物理シェーディングなマテリアルになります。VRMをglTFビューワで見た時とほぼ同じ結果です



  • 揺れ物の読み込み


    • コリジョンは正確だと思います

    • ※揺れ方は適当です (パラメータを適当に決め打ちしています)




今は出来ないけど将来的に解決したいこと


  • 1つのAnimBPを全てのVRMで適用できるようにする


    • UE4の思想と非常に相性が悪い… ようにみえます。しかし、これができて初めて「UE4でVRMを読めた」と言えるのはないかと。

    • ベースの共通Skeletonの姿勢をコピーするよう実装すればいける予感はしています…



  • Gameビルドした環境で 動的にモデルを読めるようにする


    • UE4の思想と非常に相性が悪い… ようにみえます。

    • 現在はEditorビルドでしか読めません。MorphTargetを読み込む時に行き詰まったので、一旦Gameビルドを諦めました。

    • ※裏を返すとMorphTargetを諦めれば、Gameビルドで動的に読むことは おそらく可能です。



  • 日本語の骨名に対応する


    • 現在はスキニング結果がおかしくなります。最悪エディタが落ちます。

    • 動的に読む限りでは、勝手にリネームしても影響は少ないと考えています。

    • MMDをVRMにコンバートしたファイルでよく見られます。




出来ないこと


  • Unityでの見た目、挙動を完全再現すること


目標

UE4でVRoidHubのようなサービスと連携できるようなところまで行きたい

  けど挫けてVRMインポーターで終わるかもしれません(弱気

  別問題として、このプラグインがUE4のバージョンアップに追従できるか、かなり不安が残ります。

VTuberのためのツールとしては…正直オススメしません。応援はします!

要望、参考情報、コメントなどありましたらお知らせください。


さいごに

(自分語りなので読みたい方だけ)

Webで情報を公開している方へ 勝手ながら感謝の意を述べます。ありがとうございます。

私個人もUE4でVRMを手軽に扱えない状況に、長らく歯がゆい思いをしていました。

ふと思い立って、えいやっと実装し、公開してしまいました。

UE4とVRMが取り巻く環境が今後どう変化するかわかりませんが、なんらかの足しになれば幸いです。

10/13 ちょっと編集

表記を gltf->glTF、assimp->Assimpにした。言葉足らずなのを修正。