2010年6月24日木曜日

bidirectionalインテグレータの設定メモ

Dispersive Refraction有効な状況でbidirectionalと戯れる日々ですが
公式wikiも参考にしつつ設定関連がなんとなく分かってきたのでメモ。


bidirectionalの設定可能な通常オプションはbouncesのみ。
あるフォトンというか光路のパスにおける屈折や反射の回数の合計が
指定した数値に達したらトレースを終了するという値(のはず)。

デフォルトでは12になっているけど、より大きい値を指定すれば
パスをトレースする深さが増え、正確なレンダ結果が得られる。
その反面、計算回数も増えるのでレンダ時間も長くかかる。
逆も然りで小さい値ではレンダは短くて済むが、パストレースが
省略され表現されるべきディテールが出なくなる可能性もある。

レンダ時間への影響をチェックするためデフォルトの12から10へ
減らして昨日のシーンをレンダしてみると、時間は約10%短縮。
いくつか他のシーンも試してみると程度のばらつきはあるがレンダ
時間が短くなるのは間違いない雰囲気。


で、複数のシーンで試してみた感じだとbouncesの目安としては

K = Om + 2*Ot + L + 1

ただしOm、Ot、Lはシーンに存在するオブジェクトの数であり
Om:不透明なオブジェクトの数
Ot:一部もしくは全部が透明なオブジェクトの数
L:ライトや光源として使用しているオブジェクトの数
とする。

上記Kの値に対して

1. K≦5の場合、bouncesは5
2. 5<K<12の場合、bouncesはKの値を使用
3. K≧12の場合、bouncesは12

という感じ。経験則なので根拠はなにもありませんがw

例えば点光源一個と床替わりの板ポリ一枚、その床の上にsuzanneを
置く。床とsuzanneのマテリアルはmatteを指定というシーンなら

K= 2 + 2*0 + 1 + 1 = 4となり、K≦5なのでbouncesは5

もう一例。部屋替わりの箱の内部に、点灯している豆電球一個と
天井にマテリアルでエミッタを設定したエリアライト用の板ポリ
一枚の場合。箱のマテリアルはmatteとする。このシーンだと

K = 2 + 2*1 + 2 + 1 = 7となり、5<K<12なのでbouncesは7

ポイントは豆電球をOtとL、天井の板ポリをOmとLとして重複して
カウントするところ。被写体以外のオブジェクトの数が増えたり、
照明が複雑になっても、この条件式ならそれなりに対応できるはず。
あと、上の例には挙げなかったけどポータルはノーカウントで。

とこんな感じの目安を設定したものの、ダイヤモンドだとか
カッティンググラスみたいなものをレンダする際には条件式より
大きめのbounces値が必要なこともあるはず。


なにはともあれ、テストレンダは必須ということで。


---------------------------------------------------------------

コメントなどありましたらこちらへ->web拍手