Oculus Linkにはどんな工夫が詰まっているのか

この記事はOculus Linkを実現するための技術的な試みについて書かれた、How does Oculus Link Work? The Architecture, Pipeline and AADT Explainedの日本語訳です。


互換性のあるPCとOculus QuestヘッドセットをUSBケーブルで接続することで Oculus Linkを利用でき、開発者の追加開発コスト無しでPC VRコンテンツ利用への道が開けます。

Oculus Linkは、PCとモバイルのランタイムをつなぐユニークなインターフェイスです。この記事では、USBケーブルを介して高品質で低レイテンシのVR体験を提供するために、これらのVRランタイム統合を統合する挑戦と解決策について説明します。この記事が示唆に富んでいて興味深いものであることを願っています。

ハイブリッドアーキテクチャの構築

VRにおいて遅延を最小にするには、システム内で起こるすべてのことを最初から最後まで通して理解する必要があります。VRを実現する一連のパイプライン処理における遅延が原因で、仮想世界がプレーヤーより遅れてしまうと、結果として体験が悪くなります。しかし、遅延が予測できるのであれば、VR体験はまったく遅れる必要はありません — 代わりに、VRランタイムは、私たちにそのような小さな遅延を気づかせてしまう特定の「ゴミ」を軽減して、それを補うことができます。

多くのVR最適化の中心にあるのは、オペレーティングシステムのスケジューラからディスプレイの照射パターンや人間の知覚機構に至るまで、システムのすべての部分がどのように動作するかを、非常に具体的に理解することです。ストリーミングから最大限のパフォーマンスを引き出し、PCとOculus Quest Runtimesに組み込まれている最適化を活用するために、Oculus Linkは完全に一貫性のあるVRパイプラインを持つ必要がありました。

Oculus Linkパイプラインの説明

最上位のレベルから見ると、Oculus Linkは「Oculus PCランタイム」と「Oculus Quest上で動作するクライアントアプリケーション」の間で入出力をストリーミングすることで動作します。

PCアプリやOculus Quest上で動作するCompositor(訳注:VRの画面を作り出すシステム)に変更はありません。PC Compositorは、ヘッドセットディスプレイ用のバックバッファをレンダリングするのではなく、目のテクスチャ (アプリケーションがCompositorに送信するサーフェス) をH.264ビデオ圧縮を使用してエンコードし、そのイメージをスライスとしてUSB経由でリモートクライアント(Oculus Quest)に送信します。

Oculus Questでは、リモートストリーミングクライアントがフレームのデコード・調整・およびCompositorへの送信を行い、このクライアントがリモートHMD上でPCアプリケーションのプロキシとして機能します。また、クライアントは現在のHMD位置・入力状態・およびVSyncタイミングを使用して、PCランタイムに更新情報を送信します。これらは予測なしで送信されます。PC VRランタイムは、これらの値をターゲットの表示期間に一致するように推定します。

事実上VR Compositorの役割は、「モバイルVRランタイム」と「PC VRランタイム」に分割され、通常のVRパイプラインはハイブリッドになります。

この分割には2つの利点があります。

  1. Oculus LinkはVRランタイムを双方で活用できる ― USB経由で入出力を送信することで包括的なペナルティを被るのではなく、パイプラインは送信の最後に修正を加え、送信遅延の一部を軽減する。
  2. うまくいけば、既存のRiftやRift Sアプリケーションは、ストリーミングバックエンド(Oculus Linkの一連の仕組み)の知識がなくても動作し続ける。

予測精度の課題

VRランタイムの重要な役割は、アプリケーションがターゲット表示期間にフレームをレンダリングできるようにパイプラインの遅延を正確に予測することです。もう1つの重要な責務は、フレームが誤った表示期間に描画されないようにすることです。表示が早すぎたり遅すぎたりすると、仮想世界はブレやカクつきとしてプレーヤーの目に映ります。

この観点から、(PCランタイムとモバイルランタイムの)ハイブリッドパイプラインはそのままでは機能しません。2つのランタイムを一緒に使用する場合において、どちらもストリーミングによって追加されたパイプラインステージを考慮していません。

我々のソリューションは、PCとモバイルランタイムがお互いにマッピングする新しいフレームパラダイムです: PCランタイムの観点から、USBのストリーミングレイテンシとOculus Questの未知のパスは、Compositorの処理ステージを長くします。;モバイルランタイムの観点からすると、アプリレンダリングからフレーム送信までの未知のパスは、動的なアプリケーションのように見えます。

フレームタイミングの概要: PC

表示時間の予測は、Oculus PCランタイムがアプリケーションの遅延を最小限に抑えるための重要な手段です。もしアプリケーションが特定の表示時間にフレームを準備できないと想定される場合、アプリケーションフレーム提出後の未知のパイプラインステージを考慮し、アプリケーションは数フレーム先をバッファする必要があるでしょう。

Oculus Questとは異なり、PC VRアプリケーションは固定のハードウェア構成を想定できません。パイプラインの実行長は、ユーザーがPCに搭載しているCPUとGPUによって常に異なります。したがって、ランタイムはアプリケーションのフレームループにおけるCompositorの(CPUとGPU)時間、およびディスプレイへのスキャンアウトといった、4つのパイプラインステージにおける履歴の平均に基づいて見積もりを作成します。

Oculus Linkにおいて、Rift PCパイプラインが作る見積もりは不十分です。ただし、ストリーミングによって追加されたステージを考慮して、このアイデアを拡張することができます。Oculus Questにフレームが表示されると、ストリーミング・クライアントは終了タイムスタンプをPC ランタイムに送り返します。
VSync計算では、ストリーミングパイプライン終了のタイムスタンプがCompositor終了タイムスタンプに置き換えられます。
PCランタイムはすでに可変のCompositorの処理時間を処理する機能を備えているため、フレームレートを低下させることなく、ストリーミングのエンドツーエンドのレイテンシに合わせて予測を動的に調整します。

フレームタイミングの概要: Oculus Quest

通常、Oculus Questアプリケーションはポーズを受け取り、そのポーズにレンダリングしてから、ターゲット表示期間に提出します。Oculus Linkは、予測されたフレームがリモートデバイスから到着する点が異なります。フレームの予測表示時間が実際の表示時間と一致しない場合、その結果は予測ミスになります。1つか2つのフレームによる誤った予測は、目に見えないことが多いです。しかし、予測が揺れると、カク付きを生みます。

この問題を解決するため、Oculus LinkはPC RuntimeのAsynchronous Timewarp(ATW)とAdaptive Compositor Kickoff(ACK)を利用しています。ATWはフレームが次の表示期間に備えて常に準備されていることを保証します。ACKによってATWのキックオフが、その期限に達するまでに必要な時間で確実に行われます。ACKの詳細については、次のVolgaのOC5プレゼンテーションを参照してください。

ストリーミングでは、ACKを使用して、正しい表示期間をターゲットにしたフレームを、Oculus Quest上のフレーム間隔ごとに送信する準備ができていることを確認できます。ストリーミング遅延が表示パイプラインにおけるACKの合計推定値に加えられると、ATWは次の表示期間のためにフレームをデコード、修正、および表示できるように、ちょうどいいタイミングでフレームを開始するようにします。

AADTで高画質を実現

PCからOculus Questに高解像度のイメージを配信することは大変です、なぜならビデオコーデック(エンコーダとデコーダ)の全体的なレイテンシは、符号化に必要なビット数に直接関わってくるです。
遅延を抑えるために画像解像度を減らす余地もありますが、低解像度の画像は視覚品質を損ない、ユーザ体験を阻害します。人間の視覚系がどのように機能するかを理解するとともに、HMDのレンズ歪みを利用することで、より良い結果が得られます。

これまでに出荷されたOculusのヘッドセットはすべて、レンダリングの最終段階で画像を表示する前に歪みを補正します。これは、レンズに起因する光学ピンクッションの歪みを打ち消すためです。
その結果、HMDディスプレイの端のピクセルが、樽状の歪み(barrel distortion)によって絞られます。つまり、ディスプレイの半分それぞれにおいて、角度あたりのピクセル数は、ディスプレイの中心よりも周辺部で低くなります。

上の図は、HMDディスプレイで最終的に表示するために適用されたradial-barrel distortionの例を示しています。

最終的なピクセル密度は、GPUによって適用される歪み曲率に関連付けられています。特定のレンズのペアに対して、この補正を適用することは、正確なVR体験に不可欠です。しかし、Oculus Riftとは異なり、Oculus Questは入力画像をさらに処理できる独自のGPUを備えているます。そのためOculus Linkの場合、PCのGPUによって生成される画像にはOculus QuestのHMDレンズが必要とする正確な歪み曲率を反映する必要はありません。その結果、Oculus PCランタイムには送信前に画像を最適化する余地があります。1つの大きな最適化は、レンズが周辺領域をわずかにぼかして知覚解像度を低下させる、という特性を利用しています。

ここで、Axis-Aligned Distortion Transmission(AADT)が登場します。Oculus PCランタイムは、VRアプリによってレンダリングされた歪みのない(すなわち直線的)画像を直接送信するのではなく、軸に沿った歪みを使用して固定中心の圧縮を適用します。レンズ補正に使用される放射状の歪みは、2D方向に関係なく、イメージの中心からの距離に基づいて歪み関数を適用しますが、AADTは各軸に独立して歪み関数を適用します。そのため、AADTは矩形イメージ内の使用可能なすべての領域を使用するのに対し、放射状の歪み(radial distortion)は角に黒を引き込みエンコード/デコードリソースが無駄になり得ます。AADTイメージがOculus Questで受信されると、イメージを元の形状とサイズに変換(すなわち、修正する)してからOculus QuestのCompositorに渡します。

AADTを使用すると、3616×2000でレンダリングされた歪みのない目のバッファのペアを2016×1120まで圧縮でき、ビデオコーデックの予算を70%近く節約できます。AADTはコーデックの帯域幅を節約するだけでなく、エンコーダとデコーダがより小さなイメージで動作するようにすることで、遅延も節約します。これらの数字はOculusが推奨する仕様のハードウェアに合わせて調整されていますが、将来のリリースでは視覚の忠実度を高めるために更新されるかもしれません。

人間の視覚システムは、特にFOVの周囲のちらつきを検出するのが得意であり、Oculus Linkが歪みのない画像を直接Oculus Questに送信した場合、Oculus Quest GPUでアンダーサンプリング(またはスパースサンプリング)を行うと、周囲がエイリアシングを引き起こすことになります。AADTでは、Oculus PC Compositorが送信するイメージを準備している間、Mipmapによる異方性フィルタリングを使用します。これにより、アンダーサンプリングの問題が排除され、Oculus Quest上で行われる調整の後に生じるの知覚可能なゴミを減らします。

AADTの動作を見てみましょう。最初の例の上にグリッドが重ねられ、続いてOculus Dreamdeckアプリケーションのスクリーンショットのサンプルがいくつか表示されます。AADTの後、歪みのない中央領域が拡大さています。Oculus Quest側での調整後,中心領域の質は保たれていますが、周辺はわずかにぼやけています。

(AADT後と調整/非変形後)

結論

本稿では、低レイテンシ、正確なタイミング、高品質なビジュアルを実現する Oculus Link を実現可能にするエンジニアリングソリューションについて述べました。PCとQuestのフレーム合成フレームワークが、より良いフレーム推定のために一緒に動作するようにセットアップされていることを見まて来ました。また、ヘッドセットレンズと人間の視覚がどのように機能するかを調査し、視覚の忠実度を維持しながら帯域幅を最適化する方法を示しました。

念のために言っておくと、Oculus Performance HUDを使って、アクティブなPC VRアプリのパフォーマンス統計 (アプリとPC Compositorのレイテンシを含む) をいつでもモニターすることができます。このツールはOculus Linkが有効になっていれば、すぐにOculus Questで動作します。

詳細な技術情報についてはOculus Link OC6プレゼンテーションを、Oculus Linkの使用方法についてはOculus Link Compatibility Pageを参照してください。

Oculus Linkが皆さんと皆さんの消費者にとって素晴らしい体験になることを願っていますし、今後さらに革新的でインパクトのある技術を構築していくことを楽しみにしています。

-Oculus Linkチーム


この記事の雑感など

この記事の中で、利用者が知っておくべきなのはAADTの部分でしょう。以前から、描画解像度がダイレクトに遅延に影響してくる点は、ALVRやVirtualDesktopでも問題になっていました。

この問題をAADTの手法を使うことで改善したのは大分画期的だと思います。AADTのアイデアは後にVirtual Desktopにも取り入れられ非常に品質が向上しました。

その一方で、比較画像を見て貰えば分かるのですが、映像がやや小さくなったような見え方をします。普通に使ってる分には違和感を感じるものの、気づきにくい点なのでは無いかと思います。プレイ感覚も異なってくるので留意しておくべき点です。必要に応じてSteamVRの設定を調整すると良いのでは無いかと思います。

スポンサーリンク