ちょっと時間があったので,前々からやってみたかったパストレーシングのプログラムを書いてみました.実装にはmemoRandomさんのページを大いに参考にさせていただきました.
実装したのは一番簡単なNext Event Estimation有りのパストレーシングです.
実行結果はこんな感じです.
反復1回目 | 12回目 |
60回目 | 253回目 |
1222回目 | 6073回目 |
16384回目 |
わかってはいたのですが,単純なパストレーシングでは収束がだいぶ遅いですね.6000回くらい反復してみてもまだ少しざらついています.
レイの交差判定も単純に全オブジェクトととっているので処理時間も遅く,簡単にマルチスレッドで並列処理してはみたんですが最終結果の16384回目までに約10時間かかっています.
それでも時間さえかければ非常に綺麗な出力が得られますね.これまで,リアルタイムCGしかやってなかったのでちょっとオフラインレンダリングの品質に感動しました.
また時間があれば双方向パストレーシングとかBVHとか試してみたいです.
追記
屈折を実装したので,もう一回レンダリングしてみました.
また,ライトの扱いに微妙なところがあったのできちんとその辺を実装しなおしました.
ガラス球の下の集光具合が美しいです.
ただ,ライトをきちんと高輝度な物体として扱うようにしたため,かなり反復してもまだノイズが乗っています.
4回目 | 128回目 |
1024回目 | 32768回目回目 |