三葉レイさんのレイトレをやってみた

ということで、こちらの動画を参考にレイトレ入門してみました。

2019 08 17 15 24 16

まず最初は画像を表示するところから。 ピンク一色の画像を生成しました。

2019 08 17 15 21 03

次に、シーンに球を一つおいて、球にヒットしたところをピンクに、 それ以外を黒に塗りつぶします。 アスペクト比を計算していないので横に伸びていますが。

2019 08 17 15 21 22

ヒットしたところの法線を色に出力します。

2019 08 17 15 21 34

球を2つおいてみます。重なっている部分もきれいに解決されています。ラスタライズ法ではデプスバッファなどを使いますが、レイトレーシングだと何もせずともレイを飛ばせばきれいになってくれますね。

2019 08 17 15 21 47

視点を変えました。パースペクティブなカメラになりました。

2019 08 17 15 22 19

球だけでコーネルボックスを作ってみます。

2019 08 17 15 22 32

球に色のパラメータをもたせました。

2019 08 17 15 22 46

カメラの位置にライトがあると仮定してランバート反射を実装しました。ランバート反射をやるならレイトレーシングする意味もあまりないですね。

2019 08 17 15 23 00

先程のコーネルボックスに色を付けました。このシーンをレイトレできれいに表示するのが目標です。

2019 08 17 15 23 17

ピクセルごとのレイのサンプリング数1で反射回数1回でレンダリングしました。よくあるレンダリングソフトのレンダリング途中の画面みたいになってテンションが上ります。

2019 08 17 15 23 28

上にあるのが照明です。ランダムな方向の反射の結果ライトに到達した場所が白くなっていて、ライトに到達できなかった場所は黒い色です。レイの反射はランダムにサンプリングしているのでライトの方に反射するのはまれなのでこんな感じになっています。

サンプリング数を1000回に上げました。ランダムに反射する1000本のレイの平均値を色として表示しています。反射回数は1回なので直接光だけ計算していることになりますね。

2019 08 17 15 23 48

プログラムはOpenMPを使って並列化しています。プログラムを走らせるとCPUを使い切れます。

2019 08 17 15 24 00

次は反射回数を10回まで引き上げたものです。

2019 08 17 15 24 16

レンダリングにかかった時間は35分ちょっと。 球に壁から反射した色が写り込んでいるのも観察できます。


簡単にレイトレに入門できて楽しかったです。 鏡面反射に対応する動画もあるようなので、また今度試してみたいと思います。