Ambient Occlusion vs. Indirect Diffuse

自分はambient occlusionがあまり好きではありません.

理由は絵が汚くなりやすい上に不自然な影が出来てしまうからです.特に物と物が接している部分が不自然に暗くなってしまい,光の当たっている領域にこの影が出来ていると非常にわざとらしく見えます.逆に汚れた感じの絵には向いていると思いますが.

ambient occlusionはその名の通り,環境光(ambient)からの遮蔽度(occlusion)であって,決して天空光の模倣では無いのですが,結果として近い絵が得られるためにVFXでも良く使われます.そしてこのパスにsurfaceの色(通常はtextureの色)のパスをコンポジット上で掛け算して,indirect diffuseのような絵を作ります.

元々,この手法はGIがまだ一般的ではなかった頃,PRManや既存のray tracerを使ってindirect diffuseのような柔らかい感じの絵を作るために使われてきました.当時はambient occlusionをレンダリングするだけで相当な時間がかかっていて,GIなどはとてもじゃなく制作に使える速度じゃなかった筈ですが,最近ではもう当たり前のように使われています.

そこで前から思っているのは,ambient occlusionの代わりに,ホンモノのindirect diffuseパスをレンダリングした方がいいんじゃないか?って事です.ambient occlsionパスがこれだけ短い時間でレンダリング出来るんだから,出来る限りシンプルにした別のシェーダを用意して,BRDFはLambert,反射回数は一回だけにしてしまえば,許容できる時間(一枚1-2時間くらい?)でレンダリング出来るんじゃないでしょうか.

あまり物理的に正確な結果ではありませんが,ambient occlusionに比べたら格段に良い結果が得られると思います.color bleedingも表現出来ますし,コンポジット後の最終的な影はかなり自然な感じになるはずですから,説得力が上がるでしょう.

パイプラインを整備する必要がありますが,試してみる価値はありますね.

2 Responses to “Ambient Occlusion vs. Indirect Diffuse”

  1. Bee Says:

    ambient occlusionは色々と制約があるおかげで
    高速に計算出来るので,計算時間については
    ホンモノのindirect diffuseよりも,かなりの
    アドバンテージがあると思います.

    例えば,ray tracingで計算する場合には,
    ambient occlusionではrayについて,遮蔽があるか
    無いかの計算だけでよいので,普通の光源からの
    影の計算におけるテクニックが色々と使えますよね.

    ホンモノのindirect diffuseでは,ray tracingの場合だと
    どこにrayがhitしたかを計算しなければならないので,
    ambient occlusionよりは,かなり計算が遅くなるはずです.
    要するにfinal gatheringと同等の処理になります.

    でも,現在の計算機環境で試してみたら,実はそれほど
    許容できない時間がかかるわけでもない,ということは
    ありそうなので,試してみるべきですね:->

  2. ますお Says:

    ええ,indirect diffuseの方がだいぶ遅いだろうというのは想像できるのですが,それでも1-2時間なら使いたいなあ,と.
    例え同じシーンのambent occlusionが10分で終わるとしてもです.

Leave a Reply