Japanese memo of "Multi-Resolution Ambient Occlusion"

概要

  • AO には計算するカーネルのサイズが異なる 3 種類の周波数のものがあり, それぞれ計算の方法が異なることに関する話です.

中周波な AO

  • カーネルサイズが中サイズのもので, 下図のように主に「物体同士の交差部分に入るオクルージョン」です.
  • 具体的には地面に刺さっている岩などの不自然さをオクルージョンによってなくす用途などに使われます.
  • これは SSAO (スクリーンスペースのアンビエントオクルージョン)で計算できるものです.

高周波な AO

  • カーネルサイズが小サイズのもので, 下図のように「物体が自分自分に落とす細かいオクルージョン」を示すために使われます.
  • このタイプの AO の計算方法には以下のような方法があります.
    • 「もし 草や茂みのジオメトリをプロシージャルで作っている場合は, AO もプロシージャルに求める」
    • 「オフラインで AO を計算して, 頂点あるいはテクスチャに結果を書き込んでおく」
  • 実際, このレベルの詳細度の AO は「AO の計算に必要な幾何学的なディティール」がスクリーン中に表示されないことが多いので, SSAO で求めるのはキツそうです.


低周波な AO

  • カーネルサイズが大サイズのもので, 下図のように物体同士の大まかな位置関係を示すためのオクルージョンです.


  • 計算方法としては, 真上からシャドウマップを撮影してそのシャドウマップをぼかしてから参照します.
  • 同様の手法は下図のように Assassin's Creed 3 や 4 でも使われており, World AO と呼ばれていました.
  • この World AO について先輩と話して考えてみたところ, ぼかしたハイトマップを参照して自分の高さとの差分を取ることで結果的に自分の高さと周囲のハイトマップの差分を低コストで得ることができる, ということがわかりました.
    • 自分の高さ < ぼかしたハイトマップ のときは周囲の方が高いので AO が暗くなります.
    • それ以外のときは AO は白のままです.
  • また下図をよく見ると, ハイトマップが低い方向にだけハイトマップをぼかしていますね.


おまけ

  • 「AO は言葉どおり, 環境光だけに適用すべき !」と書いてありました.