仮想と物理とエトセトラ

xRや物理とかごった煮の備忘録的技術ブログ

Vroid Studioから出力したVRMをHoloLens2で閲覧する

今回は、VRoid Studioで作成したアバターVRM出力し、HoloLens2で閲覧します。

vroid.com

VRoid Studioでは気軽にアバターが作成できるため、VRChatなどで用いられることが多いです。
私もアバターを作成してみたので、試しにHoloLens上で投影し、現実世界に召還してみます。

前提

今回の環境は以下です。

Unity 2019.4.31
MRTK 2.7.3

シーン中でMRTK用のConigureは設定済みとします。
また、VRoid Studioですでにモデルは作成済みとします。

準備

VRoid StudioからVRMファイルを出力する

まずは、VRoid StudioからVRMファイルを取得します。
モデルを開いた後の画面右上真ん中のボタンから、VRMエクスポートを選択します。
f:id:napo909:20220123164915p:plain

VRMエクスポート画面ではエクスポート時の設定を行えます。
ポリゴン数は4万ポリゴン数程度なので問題ないと思いますが、念のため「透明メッシュを削除する」にチェックを入れ、マテリアル数と解像度を削減しておきます。
設定が終わったら「エクスポート」ボタンを押します。
f:id:napo909:20220123165713p:plain

ボタンを押すとVRMの設定画面になります。
必須事項である「タイトル」、「作成者」を入力します。
配布する予定がある場合は、ほかの項目も入力します。
すべて設定が終わったら、一番下の「エクスポート」ボタンを押します。
f:id:napo909:20220123170005p:plain
f:id:napo909:20220123170040p:plain

次に表示されるウィンドウで保存場所を指定したら、VRMファイルの出力は完了です。

VRMファイルをUnityに取り込む

ここで、作成したVRMファイルをUnityに取り込みます。
VRMファイルは通常ではUnityに取り込むことができません。
そこで、UnityにVRMファイルを取り込むことを可能にする、UniVRMを使用します。
このアセットを使用すると、VRMを取り込み、Unityで使用できるPrefab化することができます。
下記リンクからUniVRM-[バージョン名].unitypackageをダウンロードします。
github.com

f:id:napo909:20220123170442p:plain

ダウンロードしたUnityPackageをUnityのProject Windowドラッグ&ドロップします。
ドラッグ&ドロップすると、Import Unity Package Windowが表示されるので、下端のImportボタンを押します。

Importが終わると、おすすめの設定をするように指示されるため、Accept Allで実行します。
f:id:napo909:20220123171259p:plain

Console Windowにエラーが出ていますが、Editor上で使用するGlb Importerが複数あるため発生しているものです。
アプリ実行には特に問題ないため、無視して問題ありません。
f:id:napo909:20220123171537p:plain

設定が終わると、上部メニューにVRM0が追加されます。
Import from VRM 0.xを選択することでVRMファイルを読み込むことができます。
最初にVRMファイルを読み込み、次にAsstsのどこに出力するか指定します。
Assetsフォルダ配下でフォルダを作成し、その中を出力先にすると散らからずに済みます。
f:id:napo909:20220123171739p:plain

f:id:napo909:20220123171843p:plain

正常に処理が終わると、出力先に指定したフォルダにVRMモデルから生成したPrefabが生成されます。
これで、Unity上でVRMモデルを取り扱えます。
試しにHierarchyにドラッグ&ドロップすると、Scene上に表示されます。
f:id:napo909:20220123172347p:plain

アニメーションを設定する

出力したモデルはそのままではTポーズをしているだけで味気ないので、アニメーションをさせます。
今回は、下記URLのUnity Animationを使用させていただきました。

booth.pm

ダウンロードしたファイルを解凍するとEmoteSet_Free_v130.unitypackageが入っているため、先ほどと同様にProject Windowドラッグ&ドロップします。
ドラッグ&ドロップするとImport Unity Pakcage Windowが表示されるので、Importボタンを押します。
f:id:napo909:20220123173257p:plain

正常にImportされると、Assets/Necocoyaフォルダが作成され、その中にAnimation用のファイルが配置されます。
f:id:napo909:20220123173611p:plain

今回は、Emote02/OneLoopDivisionのAnimation Contollerを使用します。
Animation Controllerをダブルクリックすると、Animation Windowが表示されるので、Parametersタブから使用したいアニメーションを選択します。今回は01_Tefuri3_OneLoopを選択します。
f:id:napo909:20220123174117p:plain

アニメーションがどのような動きをするかは、animファイルを選択した状態でInspector Windowの下端の再生ボタンから確認できます。
f:id:napo909:20220123174102p:plain

作成したモデルへのAnimation Controllerの適用は、モデルを選択した状態でInspector Window中のAnimatorコンポーネントControllerを設定することで実現できます。
f:id:napo909:20220123174356p:plain

そのままではモデル表示位置が初期状態の頭の位置と同じなので位置を微調整します。 また、つかんで移動できるように、Object ManipulatorCapsule Colliderをアタッチすれば準備完了です。 f:id:napo909:20220123175716p:plain

動作確認

無事、HoloLensで現実世界に投影することができました。
拡縮もできます。
VRM/MToonシェーダもSingle Pass Instancedに対応しているようで、両目でしっかり見えます。