Vision Proアプリ開発記【2. アバターアップロード編】
はじめに
こんにちは!ambrで4月からインターンをしている、こんしると申します。
前回に引き続き、「gogh: Spatial Focus Timer」の開発中壁にぶつかったポイントを、備忘録的にまとめたものになります。
この記事では、他のVRサービスなどで用いるようないわゆる「アバター」の3DモデルをVision Proに持ち込む方法について説明します。
Vision Proの「Persona」の話ではないのであしからず。
シリーズの他の記事はこちらからどうぞ!
- UnityでVision Proアプリを開発する環境構築
- Unityを介したアバターモデルのVision Pro移植(この記事)
- Swift UIとUnityの連携
VRMを持ち込む
VRMのアバターであれば、STYLY for Vision Proを使用することで、持ち込んだ上でモーションやポーズを設定できるようです。
アバターデータをUnityで読み込んで、UniVRMなどでVRMファイルに変換し、上記のSTYLY for Vision Proを使って持ち込む、というのが選択肢の一つになると思います。
(あんまり試していないので詳細はわかっていません……)
VRMのファイル変換については以下のドキュメントをどうぞ!
非VRMのアバターを持ち込む
アバターのFBXやTextureなどのCGアセットがあれば、Unityに取り込んでVision Proで表示させることが可能です。
この方式であれば、アバターのAnimationをUnityのAnimation Controllerで扱えるので、Unityに慣れている人であれば楽に制御できます。
また、VRM変換を介さないため、VRM変換時のCG要件の制約の影響を受けずに取り込むことができます。
今回はgoghのCGアセットを活用する形で、FBX等を取り込んで制作を進めました。
一方で後述する問題などに対し対応を行う必要があります。
さて、アバターをUnityで読み込み、それをそのまま何も手を加えずアップロードするとこんな感じになりました。
見た目こわ……あとなんか部屋に比べて明るいですね……
このように、アバターはそのままアップロードするだけでは不十分で、
- Blendshapeを消す
- Material / shaderを対応させる
の2つの作業が必要になります。
(2024/08/05 追記)
7/25のPolySpatial 2.0のアップデートでblendshapeが対応したようです。
以下の内容はPolySpatial 2.0以前、blendshapeが対応していなかった時のものになります。
Blendshapeを消す
残念ながら現時点でVision ProにBlendshapeは対応していないようです。
実際、Play To Deviceを繋げPlayモードにしてからshapekeyを操作しても何も変わらないことが確認できます。
「髭を出し入れするshapekey」が効かなくなって、先の画像のようになってしまうわけです。
これを解決するためには、blenderなどを用いてfbxに入ったBlendshapeのデータを消す必要があります。
yaegakiさんのこちらのqiitaに具体的な方法が載っています!
また、Blendshapeが使えないということは、アバターの表情をshapekey操作で変更できないということになります。
表情を変える、瞬きをするなどのギミックを仕込む場合、shapekeyに頼らない何らかの実装が必要です。
「gogh: Spatial Focus Timer」では表情は変更せず、体だけ動くようになっています。
やっぱり表情も動かしたいですね……どうにかならないのだろうか
Material / shaderを対応させる
Vision Proで使用できるshaderについては公式のドキュメントに記述があります。
これによれば、現時点では
- Standard URP Shader: Lit, Simple Lit, Unlitのみ
- Standard Built-In Shader: Standardのみ
- Custom Shader: Shader Graph製のみ
とのことで、これ以外のshaderを用いると勝手に置き換わるようです。(先ほどの写真が一例)
周囲の環境光に合わせて明度を変えつつ、アバターのキャラクターっぽさを保つためにはShader Graphを書く必要があります。
これに関してはせぎゅさんのこちらの記事が参考になります!
Shader Graphをいじるとこんな感じになりました、少しわかりにくいですが周囲の環境に応じてアバターの発色が変化しています!
まとめ
- VRMデータにしてSTYLY for Vision Proを使用して持ち込む
- VRMにせず直接読み込むと、VRMのCG制約を受けることなく、Animation制御を楽に行える
- VRMにせず直接読み込む場合は、Blendshapeを消してShader Graphを書く必要がある
Discussion