Oculusが生み出した神技術Asynchronous Spacewarpの裏側を知る

2016年12月8日

SpacewarpとはOculusが開発した、VRを動作させるために必要なPCのスペックを大幅に下げるられる技術です。この記事では仕組みを詳細に解説したOculusの公式記事を紹介しています。

概要やざっくりとした理解をしたい場合は別の記事を参照してください。

Asynchronous Spacewarpの概要とよくある誤解

以下は詳細な説明です。


TL;DR(長すぎて読めない人向けの要約): Oculusは、システムのハードウェア要件を引き下げ、より幅広いハードウェアでコンテンツ品質を維持するための、新しい技術をリリースしています。

Spacewarp(ASW)は、同じコンテンツからほぼ同じ出力を生成するのに必要なCPU / GPU時間をほぼ半分にするフレームレートスムージング手法です。 Timewarp(ATW)と同様に、ASWは自動化されており、開発者の手間をかけずに有効になります。

VRは必要としている

説得力のあるレンダリング、つまり存在感を作り出すのに十分な速さで、実世界に迫る程のVR空間をレンダリングすることが必要とされています。 VRハードウェアはコンパクトであると同時に、電力効率も非常に優れたものでなければなりません。

VRソフトウェアは、システムとアプリケーションのあらゆる面から、リアルタイムに近い応答性を要求します。 開発者は、没入感と楽しい体験を生み出すために、これらすべての要素に留意する必要があります。 このことを考えれば、私たちがこのような短期間で成し得たことは驚くべきことです。

Oculusでは、DirectModeや Timewarpなどの技術を導入しており、開発者が遅延を最小限に抑え、全く異なるソフトウェアやハードウェア構成における体験を向上させるのに役立てています。 今日、私たちは既存のコンテンツを、より手頃な価格のハードウェアにまで何もせずに広げる新しい技術をリリースしています。

再びTimewarpを振り返りましょう

初期のDK2プロトタイプでは、最初に基本的なTimewarp(TW)を実証しました。これは頭の向きの回転だけを利用して、描画フレームを可能な限り少ない遅延で再投影することでした。それは描画処理と同期していましたが、頭の動きを使って画像が視覚的にどこの位置に当てはまるかを予測することで、遅延を削減する効果を実証しました。

Asynchronous Timewarpは、Riftのロンチ時に導入され、Timewarpの非同期版として自動的に提供されました。それは、すべてのフレームにおいて最後に出力された目への描画結果に介入することによって機能します。これはアプリケーションが次のフレームの描画に時間がかかりすぎていたとしても同様です。

ATWの詳細については、次の記事を参照してください。

  • Oculus Riftにおける Timewarp
  • Timewarp Examined

ASWは、ATWによってバーチャルリアリティをスムーズにした体験の上に構築されています。 ATWは、ユーザの経験が頭の回転に一致することを保証します。 つまり、画像は常にヘッドセット内の正しい場所に表示されます。 ATWがないと、VRアプリケーションがフレームを描画し逃すと、スローモーションのビデオ再生と同じように、世界全体がドラッグされます。 VRの中でこれに遭遇するのは非常に厄介で、大抵は体験を損ないます。 ASWはこれを以上のことを行い、シーン内のアニメーションや動きを追跡して、全体の体験をスムーズにします。

この魔法はどんなものですか?

ASWは、VRアプリケーションによって生成された過去のフレームから、予測されたフレームを生成します。 表面上、これはATWのように聞こえますが、これはただ1つのことだけを予測します:それはユーザーの頭の回転です。 これは多く遅延ををカバーしていますが、それは魔法の弾丸ではありません。 ASWは、仮想現実体験内の、すべての目に見える動作をカバーするためにATWと連携して動作します。 これには、文字の動き、カメラの動き、タッチコントローラの動き、およびプレーヤー自身の位置の動きが含まれます。 もしアプリケーションがディスプレイのフレームレートよりも遅れていたとしても、大抵はスムーズさや楽しさを維持することができます。

この推定の例を以下に示します。 フレーム0とフレーム1の右から左に移動していて(1/45秒間隔で生成された)握られた銃があり、その動きからフレームを予測したいようなシーンがあります(フレーム1の 1/90秒後)。 我々は銃の動きを検出し、アプリケーションの代わりに表示する新しいフレームを生成します。

frameextrapolationoptimizedforgif

バーチャルリアリティについて言えば、ATWとASWは兄弟であり、お互いを補完するものです。 Timewarpは頭の回転を扱うのに最適です。 実際、離れた場所にある静的な画像には完璧です。 360度ビデオや地平線の機能などのアプリケーションでは、Spacewarpは不要です。 逆に、Spacewarpは、アニメーションオブジェクトの近くではかなり良いですが、頭部の回転を追跡するにはそれほど優れていません。

OculusはASWにより、ATW上に可能な限り最高の仮想現実体験を構築しています。 実質的な遅延は低く保たれ、ヘッドトラッキングも前と同じように滑らかです。そして、VR内を動く要素も滑らかに保たれます。

どういう裏があるの?

ATWの場合と同様に、ASWは開発者の努力なしで、全てのアプリケーションに対して適用され有効になっています。

しかし、完全なるタダ飯はありません。 ASWは画面のリフレッシュレートの半分を下回ると、十分に適応されません。 不完全な予測により、何が表示されているかに応じて視覚的なゴミが生じる可能性があります。 典型的な例には次のようなものです:

  1. 急激な明るさの変化。 雷、振れるライト、フェード、ストロボライト、およびその他の急激な明るさの変化は、ASWによる追跡は困難です。 シーンのこれらの部分は、ASWが認識可能なブロックを見つけようとすると、揺らぐことがあります。また、半透明のアニメーションでも、同様の現象が起きることがあります。

  2. オブジェクトがなくなった(Disocclusion)跡。 Disocclusionは、オブジェクトが別のオブジェクトの外へ移動する場合のグラフィックス用語です。オブジェクトが動くと、ASWはオブジェクトが残した空間を埋めるための何かを必要とします。 ASWは何がそこにあるのかは分からないので、後の空っぽの空間を埋めるために伸ばされます。 45 fpsフレームの間に物が画面上で遥か遠くに移動することはほとんどないので、これら跡は大抵小さく、見つけにくい。例として、スクリーンショットの予測された画像をここで詳しく見ると、リボルバーの右側にわずかな反りが見られます。

  3. 繰り返された模様が高速に動く場合。例えば、鉄の門の横に走っていて、それを見ているかもしれません。オブジェクトの一部は他のオブジェクトと似ているので、どのオブジェクトがどこに移動したのかを判断するのは難しいかもしれません。 ASWでは、このような誤った予測を最小限に留めるべきですが、しばしば顕著に見られます。

  4. 頭に固定された(Head-Locked)要素の移動が速すぎると追跡できない。一部のアプリケーションでは、頭の動きに追従する固定されたコックピット、HUD、またはメニューを使用します。アプリケーションが固定レイヤーの支援機能を使わず、自前で表示しようとすると、背景が固定されたオブジェクトに対して高速に動くことになるため、結果にブレが生じる可能性があります。いくつかの状況ではASWだけでそれなりに動きますが、ユーザーは頭が速く動かしすぎると、適切に追跡できなくなり、結果が滑らかにならなくなります。 Oculus Rift SDKが提供するHead-Lockedレイヤ(ovrFlag_HeadLocked)を使用すると、理想的な結果が得られます。

ポイント4を除いては、これらのゴミができる状況を避けるべきではなく、見た目に注意するべきです。 ASWは、90fps以下での描画をカバーするために、すべてではない大部分の状況でうまく機能します。私たちはASWでの体験が、ブレに対する重要な改善であり、ほとんどの状況においてフルレートでの描画とほぼ区別できないと感じています。

開発者として、ASWが最適に働くようにするためには何をすればよいですか?

ASWは以前はVRを駆動できなかったクラスのコンピュータでの動作を可能にします。これは、推奨スペックのシステムでは、ASWの出番がないことを意味します。 開発者は推奨スペックのシステムで90 fpsでの描画を維持する必要があります。 そして、開発者からの追加の努力なしで、体験は大抵は最小限のスペックのマシンまで広がり、必要に応じてASWを使用します。これは、推奨スペックのシステムで90 fpsで動作するアプリケーションは、通常、最小スペックのシステムでは45 fpsで動作するためにです。 ASWとVRは一般的に以下の試みから恩恵を受けます:

  1. HUDやメニューのようなHead-Lockedな内容にレイヤーを使用します。これらのアイテムは、Oculus Runtime Compositor のレイヤーを使用して、より正確に追跡されます。レイヤーを正しく使用すると、ASWが使用できなくてもこれらの要素が鮮明に表示され、正しく追跡され、テキストの画質と可読性が向上します。

  2. 表示フレームの時間が1/90秒(または他の一定の値)であることを絶対に前提にはしないでください。フレーム数ではなく、経過時間に基づいてアニメーションや物理を含むアプリケーションシミュレーションを実行します。現在のVRヘッドセットには色々な種類のフレームレートがあります。今日の範囲は45 fps〜120 fpsです。計算を任意の期待値に固定すると、アプリケーションが他のハードウェア上で間違った速度で実行されてしまいます。アプリケーションをフレームレートに合わせると、不具合や貧相な体験をうみだしてしまいます。

  3. ユーザーに理解しやすい品質設定を提供します。単純な、低/中/高クオリティの設定で、ユーザーは好みの品質のスイートスポットを調整できます。難解な設定や分かりにくい設定では、ユーザーはアプリケーションの設定を調整しにくく、ソフトウェアに悪影響を及ぼします。

これにはスーパーコンピュータが必要ですか?

マシンの能力が高ければ高いほど、ASWが必要な可能性は低くなります。 ASWおよびそのシーン予測は、アプリケーションがVRディスプレイの公称フレームレートを維持できない場合にのみアクティブになります。つまり、最上級のマシンを構築した場合、実際にASWが表示されないことがあります。

ASWのハードウェア要件は控えめです。 この機能は、現在の世代のすべての GPU(RX 400シリーズ)および旧世代または現世代のNvidia GPU(GTX 900または1000シリーズ)で有効になっています。

ASWにはWindows 8以降が必要ですが、Windows 10の最新バージョンが最適です。 私たちは、Microsoft、、Nvidiaの協力を得てこの技術を開発しました。

システムには近日中に登場

ASWは、Oculus Runtime 1.10のリリースで利用可能です。 この機能をサポートするすべてのハードウェアおよびシステムで有効になり、すべてのアプリケーションで有効になります。 ASWは、アプリケーションが描画にいつもより余計な時間がかかるたびに自動的に動作します。 開発者にとって、Oculus Debug Toolは、ASWを開発目的で制御するためのサポートを提供します。

この記事はOculus開発者向けブログ記事Spacewarpの日本語訳です。

スポンサーリンク