Oculus Quest ALVRのセッティングによる遅延の検証
今更感はありますが、ALVRのVideo項目のセッティングによって、どのくらい遅延が変動するのか検証してみました。
検証内容
ALVRを立ち上げ、STEAMVRのホーム画面を動きならが、スクリーンショットで、ALVRのServer画面のスクリーンショットを取っていきます。 遅延を適当に3回ずつ記録しました。
ALVRのVideo設定をいじっていきます。
検証時には、下のようにALVR Serverのスクリーンショットを撮っています。このうち、各Latencyを見ていきます。
各Latencyの意味は、下記の通りです。
| 項目 | 内容 | 
| TotalLatency | PC上のVRアプリが画面を描写してから Oculus Questが画面を描写するまでにかかった時間の合計  | 
| EncodeLatency | PC上のVRアプリが描写した画面を転送するために エンコードに掛かった時間  | 
| EncodeLatencyMax | EncodeLatencyのうちの最大値 | 
| TransportLatency | エンコードした画面のデータをPCからOculus Questに 転送するのにかかった時間  | 
| DecodeLatency | 転送された画面のデータをOclus Quest上でデコードするのに 掛かった時間  | 
TotalRatencyが、他の項目の合計にはなっていないようですので、他にも遅延要因はあるのでしょうが、表示で分かるのはここまでですので、これらを参考にしていきます。
検証環境
下記の記事と同じ環境で検証しています。
Bitrateの影響
設定条件
| Codec | H.265 | 
| Bitrate (Mbps) | 30~150 | 
| Resolution (%) | 100 | 
| Buffer size (kB) | 200 | 
結果
Bitrateが上がると、当然遅延が大きくなります。支配的なのは、DecodeLatencyのようです。
今回の検証環境では、PCのパワーよりもOculus Questのパワーによって遅延が発生しているという事でしょう。
Bitrateの推奨値が30Mbpsだというのも納得できる結果です。というのも、72Hzで動作するOculus Quest、1フレーム当たりの描写時間は13.9msecです。DecodeLatencyを見ると、50Mbpsを超えると1フレームの描写に間に合っていないことになります。
Codecの影響
設定条件
| Codec | H.264 | 
| Bitrate (Mbps) | 30~150 | 
| Resolution (%) | 100 | 
| Buffer size (kB) | 200 | 
結果
H.265からH.264に変更すると、EncodeLatencyが下がるようです。とは言え、TransprtLatencyやDecodeLatencyには有意な差はありません。
今回の環境では、遅延の観点から見れば、H.264とH.265で有意な差はなさそうですが、EncodeLatencyが高くなるような状況では、H.264の方が遅延が少なるなるでしょう。
ただし、H.265はH.264の2倍の圧縮レートがあると言われています。30Mbps/H.265と60Mbps/H.264が一緒ならば、H.265にしてBitrateを下げた方が画質面・遅延面共に優位なのではないでしょうか。
Video Resolutionの影響
設定条件
| Codec | H.265 | 
| Bitrate (Mbps) | 50 | 
| Resolution (%) | 50~150 | 
| Buffer size (kB) | 200 | 
結果
Resolutionを上げると、 DecodeLatencyも増加しますが、特にEncodeLatencyが激変します。PCのGPUに依存していると言えるでしょう。
Buffer sizeの影響
設定条件
| Codec | H.265 | 
| Bitrate (Mbps) | 150 | 
| Resolution (%) | 100 | 
| Buffer size (kB) | 100~404 | 
結果
Buffer sizeを100kBにした時に、劇的にTransprtLatencyが増加しました。また、画像の乱れが多々発生しました。Buffer sizeは推奨値200kBよりも下げると不具合がありそうです。また、200kBと404kBで大きな差は発生していません。
Buffer sizeは推奨値である200kBから触る必要はなさそうです。
まとめ
下記にまとめた記事が”アレ”な結果になってしまったので、物のついでと、今回はALVRのVideo設定の遅延について検証しました。
個人的には、どの項目をいじればどうなるのか、理解できたように思います。
・Bitrate:DecodeLatencyが支配的。Oculus QuestのSOC依存の項目。
 推奨値30Mbps以上では、フレーム落ちが発生していると考えて良さそうです。
・Codec:H.264の方がEncodeLatencyが下がる傾向。
・Video Resoution: EncodeLatencyが支配的。PCのGPU依存。
・Buffer size:推奨値200kBで問題なし。
結論としては、特に不満が無ければ、推奨値である下記の設定が最もバランスが良さそうです。
| Codec | H.265 | 
| Bitrate (Mbps) | 30 | 
| Resolution (%) | 100 | 
| Buffer size (kB) | 200 | 
私自身は、ALVRは下記のように高画質に振って、Adobeイマーシブ環境で使っていることが多いです。
| Codec | H.265 | 
| Bitrate (Mbps) | 150 | 
| Resolution (%) | 100 | 
| Buffer size (kB) | 200 | 
ALVR自身良く出来ていますが、遅延が気になります。6DoFで動きたい場合は、やはりOculus Rift Sの方が使い心地が良いですね。