フォト

Google AdSense

  • AdSense
無料ブログはココログ

« Unity 5からAndroidWearへ出力 | トップページ | 2月に再入荷かぁ »

2015.01.06

VRのためのステレオレンダリングを高速化するアイデア

たまたま"High performance stereo rendering for VR"で知ったスライドですね。

High performance stereo Rendering for VR
https://docs.google.com/presentation/d/19x9XDjUvkW_9gsfsMQzt3hZbRNziVsoCEHOn4AercAc/mobilepresent?slide=id.p

Oculusなどのステレオレンダリングが必要な環境でDirect3D11で、CPU/GPUの観点でステレオレンダリングを高速化するアイデアが書かれています。

最初に、紹介してるのは、何のひねりも無い2回描画ですが、1回目にD3D11CommandListsにコマンド積んで再利用する方法。

次が、ジオメトリシェーダ使う手ですね。SV_RenderTargetArrayIndexセマンティクスを使って左右のビューポートにトランスフォーム変えたPrimitiveをそれぞれ発行する手法ですね。これもよく知られる手ですね。これはGeForce GTX 660でジオメトリのスループットがすごく低下したということでパフォーマンスは良くないようですね。あと、OpenGL ES などサポートしない環境とかあるわけですね(Geometry Shaderが無い環境)。

最後がインスタンシングを工夫する手法で、これがこのスライドが言いたいメインの話題ですね。インスタンシングを使えば、一度のDrawCallで複数描画できるのは知られてますが、じゃあ1つのビューポートに対してどうやってステレオで描くかということが紹介されていますね。

この手法では、必ずオブジェクトはDrawInstancedで2回描画にして、SV_InstancedIDセマンティクスで分ける計算を行うようですね。このあたりは比較的思いつきやすい話ですね。

で、この手法の問題になるのが、1つのレンダーターゲットを左右で分けるので、左右の境界、つまり中心でどうやってクリップを行うか?という点ですね。SV_ClipDistanceやSV_CullDistanceを使用するようですね。

実際に擬似コードが書かれているので実装は楽だと思います。

« Unity 5からAndroidWearへ出力 | トップページ | 2月に再入荷かぁ »

Programming」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« Unity 5からAndroidWearへ出力 | トップページ | 2月に再入荷かぁ »