はじめに
VRoid Studioで作成したVRM1.0モデルをUnityにインポートし、フェイシャル操作スクリプトやMixamoアニメーションの適用、エミッション設定などを行った際の備忘録です。これらの検証を通じて、VRoidモデルをゲーム開発に活用できる可能性を見出しました。
こちらは、実際にモデルが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からダウンロードして導入します。
4. VRoid StudioからエクスポートしたVRMファイルをUnityシーンにドラッグ&ドロップしてインポートします。

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

インポートが完了したら、ProjectウィンドウでVRMモデルを選択し、Inspectorウィンドウでその構成を確認します。
5. マテリアルの展開とシェーダーの紐付けを行います。インポートされたVRMモデルのマテリアルは、初期状態ではVRMShadersが適用されていますが、lilToonシェーダーを使用するために展開・設定を行います。

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

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

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

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

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

最後に、各マテリアルの設定を開き、VRoid Studioでのテクスチャ設定に合わせて透過(Transparent)や不透明(Opaque)などのレンダリングモードを調整します。lilToonシェーダーは非常に柔軟で高機能であり、開発者のlilxyzw様に深く感謝いたします。
6. Mixamoでアニメーションを選択します。ここではMixamoのアニメーションをVRoidモデルに適用する手順を説明します。Mixamoは無料で利用できるモーションライブラリです。

Mixamoのウェブサイトで、目的のアニメーションを検索し、選択します。
7. MixamoへのFBXアップロードを行います。選択したアニメーションをVRoidモデルに適用するため、モデルをMixamoにアップロードします。

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

Mixamoへのモデルアップロードが完了すると、このようにアニメーションが適用された状態がプレビューされます。
8. アニメーション用アバターの作成を行います。UnityでMixamoアニメーションを適用するためには、Humanoid形式のアバター設定が必要です。

UnityのFBXインポート設定で、リグタイプをHumanoidに設定し、「Create From This Model」でアバターを作成します。
9. アニメーションコントローラーとの紐付けを行います。モデルにアバターをアサインし、アニメーションコントローラーを設定します。

モデルのAnimatorコンポーネントに作成したアバターとアニメーションコントローラーを設定します。
10. アニメーションの確認をします。今回は、アニメーションが問題なく動作することを確認することが目的ですので、最小限の設定で進めます。

Unityエディタの再生ボタンを押すと、モデルがMixamoアニメーションで動き出すことが確認できます。
VRoidモデルのUnityでの調整点
VRM1.0モデルでは、既存のBlendshapeやBlinkerを操作するスクリプトがそのままでは動作しなかったため、フェイシャル表情を制御するための独自のスクリプトを作成しました。また、揺れ物(髪や胸部など)に関しては、スプリングボーンの設定を細かく調整し、物理演算が適用されても不自然に揺れすぎないようにしました。
おわりに
本記事では、VRoidモデルをUnityで動かすための基本的な手順と、いくつかの調整点についてご紹介しました。今後は、Blenderを使ったVRMモデルの改変と、そのUnityでの活用についても検証を進めていきたいと思います。

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

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

UnityのアセットであるPlaymakerを利用して、lilToonシェーダーの値を操作することも可能です。シェーダー内の変数には、ShaderGraphなどで定義した「Named」変数名でアクセスできます。
参考資料
VRoidモデルのポリゴンリダクションに関するパフォーマンスベンチマークを取られている方の動画です。最適化の参考にさせていただきます。

