Gregory Igehy

Dancing at hemisphere coordinate

Notes of ”Ambient Occlusion Fields and Decals in Infamous2”

  • 3D テクスチャに遮蔽情報を事前に書き込んでおく, テクスチャフォーマットは RGBA8
    • RGB : 遮蔽物の遮蔽コーンの平均の方向ベクトル
    • A : 遮蔽コーンの幅
  • 解像度は大体 1 軸が 8-16 ボクセル
    • 車 : 32x16x8
    • ベンチ : 16x8x8
    • ゴミ箱 : 8x8x8
  • 事前計算
    • GPU で各ボクセルの位置で, 32x32 解像度の 6 面のキューブマップを描画
    • 結果を CPU で読み込んで, 重心位置を平均の方向とし, 遮蔽のピクセル数から遮蔽コーンの幅を求める
  • 描画する AO のバウンディングボックス
    • オブジェクト自体のボックスの面の面積の大きさから, AO のバウンディングボックスをどれだけ膨張するか? を決める
    • AO バッファには乗算ブレンドで書き込んでいく ( 1 - A0) * ( 1 - A1) * ....
  • AO のバウンディングボックスの境界から外では AO が計算されないために, 境界の外から急に AO が白くなる問題
    • ボックスの境界での最大の Alpha の値を求めて, その値を使って事前に全体 Alpha を補正しておく
    • 具体的には, そこの地点での AO の値が真っ白になるようにする
  • ボクセルの解像度が不足しているので, ボクセル中にオブジェクトの境界があるときに中の遮蔽情報が外に伝播してしまう問題 (ライトリーク)
    • 3D テクスチャのサンプリングする地点を, 今の地点から法線方向に半ボクセル分だけオフセットする