ディファード(遅延)シェーディングの検証

ディファードシェーディングは二段階のパスを必要とする

  1. ディフューズ、スペキュラー、法線、深度、位置の情報を各テクスチャへ出力
  2. 1段階目で得られた情報を元にライティング計算を行い最終画像を出力

1段目

ディフューズ

法線

深度

位置

2段目

ライティング後

結論と課題

点光源ならば無制限に配置できると考えていたが、ピクセルあたりに影響を与えられる光源の数はGPUの処理能力に依存する。ライトの影響を受けないピクセルに対しては可能な限り早期にキャンセルする方法が必要。

ライトの影響範囲の球体モデルを使用してステンシルマスクを作成する。シェーダー内の早い段階で処理を終了させる。などなど...

スクリーン空間アンビエントオクルージョンの検証

スクリーン空間上の凹凸を調べアンビエントオクルージョンを疑似的に表現する。現在はランダムテクスチャを使用していない為、全ピクセルが十字方向にサンプリングしている。

結論と課題

スクリーン空間内の深度から凹凸を判定する関係から、本来なら拡散光が減衰しない場所に暗い部分が表れる。原理の問題なので根本的な解決は難しい。

ポストエフェクト

ライティング後の画像に加工を加える。

縮退した画像から輝度1.0以上のピクセルに対してガウスフィルターを通してブルーム効果画像を生成して加算合成している。

ブルーム

結論と課題

フレアやってみましょう

最終画像

上記効果をすべて使用した最終画像

課題

どのテクニックを利用してもシェーダーを起動しない早い段階でのキャンセル方法を検討する必要がある。

シェーダーは隣接ピクセルの条件判定が同じようにすると高速になるらしい(要検証)