Skip to content
Copied!

3. 余生 ​

『Ray Tracing: The Rest of Your Life』第 3 編を扱います。第 1・第 2 編で構築した common/ クレートを段階的に拡張しながら,モンテカルロ積分から始めて,鏡面反射・屈折をもつコーネルボックスのレンダリングへと進みます。第 1・第 2 編完成時のコード(r1XX,r2XX クレート群)はそのままビルドできるよう,common/ への変更はすべて加算的に行います。

完結全14章開始:
  1. 1. はじめに

    Ray Tracing: The Rest of Your Lifeは,Peter Shirley,Trevor David Black,Steve Hollaschによって執筆されたレイトレーシングの入門書です。本稿執筆時点での最新版はVersion 4.0.2(2025-04-25)です。日本語版はinzkyk氏に…

  2. 2. 簡単なモンテカルロプログラム

    モンテカルロ法(MC法)の本質的な特徴は「単純なプログラムで真の値を統計的に近似でき,実行時間が長いほど精度が上がる」という点です。本章ではその最小例として$\pi$の推定を題材にし,第3編全体の理論基盤を作ります。扱うのは3つのトピックです。$[-1, 1] \times [-1, 1]$の正方形内に一様な乱数点$(…

  3. 3. 一次元モンテカルロ積分

    3.2では$\pi$の推定を「面積比」として導きました。ここでは同じアイデアを一般化し,任意の積分をモンテカルロ法で推定する枠組みを作ります。この枠組みが第3編全体を貫く基礎となります。扱うのは2つのトピックです。確率変数$x \sim p(x)$を使うと,積分を期待値として書けます。$$ I = \int f(x)\…

  4. 4. 球上の点を使ったモンテカルロ積分

    3.3では1次元区間上の積分を推定しました。ここではレイトレーシングに直接つながる方向空間(単位球面$S^2$)上の積分を扱います。扱うのは2つのトピックです。題材の積分は$$ I = \int_{S^2} \cos^2\theta\,d\omega $$です。ここで$\theta$は$z$軸との角度,$d\omega…

  5. 5. 光の散乱

    3.3〜3.4でモンテカルロ推定の枠組みと球面積分を学びました。ここでは光が表面で散乱する際の確率モデルを導入し,レイトレーサのノイズ低減につながる考え方を作ります。扱うのは3つのトピックです。表面に入射した光が散乱する確率を$A$(アルベード)とします。散乱した場合,方向分布はPDF $s(\mathbf{d})$で…

  6. 6. 重点サンプリング付きマテリアル

    3.5でLambertian表面の散乱PDF $s(\omega) = \cos\theta/\pi$を導入しました。ここではサンプリングPDF $p$と散乱PDF $s$の関係を整理し,その違いが収束速度と最終的な積分値にどう影響するかを数値実験で確かめます。扱うのは2つのトピックです。レンダリング方程式のモンテカル…

  7. 7. ランダムな方向の生成

    3.2〜3.6のモンテカルロ推定は「$z$軸周りの散乱角$\theta$だけ考える1次元の議論」でした。ここでは3次元空間の方向ベクトルを確率的に生成する手法を体系化します。次章で学ぶONB(正規直交基底)と組み合わせると,任意の法線方向に対して散乱させることができます。扱うのは3つのトピックです。単位球面上の面積素は…

  8. 8. 正規直交基底

    前章では$z$軸周りのランダム方向生成を学びました。実際のレンダリングでは散乱方向を任意の法線ベクトル$\mathbf{n}$を基準に生成する必要があります。そのための道具が正規直交基底(ONB: Orthonormal Basis)です。扱うのは3つのトピックです。原点$\mathbf{O}'$と正規直交基底ベクトル…

  9. 9. 直接的なライトのサンプリング

    前章まで,散乱方向はcosine重み付き分布でサンプリングしてきました。しかしこれでは光源の方向に特別な重みを与えていないため,光源が小さいほど多くのレイがはずれて収束が遅くなります。光源の面積を直接使うサンプリングPDFを導入することでこの問題を解決します。扱うのは3つのトピックです。面積$A$の光源上の点$q$を一…

  10. 10. 混合密度

    前章では光源を直接サンプリングするPDF $p_\text{light}$を導入しました。しかし光源PDFだけに頼ると,光源方向以外からの間接照明が支配的な箇所では逆に分散が増すことがあります。コサイン重み付きPDF $p_\text{cosine}$との混合PDFを使えば,どちらの極端な場合でも安定した収束が得られま…

  11. 11. レイトレーサーのアーキテクチャについて

    前章でコーネルボックスのレンダリングは完成しましたが,コードをよく見ると2つの構造的な問題が残っています。どちらも「マテリアルが知っているべき情報をレンダラーが代わりに持っている」という根本的な責任の混在が原因です。この章では問題を整理し,次章の実装計画を立てます。前章(r310-cornell-box)のray_co…

  12. 12. PDF の管理方法の整理

    前章で特定した2つの問題,「CosinePdfのハードコード」と「鏡面/拡散の非互換な分岐」を,この章で解消します。ScatterRecord enumとscatter_record()メソッドをcommonに追加し,シーンをアルミ箱+白い小箱→ガラス球へと段階的に変化させながら,計4パターンのコーネルボックスを実装し…

  13. 13. これから

    「週末レイトレーシング」三部作の最終章です。本書では少人数のプロダクション用レイトレーサーを実装するための基礎知識を学びました。あとは残りの人生をかけてレイトレーシングに取り組んでいく時間です。第3編で積み上げたものを振り返ります。モンテカルロ積分の基礎(第2〜5章)PDFの階層設計(第6〜10章)アーキテクチャの整理…

  14. 補講:第 3 編のネイティブ並列レンダラー

    1/14補講:ネイティブ並列レンダラー,2/11補講:第2編のネイティブ並列レンダラーに続き,第3編の最終シーン(3/12 PDF管理の整理)もネイティブ・マルチスレッドで高解像度レンダリングします。本稿ではmaster/native/raytracing-book3-final-sceneを作ります。第3編の主題はモ…