RadeonでALVRを使う

ALVR v20.14.1時点での情報です。RadeonのAMF関連がメインでGeForce向けの情報はないので、あくまでも個人的な備忘録。

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

インストール

PCにインストールする

以降、Windowsで使用する前提で説明をします。

GitHubのReleasesページから最新のalvr_launcher_windows.zipをダウンロードして、管理者権限の必要が無い場所に展開してください。ユーザー名に日本語が含まれていなければ、ドキュメントフォルダで大丈夫です。

Add versionボタンから最新のバージョンをインストールします。

HMDが開発者モードになっていてadbコマンドが通る状態であれば、Install APKボタンからHMDへのインストールが行えます。ダッシュボードの起動はLaunchボタンを押します。

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

VB-Cableのインストール

「Download VB-Cable」をクリックして、公式サイトからダウンロードします。「VBCABLE_Setup_x64.exe」を管理者として実行してインストールしておいてください。インストール後はOSの再起動が必要です。

VB-Audio Virtual Apps
VB-Audio Virtual Cable and App's

ファイアウォールの許可

HMDとの接続のためにファイアウォールに接続ルールを追加します。管理者権限が必要です。

HMDにインストールする

Meta Questシリーズ

現在はApp Labで公開されていますので、ストアでALVRを検索すれば出てきます。Side Questを使用する必要はありません。

ブラウザーをアップデートしてください

PICO 4

まだストアに公開されていませんが、いずれリリースされる予定だそうです。ALVR LauncherのInstall APKボタンから入れましょう。

VIVE Focusシリーズ

VIVE XR Eliteで試しましたが、開発者モードにしてあればUSB接続してInstall APKボタンからインストール可能なはずです。

併用するドライバーの設定(現在は設定不要)

現在は項目がなくなったため、考慮する必要はありません。

過去の情報として残しておきますが、ALVRがややこしく感じるポイントのひとつです。SettingsタブのExtraに「Driver launch action」があるので、そこで設定する必要があります。

Unregister other drivers at startup
SteamVR起動時に他のドライバーを無効にする
デフォルトの設定です。競合するドライバーによる干渉を防ぐため、SteamVR実行時にSteamVRに登録されている他のドライバーを無効にしてALVRだけが動作するようになります。
Unregister ALVR at shutdown
SteamVRを終了する際にALVRを無効にする
SteamVRを起動した際にALVRドライバーが登録され、終了時に無効になります。
Standable:Full Body EstimationやHaritora Configuratorのような、フルボディトラッキングに必要なドライバーを併用する際に選択します。但し、Virtual Desktopなどのストリーミングアプリは競合してしまうので、予め手動で無効にしておく必要があります。
No action
なにもしない
ALVRを含むすべてのドライバーを手動で登録する必要があります。これにより、最初にALVRダッシュボードを起動せずにSteamVRを起動できます。

ドライバーを手動登録するには

Installationタブで「Register ALVR driver」を押します。干渉するドライバーがあればRemoveを押して除外してください。

わからん、どうすればいい?

  • ALVRだけが動いたら良い、フルトラしてない→Unregister other drivers at startup
  • ALVRだけが動いたら良い、IMU方式のトラッカーでフルトラしている→Unregister ALVR at shutdown
  • Virtual Desktopなどを使うときがある→No actionに設定し、その都度SteamVRの設定から必要なアドオンをオンオフして再起動する

これらの設定は3月に削除されているので、現在は気にしなくても良さそうです。

feat: Remove SteamVR driver registration modes by zmerp · Pull Request #2755 · alvr-org/ALVR
At SteamVR launch, unconditionally register the ALVR driver. Also remove driver list backup.In this PR I implement some ...

HMDを登録する

同じネットワーク内でQusetやPICO側でALVRを起動しておき、ダッシュボードのDevicesタブで「Launch SteamVR」を押します。

Trustボタンが出てくるので、押すとHMDが登録されてSteamVRが再起動します。ConnectionタブでAuto trust clientsを有効にしていると自動で登録されます。

詳細設定

Settingsから様々な設定が行えます。

Presets

プリセットによる簡易設定が行えます。

Resolution

両目での解像度です。(1:1解像度の場合を想定)

High(2592px)以上に設定すると、画質が急激に低下したり表示が乱れたりするようでした。手動で設定する場合は2500pxぐらいまでは問題ないです。

Very Low3072 x 1536px
Low3712 x 1856px
Medium4288 x 2144px
High5184 x 2592px
Ultra5632 x 2816px
Extreme6080 x 3040px

Preferred framerate

フレームレートの設定をします。ヘッドセット側で設定されているリフレッシュレートが最大フレームレートとなります。

Encoder preset

エンコーダーの設定です。設定を上げすぎると、スタッタリングや表示の乱れが起こりやすくなります。初期設定ではSpeedが選択されています。

Headset speaker

ここで選択した音声デバイスの音がヘッドセットへ送られます。

Headset microphone

例えばQuestのマイクを使用したい場合は、VB Cableを選択します。(VB Cableは予めインストールし、一度OSの再起動をしてください。一度も再起動していない場合エラーが出ます。)

Hand tracking interaction

ハンドトラッキングの設定です。

Disabledハンドトラッキングを使用しません。
SteamVR Input 2.0VRChat用にハンドトラッキングデバイスを別途生成します。
ALVR bindingsALVR独自のバインドで、ハンドトラッキングにトリガーやスティックの操作が割り当てられます。
Hand tracking controller bindings
Stream VR games from your PC to your headset via Wi-Fi - alvr-org/ALVR

Eye and face tracking

アイトラッキング・フェイストラッキングの設定です。VRCFTを使ってフェイストラッキングをする場合は、「VRCFaceTracking」を選んでおきます。VRCFT側ではALVR Moduleを入れておけばOKです。

Video

Bitrate

ビットレート設定です。詳細設定が行えるExpandボタンがあります。

  • Mode

固定ビットレートのConstantと、通信状況に合わせて変動するAdaptiveが選択できます。
ビットレート設定は5~1000Mbpsまで選択できますが、800~1000Mbpsクラスは有線接続時に使用することをお勧めします。
Wi-Fi環境下ではH.264で300Mbps、HEVCで150Mbpsぐらいを最大値の目安として設定します。あまり高くし過ぎるとHMD側が処理しきれない可能性があります。

  • Saturation multiplier(Adaptive)

映像伝送に割り当てるネットワーク帯域幅の割合です。0.95(95%)がデフォルトです。

  • Maximum bitrate / Minimum bitrate

Adaptiveモード時の最大ビットレートと最小ビットレートを指定します。

  • Maximum network latency

ネットワーク遅延の最大値です。有効にした場合のデフォルトは8msです。

  • Encorder latency limiter

エンコードに割り当てるフレーム間隔の割合(パーセンテージ)を指定します。有効にした場合のデフォルト値は0.90です。

  • Decoder latency limiter

デコーダーの遅延に関する設定です。但し、現在は特定のビットレートを超えるとデコーダーの遅延が増加し続ける不具合があります。

    • Maximum decoder latency

デコーダーの遅延がこの値を超えると、ビットレートが低下します。デフォルトは30msです。

    • latency overstep

Maximum decoder latencyで指定して値を超える状態が、何フレーム連続したらビットレートを下げ始めるかを設定します。デフォルトで90 framesが指定されています。

    • Latency overstep multiplier

遅延発生時にビットレートをどのぐらいの割合で下げるかを設定します。

  • Adapt to framerate

フレームレートが変動しても、指定されたビットレート設定を保つようにします。

    • FPS rest threshold multiplier

フレームレートが指定した係数を超えて変化した場合に、ビットレートの再設定を行います。デフォルトで2.00が指定されていますので、90FPSの場合は45FPSになったときに再設定が行われるはずです。VRChatのように常にフレームレートが低くなりやすい場合は値を下げると良いかもしれませんが、逆に激しく変動するような状況下では頻繁にビットレートの再設定が行われる可能性があります。

  • History size

参照フレーム数です。デフォルトで256が設定されているので、過去256フレームの情報を元にビットレートの調整などが行われます。

  • Image corruption fix

ビットレートが変更されたときにIDRフレームを要求し、画像の破綻を修正します。Radeonのみ影響する設定です。

Preferred codec

H.264/HEVC/AV1の中からコーデックを選択します。

HEVCはエンコーダーのレイテンシーが上がりますが、効率が良いためビットレートが限られる場面でも良好な品質を得られます。ネットワーク側がボトルネックとなる場合に有用です。AV1は更に高効率なコーデックですが、Radeon 7000シリーズ以上かつQuest 3の組み合わせでないと利用できません。(※今のところ、ALVRのWindows版ではRadeonのみAV1を使用可能です。)

ドライバーのバージョンによると思われますが、RadeonでHEVCエンコーダーを使用すると何かしらのトラブルが起こることがありました。現在は問題ないはずですが、HEVCが上手く利用できない場合はH.264を試します。

Foveated encoding

フォービエイテッド(中心窩)レンダリングの動画バージョンです。フォービエイテッドエンコーディングという名前の通り、レンダリング済みのフレーム対して処理をするものなので、レンダリング負荷が下がるわけではありません。

中心部の画質を保ちながら周辺の解像度を落とす事で、映像のエンコード・デコード速度を短縮できるほか、同じビットレートならば低解像度時の品質が向上します。そのため、低速のネットワークでもビットレートを下げることで、Foveated encoding未使用時と同じ画質になります。

Color correction

色補正です。ブライトネス、コントラスト、彩度、ガンマ、シャープの6項目を調整出来ます。

Maximum buffering

フレームバッファリングの最大値です。この値を上げるとスタッターを軽減できますが、遅延も増大します。デフォルトで2フレームが設定されています。

Enforce server frame pacing

サーバーフレームページングを強制する、Windows向けの設定です。(過去にOptimize game render latencyとして用意されていた項目)

ゲームのフレームレートがHMDのリフレッシュレートを上回らないと分かっている場合を除き、無効にしないでください。

Encoder config

細かなエンコード設定が行えます。

  • Quality preset

エンコーダーのクオリティプリセットを選択します。WindowsではRadeonでのみ機能します。初期設定はSpeedで、他にはBalanceやQualityが選択できます。設定を上げると品質が向上する代わりに負荷や遅延が増大する可能性があります。

  • Enable VBAQ/CAQ

Adaptive Quantizationと呼ばれる視覚的な品質を向上させる機能です。高速な動きや、複雑なディテールがあるシーンのエンコードに効果的です。AV1の場合はContent Adaptive Quantizationが使用されます。

  • Rate control mode

CBRが推奨設定です。VBRはアダプティブビットレートのアルゴリズムを狂わせる可能性があります。

  • h264: Profile

High/Main/Baselineから選ぶことができます。デフォルトではHighになっていますが、エンコードやデコードの負荷が高いことや設定の複雑さから逆に低品質になる原因となりやすいです。8bitまでという制約はありますが、設定が上手く行かないときはMainプロファイルを使用するのが安全です。NVENCには影響しません。

  • Entropy coding

CAVLCが推奨設定です。CABACは圧縮率は向上しますが、非常に低速なのでレイテンシーが生じる可能性があります。

  • Filler data

CBRモード使用時に、割り当てられたビットレートを下回らないようにします。主にデバッグで役立つ機能です。

  • 10-bit encoding

8bitではなく10bitでエンコードします。Radeonのドライバーバージョンによっては、色が緑色になったり赤みがかったりするなど、表示に異常が起こる場合がありました。Enable Pre-analysisと併用はできないようです。また、H.264で使用する場合はHighプロファイルが必要となります。

  • Override for 10-bit encoding

クライアントであるヘッドセットに対して、10-bitエンコードの設定をサーバー側の設定で上書きします。

  • Full renge color

フルレンジRGB(0-255)でエンコードします。無効にすると、リミテッドレンジ(16-235)でエンコードするようになります。

  • Override for full range color

クライアントであるヘッドセットに対して、フルレンジRGBの設定をサーバー側の設定で上書きします。

  • Encoding Gamma

エンコーダーに任せる場合は1.0にします。暗い部分を優先して2.2に設定する場合、色ズレやトーンジャンプが生じる可能性があります。

  • Override for encoding gamma

クライアントであるヘッドセットに対して、ガンマの設定をサーバー側の設定で上書きします。

  • Enable HDR/Force HDR sRGB Correction/Clamp HDR extended range

HDR関連ですが、手元では検証できないと思われるので割愛します。

  • NVENC/AMF

ハードウェアエンコーダーの設定です。こちらは項目の最後に別記します。

  • Software (CPU) encoding

ソフトウェアエンコードを使用する設定ですが、CPUでのエンコードは速度的に実用的ではないので基本的に使用しません。

Force software decoder

HMDやスマートフォン側でソフトウェアデコードを強制します。遅いのですが、不具合を回避できる可能性があります。

Mediacodec extra options

MediaCodecの設定が行えます。Android向けのオプションだと思われますが、詳細はよく分かりませんでした。

Transcoding view resolution

エンコード・デコードで使用する片目あたりの解像度です。

Emulated headset view resolution

SteamVRで使用する片目あたりのレンダリング解像度です。

Preferred FPS

フレームレート設定です。

Adapter index

ALVRコンポジターのアダプターを変更します。特別な理由がない限り、変更しないでください。

Clientside foveation

動作しないらしい。

Client-side post-processing

HMD側でポストプロセスを使用します。QuestとPICOで利用可能です。

  • Super sampling

スーパーサンプリングを使用して、エッジのチラつきを軽減します。HMDの解像度に対して、ALVRの解像度設定が高い場合に有用です。

  • Sharpening

エッジを鮮明にしてボケを軽減します。HMDの解像度に対して、ALVRの解像度設定が低い場合に有用です。

Upscaling

Snapdragon Game Super Resolution(SGSR)を使用します。

  • Edge direction

ウェイトの計算にエッジ方向を使用することで、僅かなパフォーマンス低下を伴いながら品質を向上させます。

  • Edge threshold

エッジしきい値は、VRを対象とする場合4.0を指定することが推奨されています。

  • Edge sharpness

エッジのシャープネスです。デフォルトでは2.0に設定されています。1.0~2.0の範囲で任意の値に設定できます。

  • Upscale factor

何倍にアップスケールをするか指定できます。倍率を上げすぎると、HMDの性能が低い場合や使用する解像度設定が高いときにパフォーマンスが低下します。

Video NVENC/AMF

NVENCはNVIDIA用の設定で、AMFがAMD用です。現在は手元にRadeonしかないのでAMFの説明のみ記載します。

Enable High-Motion Quality Boost

ハイモーションクオリティブーストを有効にします。

動きを事前分析してその情報を活用する(動きの激しいシーンのディテールレベルを調整する)ことで、エンコード品質を改善します。速い動きによって生じるモーションブラーやノイズに対処するために使用します。

AMF Encoder Settings and Tuning in FFmpeg
The Advanced Media Framework (AMF) SDK provides developers with optimal access to AMD devices for multimedia processing ...

Use preproc

AMF Pre-Processingを有効にします。これにはエッジ適応型のノイズ除去フィルターが含まれており、人間の視覚に影響が少なくより多くのビットレートを必要とする高周波のディテールを除去する事を目的とした機能です。特に低ビットレート時に効果を発揮します。

Enable Pre-analysisを使用する場合はオンにしてください。

Preproc sigma/Preproc tor

Use preprocを有効にしたときのパラメーターです。

  • Preproc sigma(AMF_PP_ADAPTIVE_FILTER_STRENGTH)

ノイズ除去フィルターの強さです。値を上げすぎるとディテールが失われます。デフォルト値は4です。

  • Preproc tor(AMF_PP_ADAPTIVE_FILTER_SENSITIVITY)

エッジ検出感度です。値が高いほどエッジが検出されやすくなり、フィルタリングされにくくなります。デフォルト値は7です。

PreProcessing and PreAnalysis
The Advanced Media Framework (AMF) SDK provides developers with optimal access to AMD devices for multimedia processing ...

Enable Pre-analysis

エンコード処理を行う前に、シーン検出・モーション解析・量子化パラメーターの決定などを含む映像解析を行います。これによってエンコード品質を向上させます。事前分析にはグラフィックス部分を使用するとのことで、これによってパフォーマンスが低下する可能性があります。

「Use preproc」を有効にする必要があり、「Reduce color banding(※多分10bitエンコードのこと)」は同時に使用できません。

PreProcessing and PreAnalysis
The Advanced Media Framework (AMF) SDK provides developers with optimal access to AMD devices for multimedia processing ...
GitHub - GPUOpen-LibrariesAndSDKs/AMF: The Advanced Media Framework (AMF) SDK provides developers with optimal access to AMD devices for multimedia processing
The Advanced Media Framework (AMF) SDK provides developers with optimal access to AMD devices for multimedia processing ...

Audio

スピーカーとマイクの設定です。

Headset

Position recentering mode

原点のセンタリングを調整する際の挙動を変更できます。

Disabledプレイスペースの原点は、ルームスケールのガーディアン設定に基づきます。
Local floor原点は床にあり、Oculusボタンを長押しでリセットできます。
Local原点はOculusボタンを長押ししてリセットする際に、現在の頭の位置からのオフセットとして設定されます。

Rotation recentering mode

回転リセットの挙動を変更できます。

Disabledプレイスペースの向きは、ルームスケールのガーディアン設定に基づきます。
YawOculusボタンを長押しすると、向いている方向にリセットできます。
Tilted横になりながらプレイするときに使用します。Oculusボタンを長押ししてリセットすると、プレイスペースごと傾きます。

Controllers

コントローラーの設定です。コントローラーの角度調整などの設定はここで行えます。

VRChat向けに新しいハンドトラッキング設定が増えているのと、Emulation modeはQuest 2 Touchのままで大丈夫みたいです。

  • Tracked

コントローラーを使用する場合はオンにします。オフにすると電源オフ扱いとなり切断されます。

  • Hand skelton

SteamVRへ指のトラッキング状態が送られるようになります

    • Steamvr input 2.0

SteamVR Input 2.0に対応したハンドトラッキングを行います。VRChatでハンドトラッキングを使用する場合は必要です。

    • Predict

浮遊感を抑えるためにハンドトラッキングの予測を行います。但し細かく震えるなどのジッターが生じる場合があります。

  • Multimodal tracking

コントローラーとハンドトラッキングの同時使用設定です。ハンドトラッキングの周波数は30Hzに低下します。ボディトラッキングと一緒に有効にすることはできないとのこと。

  • Hand tracking interaction

ハンドトラッキングのジェスチャーでコントローラーのボタンなどをエミュレートします。

  • Prediction

コントローラーのトラッキングをスムーズにする為のものです。SteamVRに送信されたトラッキングデータに対応するVsyncが発生するまでの時間を、フレーム数で指定するとのこと。2フレームが理論的には正しいようですが、ネットワークと内部(SteamVRのコンポジター)の遅延を考慮すると2.1フレーム前後が丁度良いという理由で2.10framesがデフォルトになっているようです。

90Hzでの基準なので72Hzで使用する場合は1.68framesにすると似たような調整になるはずです。(2.1フレーム x 11.11ms = 約23.3msの遅延となることから算出、23.3を1フレームの時間で割るとPredictionの目安が計算できます。)

  • Haptics

コントローラーのバイブレーション機能です。

  • Emulation mode

コントローラーのエミュレーションモードを変更できます。QuestやPICOのコントローラーの他、VIVEやIndexコントローラーとしてエミュレーションさせることが可能です。

  • Linear velocity cutoff

コントローラーの移動速度(直線的な動き)が設定値以下となる場合、動作していないものとして扱います。手ぶれ補正のようなものです。デフォルト値は0.050m/sですので、0.05メートル/秒以下なら静止扱いになります。

  • Angular velocity cutoff

コントローラーの回転速度が設定値以下となる場合、回転していないものとして扱います。デフォルト値は10.0°/sですので、回転角度が10度/秒以下なら回転が無視されます。

  • Left controller position offset / rotation offset
  • Left hand tracking position offset / rotation offset

コントローラーやハンドトラッキングの位置や回転具合を調整出来ます。左手コントローラーの設定しかありませんが、ここの設定は右手コントローラーにミラーリングされます。

Face tracking

フェイストラッキングの設定です。VRCFTで使用する場合は、Sinkを「VRCFaceTracking」に設定し、VRCFT側にALVR Moduleをインストールしておく必要があります。

予めPresetsの方で変更してあればここを弄る必要はありません。

Body tracking

Quest(Meta)とPICO(Bd)で利用できる機能のようです。VIVEトラッカーのように振る舞うかOSCとして制御するかを選択できます。

  • Prefer full body
  • Prefer high fidelity

Questでは仮想トラッカーが使用できます。Prefer high fidelityはQuest 3専用で、上半身トラッキング強化のモードです。

PICOで利用する場合、PICO Motion Trackerを装着してキャリブレーションを行った後ALVRを起動します。ボディトラッキングモードとオブジェクトトラッキングモードのどちらかを選択できます。

  • High accuracy
  • Prompt calibration on start

High accuracyはトラッカーのトラッキング精度が向上しますが、遅延が発生します。Prompt calibration on startはSteamVRと接続完了後にキャリブレーションプロセスが開始されます。

VMC

Virtual Motion Capture Protocolを使用します。OSCを介したトラッキングが行えるようです。

Virtual Motion Capture Protocol (VMCProtocol 公式ページ)
VMCProtocol - ゲーム、ツール、配信環境など、あらゆる場所で使いやすいモーションキャプチャプロトコル仕様
Publish tracking data through VMC Protocol by grillo-delmal · Pull Request #2461 · alvr-org/ALVR
The VMC Protocol is a protocol to send motion tracking data through OSC for avatar motion applications. It's implemented...

Max prediction ms

ヘッドセットとコントローラーの最大予測時間です。過度なジッターを回避するために使用します。

Connection

接続設定です。基本的に弄る必要はありませんが、USB接続でストリーミングを行いたい場合はUDPからTCPに変える必要があるとのこと。

ALVR wired setup (ALVR over USB)
Stream VR games from your PC to your headset via Wi-Fi - alvr-org/ALVR

また、パケットロスによりブロックノイズや残像、色化けといったグリッチが頻繁に発生する場合は、「Avoid video glitching」を使用します。これは破損したフレームを破棄し続けて次のIDRフレームが到達するまで映像を停止する機能です。このIDRフレームの間隔は「Minimum IDR interval」で100msが指定されています。

Extra

ALVRの挙動を変更できます。SteamVR起動時の挙動(ドライバーの設定)やログなどに関する設定があります。

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