UE4
Assimp
glTF
VRM

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にした。言葉足らずなのを修正。