Michael J Petrie

2019 · 個人プロジェクト

RT 01のレンダリングの1コマ。紫色の夕暮れの空を背景に、ドアを開けた黒いMercedes-Benz 300 SL Gullwing
RT 01で作ったMercedes-Benz 300 SL Gullwingのアニメーションの1コマ。

C言語でゼロから書いた確率的パストレーサーです。高速化には、軸平行バウンディングボックスによるBSPツリーを使っています。SIMDによるレイトレーシングが効果を発揮したのは最初のバウンスだけだったので、2回目以降のバウンスはスカラー処理に切り替えました。結果的にそのほうが速かったです。

コードの多くは、このデモを描くためだけに作り込んであります。100万ポリゴンのMercedes-Benz 300 SL Gullwingのアニメーションです。

YouTubeでレンダリング全編を見られます。

機能

  • 法線マッピングと、ディスプレイスメントの法線への反映
  • 法線レイの平面クランプ
  • パーリンノイズを使った疑似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

GitHubのソースコード

すべてのプロジェクト

このページは英語の原文を AI で翻訳したものです。原文(English)