VIVE XR EliteとALVRでフェイストラッキング

VIVE XR EliteとフェイシャルトラッカーをVIVEストリーミングで使用するのは負荷が高く、何故だか画質も悪いのでALVRを試してみることにしました。

しばらく試行錯誤していて全然ダメだったものの、最終的に(多分)上手く動かせるところまで漕ぎ着けることができました。触るとNGな部分がいくつかあることが分かってきたので、備忘録として残しておくことにします。VIVE Focus VisionでもALVR経由のフェイストラッキングは動かせるとは思うのですが、実機がないので分かりません。

現在はコントローラーの挙動がおかしい不具合がある

【2025/04/28追記】

コントローラーのトラッキングが鈍く、物を投げたりするのが難しい問題が起きているようです。

client regression in Focus Vision hand gestures (velocity?) since v20.12.1 · Issue #2793 · alvr-org/ALVR
Description It seems that with release v20.12.1 a velocity regression was introduced for the Vive Focus Vision, current ...

「ALVR v21.0.0-dev01+nightly.2025.01.15」まで戻せばスムーズに動くようになりますが、今度はALVRでのフェイストラッキングが対応してないバージョンとなってしまうので、なんとももどかしい状況です。(※フェイストラッキング対応のコミットが入ったのは2025年2月24日)

StableのALVR v20.13.0も不具合が起きているので、残念ながら修正を待つしかなさそうです。クライアントのデバッグビルドを用意して不具合修正に協力できる人は、協力した方が良いでしょう。自分は難しいかな……。

動作環境

  • Windows 11 Pro 24H2
  • Ryzen 7 5800X3D
  • Radeon RX7900XT(25.3.2)
  • VIVE XR Elite(1.0.999.738)
  • フェイシャルトラッカー
  • ALVR v21.0.0-dev01 + nightly.2025.04.18(Stable v20.13.0でも行けるとは思う)
  • VRCFT 5.2.3.0 (ALVR Module)
  • ルーター:ASUS RT-AX3000(※ここにはWi-Fiで接続しない)
  • Wi-Fi AP:NEC Aterm AM-AX1800HP(80MHz 2×2)

VRCFTについて

期限切れによる証明書失効でインストールが出来ない状況でしたが、Steamで配信されるようになりました。

VRCFaceTracking
VRCFaceTracking
開発者: benaclejames
金額: 無料

各種設定

ALVR Launcherを立ち上げて「Add version」を押すとChannelとVersionを指定できるウィンドウが出ますので、今回は「Nightly」の「v21.0.0」を入れることにしました。Stableのv20.13.0でも構いませんが、経験上ALVRはStableだからといって安定してるかというとそうでもない感じがしますので、色々と直ってることに期待してNightlyに突撃するのもありです。コミットメッセージを見ておくと良いでしょう。

Commits · alvr-org/ALVR
Stream VR games from your PC to your headset via Wi-Fi - Commits · alvr-org/ALVR

開発者モードにしたVIVE XR EliteをPCとUSB接続して、ALVR Launcherの「Install APK」を押してインストールしておけばライブラリに出てくるはずです。

USB デバッグを有効に

Install APKから入れる

アンインストールはストレージから行える

VIVE XR EliteでALVRを開き、PC側のALVRで「Launch SteamVR」を押すとDeviesタブに「Trust」ボタンが出てくるはずですので、認証して接続しておきましょう。

VIVE XR Eliteが接続できるようになったら少しだけ設定を変更します。既に情報が古くなっていますが、大雑把なセットアップメモはここに。

RadeonでALVRを使う
VRChatなどでのハンドトラッキング対応が大幅に改善された、ALVR v20.11.0時点での情報です。RadeonのAMF関連がメインでGeForce向けの情報はないので、あくまでも個人的な備忘録。インストールPCにインストールする以降...

Presets

設定内容は画像の通り。VIVE XR Eliteの解像度は片目1920pxなので、とりあえずMedium設定の両目4288px(片目2144px)にします。

リフレッシュレートは90Hzを強く推奨。VIVE XR Eliteは72Hzなどがサポート外なので90Hz以外では手動で75Hzにする必要がありますが、何故だかコントローラーの遅延がかなり酷くなるので90Hzにしておきましょう。

Foveation presetはHighだと視界の端がかなり荒くなるので、Mediumぐらいにしておくと良さそうでした。VIVE XR Eliteの視野が狭いことや、アイトラッキングで目線を動かす事を考慮するとLightでも良いかもしれません。

フェイストラッキングしているとネットワーク帯域を食うような感じ(?)がしたので、コーデックはHEVCにしてビットレートを上げすぎないようにする方針としました。

マイクを使うのでVB Cableを選択します。VB Cableは予めインストールをしておいてください。ハンドトラッキングはリストトラッカーなしではまともにトラッキングできないので無しとして、フェイストラッキングの為にVRCFaceTrakingを選択しておきます。

Video

とりあえず触ったところだけ紹介。ここは迂闊に弄ると沼るので、あとは全部初期設定のままです。

ビットレートモードはConstantにして、50Mbpsぐらいから様子見して設定します。手元の環境では最終的に150Mbpsとしました。多人数でVRChatを遊んだときに処理が追いつかなくなる事があれば下げましょう。

Snapdragon XR2のデコーダーがHEVCコーデックをどの程度処理できるか分かりませんが、150Mbpsを超えると厳しいという話もあります。H.264であればもう少し盛れるとは思いますが、デコードの遅延にも関係してくるのでこの辺りを詰めるのは後回しとします。(気が向いたら試す予定)

Foveation encoding周りは最初にPresetsのところで設定したので触りません。

Encoder configの欄でExpandを押すとエンコーダーの細かい設定が可能で、高品質にできる可能性がありますが、下手に触ると1ヶ所変えただけで動かなくなったりする場所なので今回は触りません。

一番下にUpscaling(HMD側でSGSRが動作するらしい)というものがありますが、これを有効にしてしまうとPC側は90FPSきっちり出ていても、Client(VIVE XR Elite側)が90Hzと45Hzを激しく行き来して奇妙な遅延を起こすようでした。Upscalingはオンにしないでください。

75Hzと37Hzを激しく行き来していたときのもの

Audio

マイクを有効にしてデバイスにVB Cableを設定しただけで他は初期設定のままです。

ノイズキャンセリングが欲しい場合はWindows側でなんとかするか、VIVE XR Eliteのオーディオ設定で「マイクの騒音を軽減する」を使用します。

Headset

Predictionとかを下げるとトラッキングの遅延が減るかもしれませんが、目に見えて良くなるわけでもないので期待はしないように。VIVE XR Eliteのコントローラーをキビキビと動かすのは難しいです。Face trakingの欄ではHTCだけ残して後はチェックを外しました。

Emulation modeもデフォルトのQuest 2のままで大丈夫だと思います。PICO 4コントローラーなどにも偽装できますが、VIVE XR EliteのコントローラーはABXYボタンにタッチセンサーがない代わりにサムレスト(/input/parking)が動作するので、Quest 2にしておくのが無難でした。コントローラーの角度などはoffsetを弄っておきましょう。

Connection

ここは何も触りません。buffer sizeをMaximumからDefaultに変更すると映像が乱れるのを確認しました。

Extra

ここも理由がない限り触るところはありません。

動作確認

トータルのレイテンシーが80msぐらいですが、まぁこんなもんかなと。Motion to Photon Latencyは有線タイプのHMDで40msぐらいだそうですので、無線でそこそこ高いビットレートなら80msは妥当なレイテンシーだと思われます。100msを超えるようなら設定や無線環境などを見直した方が良さそうです。

GitHub - Greendayle/VR-Motion-to-photon-latency-
Contribute to Greendayle/VR-Motion-to-photon-latency- development by creating an account on GitHub.

リフレッシュレート周りも少々波打ってますが、90Hz付近を維持しています。

ビットレートも設定値付近を推移しており、パケットロスもありませんでした。上記スクリーンショットでは180Mbpsに設定していますが、150Mbpsが無難そうです。

動かしている様子を録画したのが以下の動画です。裏でOBSの録画(解像度WQHD AV1コーデック)が走ってますがエンコーダーの余裕はありそうです。CPUがRyzen 7 5800X3Dなので、HaritoraXなどのIMU方式のトラッカーを動かす余裕があるかと言われると微妙……。

特に引っ掛かったりはしませんでしたが、長時間安定して動くかどうかはちょっと分からないですね。何かおかしいときは、一旦VIVEボタンを押してVIVEメニューを表示してALVRを終了し、開き直すと改善される場合があります。PC側のALVRとSteamVRが動いている限りはVIVE XR Eliteが切断されても復帰可能です。

VIVEメニュー
VIVEメニューは、ヘッドセットの機能と設定にアクセスできるユニバーサルメニューです。

重くはないものの、手元のAMD Radeon環境で完璧に動作しているとは言い難い感じがあります。映像がちょっとブレたりとかもありました。ALVR側のエンコーダー設定、特にAMF周りと格闘することになりそうです。NVIDIA GeForceの場合は挙動が異なるとは思いますので、細かいところは気合いで……。

再現性の高そうな不具合として、VIVEメニューを出したときに表示の乱れが起こる場合がありました。なんかおかしいときはVIVE XR Eliteを再起動しておきましょう。

VIVEメニュー表示中に白いオブジェクトが目の前に激しく表示される事があります

余談ですが、フェイシャルトラッカーを取り付けてあってもMRガスケットは使えました。

タイトルとURLをコピーしました