Vision Proアプリ開発記【2. アバターアップロード編】

2025/03/11に公開

はじめに

こんにちは!ambrで4月からインターンをしている、こんしると申します。

前回に引き続き、「gogh: Spatial Focus Timer」の開発中壁にぶつかったポイントを、備忘録的にまとめたものになります。

https://apps.apple.com/jp/app/gogh-spatial-focus-timer/id651122997

この記事では、他のVRサービスなどで用いるようないわゆる「アバター」の3DモデルをVision Proに持ち込む方法について説明します。
Vision Proの「Persona」の話ではないのであしからず。

シリーズの他の記事はこちらからどうぞ!

  • UnityでVision Proアプリを開発する環境構築

https://zenn.dev/ambr_inc/articles/4de36864839111

  • Unityを介したアバターモデルのVision Pro移植(この記事)
  • Swift UIとUnityの連携

https://zenn.dev/ambr_inc/articles/0cb439ef6c9549

VRMを持ち込む

VRMのアバターであれば、STYLY for Vision Proを使用することで、持ち込んだ上でモーションやポーズを設定できるようです。

https://styly.cc/ja/manual/styly-vision-pro-intro-sample-scenes/

アバターデータをUnityで読み込んで、UniVRMなどでVRMファイルに変換し、上記のSTYLY for Vision Proを使って持ち込む、というのが選択肢の一つになると思います。
(あんまり試していないので詳細はわかっていません……)

VRMのファイル変換については以下のドキュメントをどうぞ!

https://vrm.dev/vrm/how_to_make_vrm/

非VRMのアバターを持ち込む

アバターのFBXやTextureなどのCGアセットがあれば、Unityに取り込んでVision Proで表示させることが可能です。

この方式であれば、アバターのAnimationをUnityのAnimation Controllerで扱えるので、Unityに慣れている人であれば楽に制御できます。

また、VRM変換を介さないため、VRM変換時のCG要件の制約の影響を受けずに取り込むことができます。

今回はgoghのCGアセットを活用する形で、FBX等を取り込んで制作を進めました。

一方で後述する問題などに対し対応を行う必要があります。

さて、アバターをUnityで読み込み、それをそのまま何も手を加えずアップロードするとこんな感じになりました。

AvatarError

見た目こわ……あとなんか部屋に比べて明るいですね……

このように、アバターはそのままアップロードするだけでは不十分で、

  • Blendshapeを消す
  • Material / shaderを対応させる

の2つの作業が必要になります。

(2024/08/05 追記)
7/25のPolySpatial 2.0のアップデートでblendshapeが対応したようです。

https://discussions.unity.com/t/visionos-release-notes-1-3-and-2-0-pre-9/1488495

以下の内容はPolySpatial 2.0以前、blendshapeが対応していなかった時のものになります。

Blendshapeを消す

残念ながら現時点でVision ProにBlendshapeは対応していないようです。
実際、Play To Deviceを繋げPlayモードにしてからshapekeyを操作しても何も変わらないことが確認できます。
「髭を出し入れするshapekey」が効かなくなって、先の画像のようになってしまうわけです。

これを解決するためには、blenderなどを用いてfbxに入ったBlendshapeのデータを消す必要があります。
yaegakiさんのこちらのqiitaに具体的な方法が載っています!

https://qiita.com/yaegaki/items/1d5459b4dc07d1fa9e45#fn3

また、Blendshapeが使えないということは、アバターの表情をshapekey操作で変更できないということになります。
表情を変える、瞬きをするなどのギミックを仕込む場合、shapekeyに頼らない何らかの実装が必要です。

「gogh: Spatial Focus Timer」では表情は変更せず、体だけ動くようになっています。
やっぱり表情も動かしたいですね……どうにかならないのだろうか

Material / shaderを対応させる

Vision Proで使用できるshaderについては公式のドキュメントに記述があります。

https://docs.unity3d.com/Packages/com.unity.polyspatial.visionos@1.2/manual/Materials.html#custom-shaders

これによれば、現時点では

  • Standard URP Shader: Lit, Simple Lit, Unlitのみ
  • Standard Built-In Shader: Standardのみ
  • Custom Shader: Shader Graph製のみ

とのことで、これ以外のshaderを用いると勝手に置き換わるようです。(先ほどの写真が一例)

周囲の環境光に合わせて明度を変えつつ、アバターのキャラクターっぽさを保つためにはShader Graphを書く必要があります。
これに関してはせぎゅさんのこちらの記事が参考になります!

https://qiita.com/segur/items/1387a4a406b507c0b78a

Shader Graphをいじるとこんな感じになりました、少しわかりにくいですが周囲の環境に応じてアバターの発色が変化しています!

AvatarLight

まとめ

  • VRMデータにしてSTYLY for Vision Proを使用して持ち込む
  • VRMにせず直接読み込むと、VRMのCG制約を受けることなく、Animation制御を楽に行える
  • VRMにせず直接読み込む場合は、Blendshapeを消してShader Graphを書く必要がある

ambr Tech Blog

Discussion