Oculus Quest ALVRのセッティングによる遅延の検証

今更感はありますが、ALVRのVideo項目のセッティングによって、どのくらい遅延が変動するのか検証してみました。

検証内容

ALVRを立ち上げ、STEAMVRのホーム画面を動きならが、スクリーンショットで、ALVRのServer画面のスクリーンショットを取っていきます。 遅延を適当に3回ずつ記録しました。

ALVRのVideo設定をいじっていきます。

検証時には、下のようにALVR Serverのスクリーンショットを撮っています。このうち、各Latencyを見ていきます。

各Latencyの意味は、下記の通りです。

項目内容
TotalLatencyPC上のVRアプリが画面を描写してから
Oculus Questが画面を描写するまでにかかった時間の合計
EncodeLatencyPC上のVRアプリが描写した画面を転送するために
エンコードに掛かった時間
EncodeLatencyMaxEncodeLatencyのうちの最大値
TransportLatencyエンコードした画面のデータをPCからOculus Questに
転送するのにかかった時間
DecodeLatency転送された画面のデータをOclus Quest上でデコードするのに
掛かった時間

TotalRatencyが、他の項目の合計にはなっていないようですので、他にも遅延要因はあるのでしょうが、表示で分かるのはここまでですので、これらを参考にしていきます。

検証環境

下記の記事と同じ環境で検証しています。

Bitrateの影響

設定条件

CodecH.265
Bitrate (Mbps)30~150
Resolution (%)100
Buffer size (kB)200

結果

Bitrateが上がると、当然遅延が大きくなります。支配的なのは、DecodeLatencyのようです。

今回の検証環境では、PCのパワーよりもOculus Questのパワーによって遅延が発生しているという事でしょう。

縦軸について、各遅延は左側、TotalLatencyのみ右側の軸を参照してください。

Bitrateの推奨値が30Mbpsだというのも納得できる結果です。というのも、72Hzで動作するOculus Quest、1フレーム当たりの描写時間は13.9msecです。DecodeLatencyを見ると、50Mbpsを超えると1フレームの描写に間に合っていないことになります。

Codecの影響

設定条件

CodecH.264
Bitrate (Mbps)30~150
Resolution (%)100
Buffer size (kB)200

結果

H.265からH.264に変更すると、EncodeLatencyが下がるようです。とは言え、TransprtLatencyやDecodeLatencyには有意な差はありません。

縦軸について、各遅延は左側、TotalLatencyのみ右側の軸を参照してください。

今回の環境では、遅延の観点から見れば、H.264とH.265で有意な差はなさそうですが、EncodeLatencyが高くなるような状況では、H.264の方が遅延が少なるなるでしょう。

ただし、H.265はH.264の2倍の圧縮レートがあると言われています。30Mbps/H.265と60Mbps/H.264が一緒ならば、H.265にしてBitrateを下げた方が画質面・遅延面共に優位なのではないでしょうか。

Video Resolutionの影響

設定条件

CodecH.265
Bitrate (Mbps)50
Resolution (%)50~150
Buffer size (kB)200

結果

Resolutionを上げると、 DecodeLatencyも増加しますが、特にEncodeLatencyが激変します。PCのGPUに依存していると言えるでしょう。

縦軸について、各遅延は左側、TotalLatencyのみ右側の軸を参照してください。

Buffer sizeの影響

設定条件

CodecH.265
Bitrate (Mbps)150
Resolution (%)100
Buffer size (kB)100~404

結果

Buffer sizeを100kBにした時に、劇的にTransprtLatencyが増加しました。また、画像の乱れが多々発生しました。Buffer sizeは推奨値200kBよりも下げると不具合がありそうです。また、200kBと404kBで大きな差は発生していません。

Buffer sizeは推奨値である200kBから触る必要はなさそうです。

縦軸について、各遅延は左側、TotalLatencyのみ右側の軸を参照してください。

まとめ

下記にまとめた記事が”アレ”な結果になってしまったので、物のついでと、今回はALVRのVideo設定の遅延について検証しました。

個人的には、どの項目をいじればどうなるのか、理解できたように思います。

検証結果まとめ

・Bitrate:DecodeLatencyが支配的。Oculus QuestのSOC依存の項目。
 推奨値30Mbps以上では、フレーム落ちが発生していると考えて良さそうです。
・Codec:H.264の方がEncodeLatencyが下がる傾向。
・Video Resoution: EncodeLatencyが支配的。PCのGPU依存。
・Buffer size:推奨値200kBで問題なし。

結論としては、特に不満が無ければ、推奨値である下記の設定が最もバランスが良さそうです。

CodecH.265
Bitrate (Mbps)30
Resolution (%)100
Buffer size (kB)200

私自身は、ALVRは下記のように高画質に振って、Adobeイマーシブ環境で使っていることが多いです。

CodecH.265
Bitrate (Mbps)150
Resolution (%)100
Buffer size (kB)200

ALVR自身良く出来ていますが、遅延が気になります。6DoFで動きたい場合は、やはりOculus Rift Sの方が使い心地が良いですね。