VR

VR機器のグラフィックス その2

前回に引き続き、VR機器のグラフィックスレンダリングの話しをしたいと思います。

前回は、シェーダーを利用してリアルタイムに処理する Lens Distortion 補正や、ステンシルマスクを利用して描画エリアをレンズ範囲に制限する Outside Culling についてまず紹介し、VR機器の肝となる技術のひとつである Rotational Reprojection の基礎について解説しました。

今回は Rotational Reprojection(応用編)と Variable Resolution Rendering について勉強して行きましょう !

はじめに

VR機器ではトラッキングとレンダリングは密接な関係があります。

VR酔いの強い要因のひとつにレイテンシーがあり、ディスプレイ表示のタイミングでのHMDの位置と姿勢を精度よく推定し、なおかつその推定値にマッチしたVR画面を提示することが重要になります。

しかしながら通常VR画面の生成には 40 msec あるいはそれ以上のレンダリング時間がかかるのが普通ですので、90Hz native 環境を前提にしても 4 フレーム以上先のHMDの位置姿勢を推定し、それに適合するVR画面を今から作り始める必要があるわけです。

それを実現するための技術として、Rotational Reprojection という技術を紹介しました。VRシステムとアプリケーションが連携し、まず粗い推定値をベースにVRアプリケーションが画作りを開始し、ディスプレイ出力直前の精度の高い推定値からVRシステムが画面の最終調整を行ってディスプレイ表示します。これにより、理論的に回転方向のレイテンシーをゼロにできます。

また、この技術をベースにフレーム補間も行われていることを説明しました。

しかしながら Rotational Reprojection も万能ではなく、問題になるケースがあります。ここから解説を始めます。

Rotational Reprojection(応用編)

問題になるケース

VR画面には、主に3つの座標系があります。World座標系、Head座標系そしてHand座標系です。

  • World座標系:いわゆるVR空間のこと、絶対的に動かない座標系
  • Head座標系:HMDに張り付いた座標系、ユーザーが頭を動かすと連動して動く座標系
  • Hand座標系:コントローラーや手に張り付いた座標系、ユーザーが手を動かすと連動して動く座標系

厳密に言うと、Rotational Reprojection が成立するのは、World座標系にある動かないオブジェクトに限られます。ではそれ以外のオブジェクトに何があるでしょうか ?

  • Reticle:画面の中心に張り付いた十字カーソルや照準のこと(Head座標系のオブジェクト)
  • 字幕:画面の下部になどに書かれるシーン説明やメニューなどのGUI(Head座標系のオブジェクト)
  • 銃など手に持つオブジェクトやそれに張り付いた操作説明などのGUI(Hand座標系のオブジェクト)

代表的なものを3つあげてみましたが、これ以外にも、World座標系で動いているオブジェクトや、自分が車に乗って移動している場合だと相対的に流れる風景もこれに当たります。

ではどのような問題として現れるのか、代表的な事例で考えてみましょう。

Reticle や字幕+フレーム補間 Reprojection の場合

たとえば Reticle と字幕が配置されるようなケースを考えてみます。VRアプリケーションは、VRシステムから教えてもらった 50 msec 後のHMDの位置姿勢推定値から、以下の水色の点線で示す画面を作ったとします。

これにフレーム内補正 Reprojection を施すケースを考えてみましょう。VRアプリケーションから提示される予測遅延時間(この場合は50 msec)の精度が高ければ、システムによる最終調整はたとえば以下の黄色い点線範囲に示すように微量なので、Reticle や字幕はほぼ中央に配置され問題になりにくですが、

たとえば 45Hz -> 90Hz のフレーム補間 Reprojection を行うケースでは、必ず 11.1 msec のずれが生じますので、ユーザーが頭を動かしていれば必ず位置ずれ(厳密には回転方向なので方向ずれ)が生じます。

たとえばシステムがディスプレイ表示するエリアが以下の黄色い実線範囲のようになるので、比較的顕著に Reticle と字幕が左にずれることになります。

したがって、この例のようにユーザーが一定の速度で首を右に回しているケースを仮定しフレーム補間 Reprojection を行うことを考えると、Reticle と字幕の位置が黄色い点線範囲のようになる場合と黄色い実線範囲のようになる場合が交互にやってくることになります(もちろん背景は変化して行きます)。

結果 Reticle と字幕はきれいに二重に表示されることが確認できます。これは目への刺激になり得ますし、特に Reticle はいつも視野の中心に配置されるのでとても気になります。

フレーム内 Reprojection であれば Reticle や字幕が中心からずれはするものの、カクカク動くことはないので大きくずれて行かない限り気付きにくいですが、フレーム補間 Reprojection だと原理的にフレーム間隔分の時間ずれが発生し、しかも 1 フレームおきにその状況が発生するので、とても気付きやすい現象として現れます。

対策

この問題を解決するために、画面をRotational Reprojection を施すレイヤーと施さないレイヤーのふたつのレイヤーに分けてレンダリングし、グラフィックスパイプラインの最終段でオーバーレイしてディスプレイ出力する方法があります。

この手法はHMD座標系のオブジェクトにはとても効果的で、Reticle や字幕が常に画面の同じ場所に表示されます。

実際に活躍している実装があるのはこのあたりまででしょうか。しかしながら、厳密にはこれでも足りないケースがあります…

たとえば上の図のようなWorld座標系でさらに水平方向にボールが動いているようなシーンを考えた場合、上記のふたつのレイヤーによる実装では不足があります。

これに対する対応策として、静的と動的ふたつの Reprojection レイヤーを持ち、たとえば静的なレイヤーは 45Hz -> 90Hz のフレーム補間 Reprojection で、動的なレイヤーは 90Hz native のフレーム内 Reprojection で動作させてオーバーレイする方法が考えられます。

もちろん技術的には可能ですが、その場合はフレーム補間 Reprojection ではなくすべて 90Hz/120Hz native で動作させる努力をした方がシステム全体としてシンプルというのが現状の考え方かと思います。

以上、Rotational Reprojection の技術的な解説でした。

実際の状況

では実際に各社の対応状況はどうなっているのかを簡単にまとめておきます。

Oculusでは Asynchronous TImewarp (ATW) および Asynchronous Spacewarp (ASW) という技術がサポートされています。前者はフレーム出力が間に合わなかったときのみ前のフレームをシフトしてフレーム補間する手法、後者は常に前のフレームをシフトしてフレーム補間する手法(フレーム補間 Reprojection に相当)です。ASWでは以前は3DoF(すなわち回転方向)の動きの対応でしたが、現在は6DoF(すなわち回転方向+並進方向)の動きへの対応を謳っています。これはスゴイですね !

HTC Viveでは当初は Interleaved Reprojection と若干後発で Asynchronous Reprojection という技術がサポートされていました。前者は前のフレームと同じフレームを常に再投影することによってフレーム補間を行う手法、後者は間に合わないときのみ前のフレームと同じフレームを再投影する手法です。現在は Motion Smoothing すなわちHMDの姿勢変化情報と過去2フレームの画像から次のフレームの画像を推定して補間出力する、OculusのATW相当の技術がサポートされています。このあたりはこちらの記事(【VR】Steam VR の Motion Smoothing とは?最適な設定方法は?)を参照ください。

どちらも、厳密にVR画面表示のレイテンシーを極小にするための技術というよりは、フレームレートを一定に維持できないような不安定なPC環境でも見かけ上安定したフレームレートを維持するための技術、と読めますね。実際幅広いパフォーマンスのPC環境前提ならではの大きな苦労があるのが実情です。

一方システムのパフォーマンスという意味では一定レベルを確保しやすいPS VRでは、Rotational Reprojection(基本編/応用編)相当の技術がサポートされていることが、ゲーム開発者会議等で開示されています。ただし、フレーム補間 Reprojection は60Hz -> 120Hzのみで、45Hz -> 90Hz Reprojection はサポートされていないようです。実際60Hz -> 120Hzと比べると45Hz -> 90Hzははみ出る黒画が増える方向ですから、そのあたりの品質の劣化を嫌ったというのはあるのでしょうね。

このあたりは当初からVR酔いなどの不快体験対策に力を入れていたPS VRのこだわりのようなものを感じざるを得ません。

Variable Resolution Rendering

可変解像度レンダリング、これは人間の視覚特性に基づいてGPUの演算負荷を軽減する技術です。具体的には、視点周辺は密解像で、それより外側は比較的粗解像で表示することにより実現します。

視細胞

こちらの記事(色を認知する視細胞のお話。視細胞〜最も色の見えと関係性の深い細胞)に詳しく書かれていますが、主に色を識別する錐体は中心窩付近に多く分布し、主に明暗を識別する杆体は網膜全体に広がっています。

実際文字列を読んでいて、ある文字を注視した場合、ひらがなだとその文字から5文字くらい離れていても読めるかも知れませんが、難しい漢字だと3文字離れているともう読めないと思います。つまり人間の視覚は、視点付近のごくわずかな領域が高解像度で、それよりも外側は急激に低解像度になっていきます。

この特性を利用してレンダリング解像度を調整し、GPUの演算負荷軽減を目指すというわけです。

Fine Central / Coarse Peripheral Rendering

まず比較的シンプルな方法として、中央は密解像、周辺は粗解像でディスプレイ表示する手法を紹介します。Fixed Foveated Rendering などと言われることもあります。このアプローチにはふたつの利点があります。

  • Lens Distortion 補正による中央部の解像度低下の回避
  • 人間の視覚特性を考慮したGPU演算負荷削減

前者は前回の Lens Distortion 補正で説明しましたが、下の図のような関係になります。

つまり左下の画像ように歪ませた画面がディスプレイ表示されます。このとき中央部ほど拡大される傾向すなわち解像度が落ちる方向に歪んでいることに気付きます。

一方視覚特性としては視点周辺を高解像度に認識する上に、通常画面中央部に視点は集まりやすいですから、そのエリアが低解像感になることはVR機器として避けたい状況です。

この状況を改善するために、画面の中央エリアは高解像度に、周辺部は低解像度に描画し、VRアプリケーションが境界の重複処理方法を指定し、VRシステムがブレンドして Lens Distortion 補正を行いディスプレイ出力する手法があります。

たとえばこのように周辺用の低解像度画像と中央用の高解像度画像を用意し、左のドーナツ状エリアと右の円形エリアを通常線形にブレンドします。特に高解像画面の広いエリアを低解像画面の小さなエリアにマップすることにより、中央部の高解像感を維持できます。

この操作をLRの双眼画で行いますので、アプリケーションは合計 4 枚画を用意する必要があります。もちろん高解像の大きな 1 枚画(LRで 2 枚)から処理することも可能ですが、面積が 2 乗で増えてしまうので、ピクセル数(すなわち演算負荷)的にこのアプローチの方が格段に有利と言えます。

Foveated Rendering

Fixed に対して Dynamic Foveated Rendering と言われたりもします。最近とても盛り上がっている技術なので、言葉としては聞いたことがある人も多いのではないかと思いますが、Fine Central / Coarse Peripheral Rendering と類似の技術です。ただし FOV 中心(画面中心)ではなく視点を中心に高解像度化を行う技術です。GPU負荷の削減が大きく期待できる技術で、ディスプレイ解像度を今後 4K. 8K と上げていくために必須のレンダリング技術と言われています。

ただし視線トラッキングが必要になるため、そのためのシステムをHMD内に装備する必要があります。

Foveated Rendering についてはNVIDIAの動画がわかりやすいので見てみましょう。


これを見ると、エイリアシングなどちらつき系は視覚刺激として致命的な印象を受けますね。

トンネルビジョンというのは注視しているところ以外が見えなくなってしまう現象で、周辺を一律にぼやかして周辺部の存在感がなくなるとその効果が顕著になるので、解像度は下げつつコントラストを強く残すことによって周辺部の存在感を残しトンネルビジョン効果を避けるアプローチが取られています。

このように注視箇所近辺以外の解像度を落とすことは、視覚刺激として問題ないと言えそうですが、視線トラッキングの精度や遅延にも大きく依存するので、高解像度エリアは視覚的に必要な領域よりも広めに取ることにはなると考えられます。

Foveated Rendering は高解像度ディスプレイに対応しても計算負荷が爆発的に上がらないようにするための手法ですが、実際その効果はどの程度のものなのでしょうか ?

Pimax Vision 8K Plus の Foveated Rendering Benchmark が公開されていますが、明らかな効果が見て取れます。Vision 8K Plus は8K解像度のディスプレイにより 200 度の FOV を実現しています。これに対して通常のVRヘッドセットでは FOV は 100 度程度ですから、より Foveated Rendering による負荷削減効果は見込めるはずです。

NVIDIAの技術

ここではVRSとVRSSのふたつの技術を紹介します。

VRSは Variable Rate Shading です。これは 16×16 ピクセルのエリアごとに 7 つの Shading Rate から選択して適用できる機能です。Multi-Resolution Shading (MRS) や Lens-Matched Shading (LMS) と言った技術を発展させたものになりますが、これを利用することによって段階的な Foveated Rendering が可能になります。

一方VRSSは Variable Rate Supersampling です。画面中央部のみに最大8倍のスーパーサンプリングを適用できる機能で、画面全体にかけるときと比較して30%以上のパフォーマンス改善が示されています。

おわりに

今回も長くなってしまったのでここまでとします。

Rotational Reprojection の応用編として、Reprojection 技術が持つ問題点とその対策について解説し、ふたつのレイヤーを用いる手法を紹介しました。

また、可変解像度レンダリングの代表例として、Fine Central / Coarse Peripheral Rendering と名付けた技術について説明し、その発展形としてディスプレイ解像度の向上へ向けた必須技術と言われる Foveated Rendering についても勉強しました。

今回も結構勉強になったでしょ !? ここで解説した内容はすべてのVRヘッドセットに適用されているわけではありませんし、細かい実装は各社各様と言えますが、王道と言える技術内容を説明しているつもりなので、これを理解したうえで各社の技術記事などを読むと、さらに理解が深まると思います。

次回はグラフィックスの最終回の予定です。お楽しみに !


   
関連記事
  • VRとは ? ARとは ?
  • VR・AR技術の適用事例
  • VR・AR機器の構造 その4 – 実際のAR機器を見てみよう !
  • VR・ARをささえる技術
  • VR・AR機器のトラッキング その4 – ARゴーグルのトラッキング
  • VR・AR機器の臨場感向上へのアプローチ その3 – 聴覚・前庭感覚

    コメントを残す

    *

    CAPTCHA