Primary Sample Space Metropolis Light Transport (PSSMLT

以前、メトロポリス光輸送は大した効果が無いといった事を書いている。
しかし、以下(とても参考にさせて頂いている)。
  参考)穴空間[http://kagamin.net/hole/]
  メトロポリス光輸送法の実装例がある。
ここは明白な効果が出ている。

あらためて論文を見ながら自分の実装と上記実装例を眺めて見たが明らかな間違いは見当たらなかった。そこで膨大なサンプリングで永遠と計算させてみてあることに気が付いた。
よく分からないが凸凹した壁紙のような結果になった。なんというかまさに壁紙のような感じで規則的のような、、、

あれっ????。これがヒントになった。
本来は普通の乱数を呼ばずにPrimarySampleの乱数を使わなければ成らないところが普通の乱数が呼ばれてたりしていた。
これは完全にコードミス!!
乱数を抽象クラスにして色んなタイプの乱数を呼べるようにしていたが、そこを間違えていた。コードを見て「なんでこんな変な作り方してんだ?」と思うような実装。気が付かなかったぁーーー。

で改めて結果だが。
イメージ 1
絶大な効果が出た。左がPSSMLT、右がパストレ。
納得の結果だ。反省してます。