イベント
[GDC2008#37]後処理で実現するリアルタイムAmbient Occlusion
リアルタイムCG業界で最近話題になることが多い大域照明(グローバルイルミネーション)。「Ambient Occlusion」(以下AO)というのは,大域照明の手法の一つで,Ambient(環境光)が届かない部分を暗くする,ざっくばらんにいえば,柔らかい影をつけるための技法の一つだ。CGでいう環境光は,どんな暗いところにも一律に足してやる明るさのことで,昔はいろんなところからの反射光をまとめて足し算だけで代替していたのだが,AOでは,周りからの光が届きにくい部分をちゃんと暗くしてやろうという処理となる。
真面目に環境光を考えると,どうしても周りからの光がどれくらい届いているかを計算しなければならず,膨大な事前計算ですべてのオブジェクトのポリゴンに対しての明るさを求めておいたり,なんとかリアルタイムに計算しようとしたりするわけなのだが,今回紹介された方法は,レンダリングの後処理でリアルタイムに実行できる手法である。
描画が一通り終わったスクリーン上で,各ピクセルに描画されたポリゴンの視点からの距離をデプスバッファに記録していく。以降,このデプスバッファはハイトフィールドとして扱われ,このデプスバッファをもとに処理が進められる。
調べるピクセルに相当するデプスバッファ位置を中心に,その法線方向を頂点とした半球を設定する。次に法線の周りにスライスして,二次元に展開していく。二次元にしたときに,中心からレイを飛ばし,周りの凹凸と干渉しない角度を求めていく。これを何段階かの方向で繰り返すと,その点がどの方向からどれくらい閉塞されているかが算出できる。これをもとに陰影をつけるわけである。
この手の処理では,周りからどの程度光が伝達されているかを求める手法が多いのに対し,今回のものはどの程度の光が周りからそこに届くかを逐次考える方式となっている。これならば事前計算が必要ないので,物体の移動や変形といったアクションにも対応できるなどメリットが多そうだ。
わずか20分と非常に短時間のセッションながら,かなり実用的な手法が紹介されていたといえる。
- この記事のURL: