反射光

レイトレーシングの3発目。 物体の表面で反射する光を計算してみます。

物体表面の交点を新たな視点として、再帰的にトレースして色を求め、 物体の反射率を係数としてかけて反射光を算出します。

再帰の処理が終わらない場合があるので、 反射率を掛け算していって、大元の呼び出しへの影響が小さくなった時点で、 再帰を終わらせるようにしています。

物体表面を新たな視点としてトレースする時、 起点の交点そのものは次の交点の候補から外す処理を追加しています。

v4.patch

v4.patch メモ
$ cat v4.patch | ( cd rt ; patch -p1 )

$ cd rt

$ ./cg.py eyep=[0,0,0],200,10 sec=10 name=out/reflect1 div=16 fps=2

球体の根元に四角の色が写り込むようになりました。

$ ./cg.py eyep=[0,0,0],200,10 sec=10 name=out/reflectc2

  :

wh : 296056/307200(96.3%) : rest 6.17s : 2018/03/19 10:47:01
wh : 298242/307200(97.0%) : rest 4.95s : 2018/03/19 10:47:01
wh : 300420/307200(97.7%) : rest 3.74s : 2018/03/19 10:47:00
wh : 302607/307200(98.5%) : rest 2.53s : 2018/03/19 10:47:00
wh : 304786/307200(99.2%) : rest 1.33s : 2018/03/19 10:47:00
wh : 306958/307200(99.9%) : rest 0.13s : 2018/03/19 10:47:00
wh : 307200/307200(100.0%) : fin 2m 49.17s
frm : 300/300(100.0%) : fin 13h 43m 27.77s

13時間半超え。 四角の平面にも青い球体が写り込んでます。 再帰は時間がかかりますね。