グローバルイルミネーション(6) 表面下散乱と関与媒質

パストレが実装できていると追加実装はそれほど難しくない(理屈としてはだけど)。
パストレでは物体から物体あるいは光源にぶつかる度に反射と放射輝度を計算している。
表面下散乱と関与媒質を考慮するには、ある意味忠実に散乱過程をシミュレーションする事で良いはず。
つまり、パストレで物体から物体あるいは光源にぶつかる計算においてその道中でパスの進路を変えてやれば良い(散乱イベント)。
これが散乱(のはず)。
 
問題は道中のどこで散乱するか?
で、散乱のパラメータには散乱係数σs[1/m]、吸収係数σa[1/m]がある。両方の寄与による減衰は
exp(-(σs+σa)×距離)
※散乱係数等が途中で変化しない場合。σt=σs+σa
散乱のパラメータに依存してると考えるのが妥当だと思うが
乱数 < σs なら散乱イベント
と考えたいがσsは1未満という事は無いのでこの考え方は違うだろう。
-log(乱数) / σt
がパス長さ未満なら散乱イベント?
※上式は関与媒質等でよく使われる減衰に応じた重点サンプリング距離の計算。
 
これがもっとも妥当な気がするがそれらしい出力が得られなかった。
実装のどこかでミスっている可能性は十分ありえる。
そこで
乱数 < 1 - exp(-σs×距離) なら散乱イベント
としてみたが、やはりそれらしい出力が得られなかった。
 
ふと気が付いたのが配置した物体の反射係数。
すべて拡散反射なのでざらついた表面の設定だがこの係数が大きすぎるのでは無いか?と。
つまり、散乱によるもやっとした光より物体表面からの拡散光が大きすぎて目に見える出力になって居なかったのでは?
そう思って拡散反射の係数をもとの70%程度にしてみたら
イメージ 1
こうなった。見た目には正しい散乱光が再現されている(気がする)。
この時点では乱数 < 1 - exp(-σs×距離) なら散乱イベントという方式。
これが妥当なのかどうかは不明だ。