Rust レイトレーシング ⑧ 素材準備

今更このようなサイトを発見してしまったのでここも参考にしていこうと思う。
レイトレーシング入門1「光線の基本と反射」 - Qiita

色々な素材を利用できるようにするために、Material Traitを定義してこれを持つ構造体を各素材とする。


このTraitを実装する型はDebugとSyncとSendも実装する?
マルチスレッドでcloneされる要素となるためには必要。


Colorの代わりにMaterial Traitを実装する型のものをメンバにもつ。ここでArcで囲んだポインタにしておかないと、
マルチスレッドでクローンして渡せないと思われる。


senceでは物体に当たったら、その物体の素材に当たる光を渡して、帰ってくる光(この場合拡散光)を再びcolor関数に入れることで色々な物体からの拡散光とalbedo(反射光の比)を要素毎にかけてreturnする。


ついでにγ補正した。

f:id:katakanan:20180211154516p:plain:w300
おまけで8スレッドで動かしているとき
f:id:katakanan:20180211154703p:plain:w310

Programming Rust: Fast, Safe Systems Development

Programming Rust: Fast, Safe Systems Development