Gポイントポイ活 Amazon Yahoo 楽天

無料ホームページ 楽天モバイル[UNLIMITが今なら1円] 海外格安航空券 海外旅行保険が無料!

log

2013.05.15 C++:深度プリパスの導入

今回は色々ポストエフェクトを導入して速度が落ちてきたので深度プリパスを使用することで
速度が向上できるのではないかと、ちょっとした実験をしてみました。

その前に深度プリパスについて少しだけ説明でもしておきます。
通常はカラーバッファ+深度バッファで描画し、深度値が描画されている深度値より
手前の場合にバッファを更新するというのが古典的な手法ですが。これだと複雑なシーンだと
無駄なアウトプットがかなり増えてしまいます。例えばビルや家や木が複雑に立ち並ぶ
シーンだと、酷いケースで地面と空の描画で1~2ピクセル、ビルや家や木の描画でもう
5~10ピクセル、キャラクターの描画でさらに3~5ピクセルといった感じで同じピクセルに
10数回以上描画するケースが発生したりします。けれど不透明なピクセル群ならば実際に
必要な色は最後に描画する1回だけでいいはずです。
これを解決する手法が深度プリパスであり、深度値の書き込みとカラーの書き込みをそれ
ぞれ別のパスに分け、最初に深度値だけ書き込み、次のパスでカラーを書き込む際は
深度値が深度バッファの値と同一の場合にだけ書き込むようにすることでカラーバッファ
への描画がピクセル当たり1~2ピクセル程度に抑えることが出来るようになります。

マルチレンダーターゲットはアウトプットが大きくなるため、そこで今回は深度プリパスで
高速化できるのかどうか検証してみましたが。レンダーターゲット3枚で36FPS程度のシーン
が40FPSまで上がるようになりました。いやぁ、思ったより速度が上がりました笑。
マルチレンダーターゲットが1~2枚の頃に試した時は速度が上がるどころか少し落ちた
ような記憶があるのですが、今回深度プリパスは意外と使えることが分かりました。