a.outスマートフォン用の表示で見るa.out2020-01-13『週末レイトレーシング』を読んだ以前からレイトレーシングをやってみたいと思っていたので、正月の連休を使って『週末レイトレーシング』という本を読んだ。使ってフルスクラッチでレイトレーサーを実装していくという内容で、タイトルの通り週末にやりきれる分量にまとめられている。必要な機能が一通り揃っていたおかげで問題なく実装できた。違って演算子のオーバーロードができないため、ベクトル計算の部分は記述量が多くなってしまい少しつらかった。以下はレイトレーサーが実装されていく過程。説明まずは画像の出力。中身はプレーンテキストなのでプログラムで簡単に生成できる。ただのグラデーションに見えるが実際にはレイを飛ばしており、背景だけが見えている状態。当たった部分のY座標に応じて色を変えている。球を配置し、衝突したレイに対して法線マップを表示する。複数オブジェクトの配置を実装。下に大きな球を配置して地面っぽくしている。アンチエイリアスの実装。1ピクセルの中のさらに細かいレベルでレイを飛ばして、それぞれの値の平均を取る。やって実装するのか〜と個人的に感動したポイント。光が吸収されて影ができている。それっぽくなって楽しい。シャドウアクネを防ぐ実装。1つ前の画像と比べるとノイズっぽい影がなくなっていることがわかるはず。個人的にはレイトレーシングといえばこの綺麗な反射だよねという感じ。ここらへんのマテリアルを実装する部分は特に楽しかった。