Rust レイトレーシング ⑥ スーパーサンプリング


Rustでの演算子オーバーロードを行うために、構造体にAdd/Mul/Div Traitを実装する。

これを用いることで足し算、掛け算、割り算の演算子を使える。

スーパーサンプリングは光線の方向にランダムな要素を加えて、その方向から得られた色から平均をとることで物体のジャギを抑える事ができる。

rand::thread_rng().gen_range(a, b);

でa~bの乱数を得られる。 rand crateが必要なのでCargo.tomlに追加する。


ついでに実行時引数でスーパーサンプリングの回数を変更可能にした。

スーパーサンプリングを10回行った場合。
f:id:katakanan:20180202015103p:plain:w300

f:id:katakanan:20180202015220p:plain:w250f:id:katakanan:20180202015233p:plain:w250
左がスーパーサンプリングなし。
右がスーパーサンプリングあり。
なんとなくjpgっぽさが?ある

あと実行時間の比較。
f:id:katakanan:20180202015924p:plain
雑だがスレッド数8のときのほうが5倍ぐらい速い。


Programming Rust: Fast, Safe Systems Development

Programming Rust: Fast, Safe Systems Development