$30 off During Our Annual Pro Sale. View Details »

redflash [portal] renderer / Raytracing Camp 10

がむ
October 12, 2024

redflash [portal] renderer / Raytracing Camp 10

レイトレ合宿10でOptiXを用いて開発した自作レンダラーのプレゼンスライドです。
ポータル用のBSDFを実装し、レンダラー本体のポータル専用処理を最小限に抑えました。
https://gam0022.net/blog/2024/10/23/rtcamp10/

Google Slides版
https://docs.google.com/presentation/d/1IRcyHyze1QlRMq5KFJQLhltmN2310svw-IMybdgobKY/edit#slide=id.gbd0ef54b81_0_79

がむ

October 12, 2024
Tweet

More Decks by がむ

Other Decks in Programming

Transcript

  1. 2

  2. 基本機能
 • Unidirectional Path Tracing
 ‣ implemented in NVIDIA® OptiX

    6.5
 • Materials(BSDFs)
 ‣ Disney BRDF, Lambert Diffuse, Glass, Poral(後述) 
 • Primitives
 ‣ Sphere, Mesh, Distance Function (Raymarching )
 • NEE(Next Event Estimation) + MIS(Multiple Importance Sampling)
 • ACES Filmic Tone Mapping
 • Deep Learning Denoising
 4
  3. レンダラーの出力設定 
 • 解像度
 ‣ 1920x1080
 
 • 300フレーム 💪


    ‣ 30FPS × 10秒(上限)
 ‣ 1フレームあたり0.85秒 くらい
 5
  4. ポータルの実装の流れ 
 1. シーンを2つ用意 
 a. OptiXのSceneGraphを2つ用意
 b. scene0(前半の屋内)とscene1(後半の屋外)
 


    2. rtPayload構造体にscene_idを定義 
 a. scene_idでトレースするシーンを切り替え
 
 3. ポータル用の特殊なBSDFを用意 
 a. レイは直進させる
 b. scene_idを0と1で反転させる
 c. BSDF実装の補足
 i. closest_hit 関数の定義は共通
 ii. BSDFのサンプル方向・pdf計算をCallableProgramで切り替えできる設計
 7
  5. 使用アセットの出典 
 • 3Dアセット 
 ‣ ドア
 • https://www.thebasemesh.com/asset/classroom-door
 ‣

    Suzanne
 • BlenderからAdd
 
 • テクスチャ(天球のHDRI画像) 
 ‣ https://polyhaven.com/a/kloppenheim_06_puresky
 ‣ https://polyhaven.com/a/fireplace
 12
  6. 後半の屋外シーン 
 • レイマーチングの衝突判定の条件を形状ごとに変えた 
 15 d < epsで判定 


    レイマーチングのイテレーション回数が足りずに途中で探索が打ち切ら れてしまい、衝突するはずべき箇所が衝突していないと判定 
 シルエットが削れて本来よりもスカスカした印象に 
 最終的にレイの先端がバウンディングボックスの内部に留まっていた ら衝突したとみなす ように修正
 レイマーチングのイテレーション回数が足りないことによる判定エラーを 軽減できた
 ※バウンディングボックスと形状が近い場合に有効 

  7. modによる繰り返し 
 • pにmodを適用すると無限に繰り返しができる 
 ‣ p = mod(p, 1.0)

    - 0.5; 
 
 • なぜ
 ‣ テクスチャのWrapモードのRepeatのような感じ 
 ‣ 上の例
 • -0.5〜0.5 の範囲の座標が永遠に繰り返される 
 18
  8. レイマーチング(Sphere Tracing)の高速化の研究 
 以下の手法を去年に実装したが、今年のシーンでは相性が悪かったので無効化😭
 同じ著者の新作のSphere Tracing高速化の手法は無かった😭
 
 • [Keinert et

    al. 14] Enhanced Sphere Tracing
 • [Bán&Valasek 18] Accelerating Sphere Tracing
 • [Bán&Valasek 23] Automatic Step Size Relaxation in Sphere Tracing
 21 [Bán&Valasek 18] シーンを平面と仮定 Sphereが重ならないように次のステップを求める 普通のSphereTracing [Bán&Valasek 23]は [Bán&Valasek 18]の パラメーターを自動調整
  9. 役立った機能 
 • 制限時間を守る工夫 
 ‣ 各フレームの最初の2サンプリングの時間から
 制限時間にギリギリ間に合うサンプリング数を推定
 ‣ シーンの重さに応じた計算リソースの配分も実現


    • 前半と後半でシーンの重さが20倍くらい違う
 
 • 軽量版のレンダラー 
 ‣ アニメーションの確認用
 ‣ アニメーションは全部ハードコーディング💪
 
 • PNGの保存の並列化 
 ‣ サブスレッドで動作
 ‣ メインスレッドのレンダリングをブロックしない
 22