Ray Tracing in One Weekendやった

Ray Tracing in One Weekendというものが Twitter で流れてきたので土日でやった。やるだけだと半日でできる。今までこういう画像をどうこうする系は、単純にメタデータを取り出すとか変換する以外だとやったことなかったので楽しい。

Ray tracing rendering result

このチュートリアルでは C++を使ってやっているのだけど、とりあえず一通りやって、最後の画像を生成するところでめちゃくちゃ時間がかかったので、並列化しようと思った。C++でマルチスレッドのプログラム書くのは面倒くさいなぁと思ったので、Go で書き直した。多分書き直すほうが面倒くさい。Go で書き直したら今度は Rust でも書き直してみたくなったので、Rust でも書いてみた。Go に書き直すときは全くリファレンス見ずにかけたけど、Rust は全然覚えてなくて笑った。Rust 書くたびに Trait object あたりの扱いと、Iterator あたり(というか Java で言う Collection のようなもの)をどうやって扱うのか良くわからないので、誰かに教えてほしい。

最後の部分で被写界深度を考慮してボケさせる、っていうところで、やってる操作はわかるけど、なぜそれでボケるのかがよくわからない。そもそもボケるっていうのがどういう現象なのかが分かってない気がする。物理のお勉強が必要。

3D レンダリングをリアルタイムでやろうと思うと多分違う方法でやってると思うので、そっちのほうもやってみたい。