本ページにはプロモーションが含まれます
UnityVRMVRoid

【Unity】VRM1.0のモデルを表示させて遊ぶ

この記事は約6分で読めます。

はじめに

VRoid Studioで作成したVRM1.0モデルをUnityにインポートし、フェイシャル操作スクリプトやMixamoアニメーションの適用、エミッション設定などを行った際の備忘録です。これらの検証を通じて、VRoidモデルをゲーム開発に活用できる可能性を見出しました。

https://youtu.be/XZ1mdwu7YuM

こちらは、実際にモデルがUnity上で動作している様子を捉えた動画です。

VRoidモデルをUnityで活用する手順

ここでは、VRM1.0モデルをUnityにインポートし、MixamoアニメーションとlilToonシェーダーを適用する基本的な手順を解説します。

1. VRoid Studioでモデルを制作し、VRM1.0形式でエクスポートします。今回はVRoid Studioのサンプルモデルをそのまま書き出しました。

2. UnityでUniVRM1.0のパッケージをダウンロードして展開します。UniVRMはVRMファイルをUnityで扱うための必須ツールです。

https://github.com/vrm-c/UniVRM
https://vrm.dev/vrm1/

3. シェーダーも事前にダウンロードしておきましょう。lilToonは、BRP/LWRP/URP/HDRPといった幅広いレンダーパイプラインに対応した高機能なシェーダーです。Gitからダウンロードして導入します。

https://github.com/lilxyzw/lilToon/releases

4. VRoid StudioからエクスポートしたVRMファイルをUnityシーンにドラッグ&ドロップしてインポートします。

UnityのProjectウィンドウにVRMファイルをドラッグ&ドロップした際に表示されるインポート画面

UnityのProjectウィンドウにVRMファイルをドラッグ&ドロップすると、上記のような画面が表示されます。インポート時に少し戸惑いましたが、試行錯誤の結果、解決策を見つけました。

UnityのProjectウィンドウでインポートされたVRMモデルの構成を示す画像

インポートが完了したら、ProjectウィンドウでVRMモデルを選択し、Inspectorウィンドウでその構成を確認します。

5. マテリアルの展開とシェーダーの紐付けを行います。インポートされたVRMモデルのマテリアルは、初期状態ではVRMShadersが適用されていますが、lilToonシェーダーを使用するために展開・設定を行います。

UnityのInspectorウィンドウでExtract Materialsボタンが強調表示された画像

Inspectorウィンドウにある「Materials」セクションの「Extract Materials」をクリックし、抽出したいマテリアルを選択するために「Select」ボタンを押下します。

マテリアル選択画面でClear extractionボタンが強調表示された画像

次に、「Clear extraction」ボタンを押下し、既存の抽出設定をクリアします。

再度Clear extractionボタンが強調表示された画像

再度「Clear extraction」ボタンを押下して、マテリアル抽出を完了させます。これにより、マテリアルファイルがプロジェクト内に生成されます。

UnityのProjectウィンドウで複数のマテリアルファイルが選択された画像

プロジェクト内に生成されたすべてのマテリアルファイルを全選択します。

選択されたマテリアルにlilToonシェーダーをアサインする画面

選択したマテリアル全てに対して、InspectorウィンドウからlilToonシェーダーをアサインします。

lilToonシェーダーが適用されたマテリアルの設定画面

最後に、各マテリアルの設定を開き、VRoid Studioでのテクスチャ設定に合わせて透過(Transparent)や不透明(Opaque)などのレンダリングモードを調整します。lilToonシェーダーは非常に柔軟で高機能であり、開発者のlilxyzw様に深く感謝いたします。

6. Mixamoでアニメーションを選択します。ここではMixamoのアニメーションをVRoidモデルに適用する手順を説明します。Mixamoは無料で利用できるモーションライブラリです。

Mixamoのウェブサイトでアニメーションが選択されている画面

Mixamoのウェブサイトで、目的のアニメーションを検索し、選択します。

7. MixamoへのFBXアップロードを行います。選択したアニメーションをVRoidモデルに適用するため、モデルをMixamoにアップロードします。

MixamoにFBXモデルをアップロードする画面

Mixamoの画面で、事前にUnityからFBX形式でエクスポートしたモデルをアップロードします。

UnityからFBX形式でモデルを書き出す際、初回は「1体につき1skin」の設定でエクスポートします。2回目以降は「without skin」を選択することで、モデルデータ量を抑えることができます。

Mixamoでアニメーションが適用されプレビューされているモデル

Mixamoへのモデルアップロードが完了すると、このようにアニメーションが適用された状態がプレビューされます。

8. アニメーション用アバターの作成を行います。UnityでMixamoアニメーションを適用するためには、Humanoid形式のアバター設定が必要です。

UnityのFBXインポート設定でアバターを作成する画面

UnityのFBXインポート設定で、リグタイプをHumanoidに設定し、「Create From This Model」でアバターを作成します。

9. アニメーションコントローラーとの紐付けを行います。モデルにアバターをアサインし、アニメーションコントローラーを設定します。

UnityのInspectorウィンドウでAnimatorコンポーネントにアバターとコントローラーを設定する画面

モデルのAnimatorコンポーネントに作成したアバターとアニメーションコントローラーを設定します。

10. アニメーションの確認をします。今回は、アニメーションが問題なく動作することを確認することが目的ですので、最小限の設定で進めます。

Unityエディタでモデルがアニメーションしている様子

Unityエディタの再生ボタンを押すと、モデルがMixamoアニメーションで動き出すことが確認できます。

VRoidモデルのUnityでの調整点

VRM1.0モデルでは、既存のBlendshapeやBlinkerを操作するスクリプトがそのままでは動作しなかったため、フェイシャル表情を制御するための独自のスクリプトを作成しました。また、揺れ物(髪や胸部など)に関しては、スプリングボーンの設定を細かく調整し、物理演算が適用されても不自然に揺れすぎないようにしました。

おわりに

本記事では、VRoidモデルをUnityで動かすための基本的な手順と、いくつかの調整点についてご紹介しました。今後は、Blenderを使ったVRMモデルの改変と、そのUnityでの活用についても検証を進めていきたいと思います。

Blenderで改変中のVRoidモデルのスクリーンショット

VRoid Studioで作成したモデルをUnityにインポートし、さらにBlenderで改変(例えば、顔以外の部分をポリゴンリダクション)してからUnityに戻しても、問題なく動作することを確認できました。これは、3Dモデルのワークフローにおける柔軟性と効率性を示しており、非常に便利な時代になったと感じます。

ポリゴンリダクション後のモデルがUnityで正常に表示されている様子

ポストプロセスエフェクトを使用して、モデルのマスク部分などをゲーミングライトのように発光させたいと考えています。これは「エミッションマスク」と呼ばれる機能で実現できるようですが、さらなる検証が必要です。

https://youtu.be/a2Rp6S2jugI
ShaderGraphでの試行錯誤も行いましたが、結果的にlilToonの標準機能で目的の発光表現を実現できました。
PlaymakerでlilToonシェーダーの値を操作している設定画面

UnityのアセットであるPlaymakerを利用して、lilToonシェーダーの値を操作することも可能です。シェーダー内の変数には、ShaderGraphなどで定義した「Named」変数名でアクセスできます。

https://youtu.be/9eP1uSd7PX8
自作スクリプトにより、首の向きがターゲットに追従するように設定しました。3D表現の楽しさを改めて実感しています。
https://youtu.be/meZYnLzVeDQ
VRMのLook At系スクリプトを組み合わせることで、モデルがより自然な視線追従を行うようになりました。アニメーション中にもリアルタイムで追従してくれるのは非常に強力な機能です。

参考資料

https://www.youtube.com/watch?v=mSEoRJyNLdM

VRoidモデルのポリゴンリダクションに関するパフォーマンスベンチマークを取られている方の動画です。最適化の参考にさせていただきます。