Scalable Ambient Obscurance
SSAOの手法の一つ。
Scalable Ambient Obscurance よりペーパーとプレゼンテーションがDLできる。両方を見ながら理解した。
すべての画像は以下より引用
paper
pdf
Alchemy AOをベースにパフォーマンスの改善を行ったもの。
https://gyazo.com/0e79e316386cc4aadecd412619af06ee
hr.icon
AlchemyAOとの比較
深度バッファのみしか使用しない
法線や位置情報がいらない
Depthから復元する
スケーラブルである
オクルージョン半径を増やしたときに負荷がかからない?
depthのmipmapを使い範囲によってフェッチ時のmip levelを上げる
hr.icon
精度の高い深度バッファが必要
まず、法線や位置情報を高精度に復元するために精度の高いDepth Bufferの作り方が書いてあった
(2.1 High-Precision z Prepass)
model-view行列を倍精度で計算する
host上 = CPU側での事前計算?
zFarを無限遠んにする
浮動小数点ALU演算が減る
左側のベクトルの掛け合わせ
よくわからんけどv = vPと左側?の掛け合わせでhalf bit分精度が上がるらしい
hr.icon
深度バッファからの復元
https://gyazo.com/93e854949de4363b7f8f45786d57c6af
【Zd】world space z
c0, c1, c2は Zfar=-∞のとき、(Zn, -1, +1)、それ以外のとき(ZnZf, Zn-Zf, Zf)
【xc, yc】world space position
w: screen resolution w
h: screen resolution h
P: projection matrix
x',y': screen position (texcoord)
zc: x',y' depth
【nc】法線
dFdx dFdyをつかった法線を使うやつ
参考 レイマーチングの法線をdFdxとdFdyで導出する - Qiita
hr.icon
螺旋サンプリングパターン
paperの2.3. Distributed AO Sample Passの後半部分にサンプリングパターンを螺旋状にしたというのと(6),(7)、開始角度のオフセット(8)、mip levelに関わる式が(9), (10)にある。