[GI] Japanese memo of "Rasterized Voxel-based Dynamic Global Illumination"
参照
- GPU Pro4 : "Rasterized Voxel-based Dynamic Global Illumination"
- "Rasterized Voxel-based Dynamic Global Illumination"
概要
- GPU Pro4 にあった記事を読んだのでそのメモです.
- 一言で言うと, GPU を利用したボクセル化をする Light Propagation Volume(LPV) です.
- ボクセル化は SVOGI (Sparse Voxel Octree Global Illumination)と同様に GPU のラスタライザを使った方式で行います.
- ライトの書き込みは RSM ではなく, ライト単位でボクセルに対する長方形への書き込みで行います.
- 伝搬と間接光計算は Light Propagation Volume の方式で行います.
- 間接光の計算結果は RGB の Spherical Harmonics の (0,1 次) として, 32x32x32 の解像度のボクセルに書き込まれます.
-
- 以下, 大まかな処理の流れです.
(0) シーンのボクセル化
- SVOGI と同様に GPU のラスタライズの機能を使って, シーンのポリゴンをボクセル化します.
- ポリゴンを XYZ の 3 軸のうち, 射影面積が大きな方向をジオメトリシェーダで選択してから, Atomic で排他制御をしながら構造化バッファ(RWStructuredBuffer
)に対して書き込みます. - Voxel の構造体の要素は以下のようになっています.
struct VOXEL { uint colorMask; // エンコードされたカラー uint4 normalMasks; // エンコードされた法線 uint occlusion; // 0 より大きな時はボクセル化されたことを示している. };
(1) ライト情報の書き込み
(2) ライトの伝搬
- Light Propagation Volume と基本的には同様の方法で, 自分の XYZ 軸方向に対して近傍にある 6 ボクセルに対してライトの情報の伝搬処理を全体に対して 2 回行います.
- 1 回目の伝搬処理では最初にライトを伝搬させておくため, ボクセルの有無による遮蔽処理を行わずに行います.
- 2 回目の伝播処理ではライトリークを防ぐために, ボクセルの有無によるライトの伝搬の遮蔽処理を考慮します.
- また この伝搬処理についてはコンピュートシェーダで行います.