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レンダリングをリアルタイムでやろうと思うと多分違う方法でやってると思うので、そっちのほうもやってみたい。

もどりたい