Upgrade to Pro — share decks privately, control downloads, hide ads and more …

レイトレZ世代に捧ぐ、今からレイトレを始めるための小径

Avatar for ichi-raven ichi-raven
November 16, 2025

 レイトレZ世代に捧ぐ、今からレイトレを始めるための小径

注意: スライド内に多数の(重要な)リンクを含みますので、PDFをダウンロードして読まれることをお勧めします。

・本スライドはレイトレ合宿11のセミナーで自身が発表したものです。
・レイトレを始めた人がRay Tracing in One Weekendの後に何をすれば良いか、自身の経験(N=1)を基に書いてみました。
・釣りタイトルです。申し訳ありません。Z世代のZはdepthですのであしからず。

Avatar for ichi-raven

ichi-raven

November 16, 2025
Tweet

More Decks by ichi-raven

Other Decks in Programming

Transcript

  1. 本発表の目的 レイトレ合宿 11: Path for learning path tracing 2 壁

    ↑ここの説明 目的: 画像引用元: [1] https://raytracing.github.io/ [2] https://pbr-book.org/4ed/contents [1] [2]
  2. 本発表の目的・免責事項 レイトレ合宿 11: Path for learning path tracing 3 目的:

    • レイトレーシングを学び始めた頃, 週末レイトレーシングからPBRT・研究へのステップで詰まった • そんな時,本合宿の皆様の資料に大変お世話になった → これらをたどる小径(path)を残したい 免責事項: • 本セミナーの対象は,ここにいる皆様ではありません (???) • 週末やったけど,次は? な方に薦めて頂けると幸いです • より良い説明 / 有益な資料がある! という場合は是非ご教授を
  3. 1歩目 レイトレ合宿 11: Path for learning path tracing 4 •

    1歩目は “Ray Tracing in One Weekend” (週末レイトレーシング) シリーズ • • ↑1週目の段階で,以下のスライドを併せて読むことをお勧め hole様 『物理ベースレンダラedupt解説』 https://speakerdeck.com/hole/edupt 原典: (画像も以下より引用) https://raytracing.github.io/ Inzkyk様による日本語訳: https://inzkyk.xyz/ray_tracing_in_one_weekend/ 1週目 2週目 余生
  4. 重点的サンプリング (Importance sampling, IS) • 週末レイトレーシングでは,”The Rest of Your Life”巻

    3章(3.7) → 他の資料を見ても,光源方向のISとか書いてない! (NEEって何?) 2歩目: 重点的サンプリング(IS)とNEE レイトレ合宿 11: Path for learning path tracing 5 • ”The Rest of Your Life“ 巻 9章冒頭より引用: “ We could use shadow rays to solve for the direct lighting at any given point. Instead, I’ll just use a PDF that sends more rays to the light. We can then turn around and change that PDF to send more rays in whatever direction we want.” “use shadow rays to solve for the direct lighting” ← NEEのことを言っている (さらっと流されてる)
  5. 2歩目: 重点的サンプリング(IS)とNEE レイトレ合宿 11: Path for learning path tracing 6

    NEE (Next Event Estimation): 光源上の点に対し,レイを1本余分に直接飛ばす(≠ 今のレイを光源の方向に飛ばす) ISの1サンプル: : NEEで追加したレイ : 通常のISでトレースするレイ (シャドウレイ) NEEは,ISで飛ばしそうなレイを最初から考慮しているようなもの NEEの1サンプル:
  6. 2歩目: NEEとMIS レイトレ合宿 11: Path for learning path tracing 7

    NEEは,材質によってはあり得ないレイを飛ばしてしまう (そんな時は,材質の反射特性に基づいてレイを飛ばした方が良い) → MIS (Multiple Importance Sampling): 2本余分にレイを飛ばし,重みづけ なめらかな光沢面 なめらかな光沢面 NEEの1サンプル: MISの1サンプル: 重み小 重み大 次の衝突点へ 次の衝突点へ : 材質に基づくレイ 無駄… 影響大だが無視…
  7. 2歩目: ISとNEE・MIS レイトレ合宿 11: Path for learning path tracing 8

    注意: NEE・MISを行う場合は,追跡していた元々のレイが光源に当たっても足しません (レイが最初に光源に当たった場合を除く) → なんとなくイメージをつかめば,あとは大変有難い資料があります shocker様のブログ・スライド: 『パストレーシング』 『パストレーシング実装』『多重重点的サンプリング』 kiNaNkomochi様のブログ: 『NEEとMISの実装(NEE編)』『NEEとMISの実装(MIS編)』 (レンダリング方程式の 3点形式 ⇔ 方向形式って何?) shocker様 『レンダリング方程式 2』か,PBRTへ…→
  8. 3歩目: PBRTの読み方 レイトレ合宿 11: Path for learning path tracing 9

    よし,PBRTとそのソースコードでも読むか! → 週末レイトレーシングと比べて大規模すぎる → 逆引きで読む方法をご紹介します ・え? この英文全部読むんですか? (日本語訳版もあります) ・どこがレイを飛ばしてるの? ・どこまで読めば絵が出るんですか…? 聖典 (難解)(鈍器) (注意: 逆引きonlyは非推奨) 画像引用元: https://pbr-book.org/4ed/contents
  9. 3歩目: 週末レイトレーシング的PBRT レイトレ合宿 11: Path for learning path tracing 10

    結論: src/pbrt/cpu/Integrators.cpp の389行目: SimplePathIntegrator::Li()メソッド が,大雑把に言うと週末レイトレーシングのray_color()関数にあたる ※ PBRTの書籍では,13.Light Transport I: Surface Reflection ここから読み始めると,パストレーシングに必要な機能を最低限逆引きできる PBRT冒頭の基本的な部分と,逆引きを並行すると楽
  10. 3歩目: 行き当たりばったり的PBRT レイトレ合宿 11: Path for learning path tracing 11

    • BSDFって材質の何? 粗い鏡面反射って本当はどうやって実装するの? PBRT 9. Reflection models shocker様 『双方向(反射率|透過率|散乱)分布関数 (B(R|T|S)DF)』 tatsy様 『Microfacetモデルの重点サンプリング』 • NEEの,光源のサンプリングってどうやるの? PBRT 12. Light sources shocker様 『逆関数法とジオメトリサンプリング実装例』 • レイが持ってるの,RGBかと思ったら,4次元のlambdaって何? PBRT 4. Radiometry, Spectra, and Color shocker様 『スペクトラルレンダリング』 Penguin様 『スペクトルレンダリング』
  11. おまけ: GPUレイトレーサを作るなら レイトレ合宿 11: Path for learning path tracing 12

    • 速いらしいし,GPUでレイトレしてみたいけど,PBRTのGPU実装意味わからん… → 最初の選択肢は主に3つ (全てレイトレ対応GPUが必要) 1. CUDA / OptiX (NVIDIA GPUのみ) 2. DirectX12 / DXR (シェーダ必須, Windowsのみ) 3. Vulkan / VkRay (シェーダ必須, めんどくさい) それぞれの参考文献: 1. sketch様 『NVIDIA OptiXでRay tracing in One Weekend』 2. Pocol様 『DirectX Raytracing 入門』 techbito様『DirectX Raytracing Programming』 3. Nishiki様 『ゼロからVulkan Ray Tracing』 techbito様『Vulkan Raytracing Programming』, 山田英伸様『Vulkan実践入門』
  12. おまけ: シェーダ?? レイトレ合宿 11: Path for learning path tracing 13

    • C言語みたいな文法でつらい,普通の言語みたいに書きたい → Slang shaderをおすすめします • インタフェースとジェネリクス,モジュールシステム,自動微分等の便利機能 • 基本文法はHLSLで,GLSL / HLSL / SPIR-V / CUDA / C++ 等にコンパイル/変換可 • Pythonから呼び出してデバッグ可能 (Slangpy, 使用例) 参考文献: • 公式: Slang User's Guide, Slang examples, Slang playground • 折登 樹様 『シェーダー言語のSlangをRustとVulkan (ash)で試してみる』 • Autodesk Aurora: Autodesk社のGPUパストレーサ • 川口様 (シリコンスタジオ) 『Slang で自動微分シェーダ開発入門』
  13. まとめ レイトレ合宿 11: Path for learning path tracing 14 最後に:

    • あくまで自分の取った方法ですが,ご活用頂ければ幸いです • 大変ありがたいことに,資料はたくさんあります • 自分もこうした資料を作れるように,鍛錬あるのみ 1. Ray Tracing in One Weekend (+ edupt) 自分のはこちら (Haskell) 2. ISとNEE・MISの関係,レンダリング方程式等の表現に慣れる 3. PBRT 4. 路上教習 (?)
  14. レイトレ合宿 11: Path for learning path tracing 15 • Yoshi’s

    Dream様のNEE / MISに関するアドバイス • NEE / MISで飛ばすのはあくまでシャドウレイ,散乱(反射や透過)はせず光源に当たったら終了 (パスのトレーシングだと思うと,散乱ごとにレイの本数が倍増して爆発します) 今回のスライドの他に,合宿参加者の方々からお教え頂いた内容を追記します. • hole様がレイトレを勉強した際に読まれていた書籍 • Advanced Global Illumination (前半がレイトレの基礎的内容,後半が当時のGI技術紹介になっているそうです) • Ray Tracing from the Ground Up • 自分の実装ミス • NEEでの光源サンプリングと,MISのBSDFサンプリングの両方で,光源の座標変換を忘れない 追記: レイトレ合宿で頂いた情報