パストレーシングしてみた

ちょっと時間があったので,前々からやってみたかったパストレーシングのプログラムを書いてみました.実装にはmemoRandomさんのページを大いに参考にさせていただきました.

実装したのは一番簡単なNext Event Estimation有りのパストレーシングです.
実行結果はこんな感じです.

image1 image12
反復1回目 12回目
image60 image253
60回目 253回目
image1222 image6073
1222回目 6073回目
image16384
16384回目

 

わかってはいたのですが,単純なパストレーシングでは収束がだいぶ遅いですね.6000回くらい反復してみてもまだ少しざらついています.
レイの交差判定も単純に全オブジェクトととっているので処理時間も遅く,簡単にマルチスレッドで並列処理してはみたんですが最終結果の16384回目までに約10時間かかっています.
それでも時間さえかければ非常に綺麗な出力が得られますね.これまで,リアルタイムCGしかやってなかったのでちょっとオフラインレンダリングの品質に感動しました.

また時間があれば双方向パストレーシングとかBVHとか試してみたいです.

追記
屈折を実装したので,もう一回レンダリングしてみました.
また,ライトの扱いに微妙なところがあったのできちんとその辺を実装しなおしました.
ガラス球の下の集光具合が美しいです.
ただ,ライトをきちんと高輝度な物体として扱うようにしたため,かなり反復してもまだノイズが乗っています.

4 128
4回目 128回目
1024 image
1024回目 32768回目回目

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください