DK2のHMDにおける、レンダリング結果のPixel密度の分布について

Oculus Rift DK2のHMDスクリーンにおける、シーンのレンダリング結果のPixelの分布に関する考察です

DK2の視野の中心のPixel密度について

 Oculus Riftに代表される、近年リリースされているHMDの中には、広範囲の視野を確保するため、光学的に収差を補正するのではなく、収差をマッピングしたレンダリングを行うことで、レンダリングを成立させているものがあります。
 DK2では、レンズが強い糸巻きの歪収差を持つため、シーンが樽型の配置になるようにレンダリング結果を再マッピングしています。そのため、歪収差補正前のレンダリング結果が、HMDのスクリーン上では、視野中心付近では拡大傾向になり、視野周辺付近では縮小傾向となります。加えて、歪収差補正の前段で使用する通常の透視変換も、視野の中心付近のPixel分布は疎になり、視野周辺が密になる傾向があります。
つまり、単一の透視変換のレンダリング結果に、さらにDK2の歪収差補正のレンダリングを掛けると、視野中心が疎、周辺が密というPixel分布の傾向が強調されることになります。
 以前このブログのPostで、これに関する考察を行い、CubeMapの角周辺の密なPixel分布になっている箇所が、HMDの視野の中心に来るようなレンダリングを提案しました。こうすることで、DK2の歪収差補正と、CubeMapのPixel密度の分布が相殺する形で、良好なPixel分布が得られるのではないかと考えたわけですが、今回これをテストしてみました。

CubeMapRenderingの結果

以下のスクリーンショットは、通常の単一の透視変換でレンダリングしたものと、CubeMapを用いた場合になります。Gridが無い状態だと区別が付きにくいので、Gridを表示したものを用意しました。
懸念された、CubeMapからのDistortionRenderingにおけるCubeMapの境界ですが、Seamless Cubemap Samplingが可能なGPUでは、境界は殆ど判別できない結果となりました。
ovr_01
ovr_02
ovr_04
ovr_05

中間レンダリング結果のHMD上におけるPixe分布の検証

次に、中間レンダリング結果のPixelがHMD上における最終レンダリング結果で、どのようなPixel密度になるのかをレンダリングしてみました。
下記のグラフが、ピクセル密度をあらわします。範囲は0.3~8.3 でclampしています。単位は(中間RT pixel)/(HMD pixel)となっています。
color_bar

DK2の使用レンズはAレンズで、Eye Reliefなどは、デフォルトの状態で検証しました。
まずは、単一の透視変換を用いた通常のレンダリング時のPixel分布です。片眼の中間RTの解像度は、1182x1461pixel, FoVは(90H, 100V)で計算しています。これらの数値は、OVRSDKがデフォルトの値として使用しているものとほぼ同一です。

ovr_planner
この図からわかるとおり、OVRSDKは、視野の中心が、おおよそ1sample/pixelになるように、中間RTの解像度を決定しているようです。
中間RTのPixel分布は、視野周辺に向かって上昇し、レンズ視野範囲外と思われる部分で、5.0 sample/pixを超えるという状況になっています。

次にCubeMapを用いた場合のPixel分布です。CubMapのRT解像度は, 1071x1071x3 となっています。Pixel数は上記の約2倍になるように計算しました。

ovr_cube_758_2
図の通り、視野の中心では、高いPixel密度を確保できたものの、視野周辺に向けて急速にPixel密度が落ちています。上記の通り、約2倍のPixel数を用いてレンダリングしたにも関わらず、視野中心を除いては、良好なPixel分布とはいえません。

まとめ

今回は、CubeMapレンダリングによって、DK2のHMDにおける中間RTのPixel分布を改善できるかどうかを試してみましたが、結果的には、従来通りのレンダリングの方が良好な結果が得られることが解りました。
ただし、今回の実験を通じて解ったことがあります。

視野中心のみレンダリング品質を上げても余り意味が無い

まず、テストを通じて感じたのは、視野の中心部分と周辺部分にレンダリング品質に差があると、それが気になり、全体的なHMD体験の向上にはつながらないということが解りました。つまり、視線追跡の類の技術と組み合わせて使わない限りは、このようなレンダリングは、あまりり大きな意味が無いことがわかりました。

通常のレンダリングパスで発生している、中間RTのPixelの無駄

単一の透視変換を用いた通常のレンダリング時のPixel分布で解るとおり、HMDのレンズを通じて殆ど見えないPixelに、中間RTのPixelが密に配置されています。これは仕方が無い事ですが、このPixelは基本的に描画する必要のないPixelとなります。
従って、中間RTをレンダリングする際に、一番初めに視野の形状(円形)に穴の開いたObjectを、視点付近で描画し、不要なPxielを早期棄却できるようにすることで、実質的なレンダリングのPxiel数を減らすことが出来るはずです。
実際には、TimeWarpによる補正を使用する場合は、レンズ視野角以上のPixelを使用する可能性があるので、確保する補正幅を残して行う必要がありますが、HMD上での見た目以上に、中間RTでは多くのPixelがそこに分布していることが解ったので、試してみる価値はあるかもしれません。