RT 01
2019 · 個人プロジェクト
C言語でゼロから書いた確率的パストレーサーです。高速化には、軸平行バウンディングボックスによるBSPツリーを使っています。SIMDによるレイトレーシングが効果を発揮したのは最初のバウンスだけだったので、2回目以降のバウンスはスカラー処理に切り替えました。結果的にそのほうが速かったです。
コードの多くは、このデモを描くためだけに作り込んであります。100万ポリゴンのMercedes-Benz 300 SL Gullwingのアニメーションです。
機能
- 法線マッピングと、ディスプレイスメントの法線への反映
- 法線レイの平面クランプ
- パーリンノイズを使った疑似HDRの空
- 被写界深度ブラーとモーションブラー
- ピクセルごとのサンプル層化(滑らかなモーションブラーと被写界深度ブラーのため)
- IntelのOpen Image Denoiseによる、ノイズのないきれいな出力。1ピクセルあたり16レイでも、そこそこの結果が出ました
球体以外のものも描けるレンダラーに挑戦したのは、これが初めてでした。自分の勉強のために作ったもので、効率的とは言えない部分も多いですが、仕上がりには満足しています。
参考にした資料
- Ray Tracing Minibooks、Peter Shirley
- Realtime Ray Tracing and Interactive Global Illumination、Ingo Wald
- レイと三角形の交差判定、Möller–Trumbore
- クラメルの公式
- On Building Fast kd-Trees for Ray Tracing、WaldとHavran
- Mathematics for 3D Game Programming and Computer Graphics
このページは英語の原文を AI で翻訳したものです。原文(English)