01 / 読書ガイド
読書ガイド
引用
Pharr, M., Jakob, W., & Humphreys, G. (2023). Physically Based Rendering: From Theory to Implementation (4th ed.). The MIT Press. Free official edition: https://pbr-book.org/4ed/contents
章の要約
第1章:はじめに
冒頭の章は本書の方法を説明する。完全な物理ベースレンダラ pbrt を、文章と C++ のソースコードを名前付きの断片として織り交ぜる文芸的プログラミングによって示すというものである。レイトレーシングの要素(カメラとフィルム、レイと物体の交差、光の分布、可視性、表面での散乱、間接的な光輸送、レイの伝播)を振り返り、pbrt の実行段階、main() 関数、インテグレータのインタフェースを概観し、最初の単純なランダムウォーク・インテグレータを実装する。さらに本書の読み進め方、コードの約束事(動的ディスパッチ、アロケータ、並列性を含む)、演習の三段階の難易度、物理ベースレンダリングの簡単な歴史を説明する。
第2章:モンテカルロ積分
この版で前に移されたこの章は、レンダリングに現れる高次元で不連続な積分のための道具としてモンテカルロ積分を導入する。基本的な推定量、効率を高める方法(層化サンプリング、重点サンプリング、多重重点サンプリング、ロシアンルーレット、分割)、逆関数法によるサンプリング、分布間の変換を扱う。
第3章:幾何と変換
この章は pbrt の幾何の土台を築く。座標系、n 組の基底クラス、ベクトル、点、法線、レイ、バウンディングボックス、球面幾何(立体角と方向の表現)、変換、各種オブジェクトへの変換の適用、そしてレイと表面の交差を記述するインタラクションの記録である。
第4章:放射測定、スペクトル、色
レンダリングの物理的な基礎を導入する。放射量(放射束、放射強度、放射照度、放射輝度)、放射量の積分の扱い、表面での反射と BRDF、光の放射、pbrt の完全なスペクトルレンダリングで使うスペクトル分布の表現、そして色と人間の知覚との関係である。
第5章:カメラとフィルム
ピンホールモデルを超えて、カメラのインタフェース、射影カメラモデル(平行投影と透視投影、被写界深度を含む)、球面カメラ、そしてセンサーに届くスペクトル放射輝度を画像の値に変換するフィルムと結像を定義する。
第6章:形状
形状は幾何情報とレイの交差を提供する。形状のインタフェースを示し、球、円柱、円板、三角形メッシュ、新たに加わった双線形パッチ、曲線を実装し、最後に交差判定を頑健にするための浮動小数点の丸め誤差の管理を丁寧に扱う。
第7章:プリミティブと交差判定の高速化
CPU の経路では、プリミティブのインタフェースが材質などの属性を形状に結びつける。続いて集約体とバウンディングボリューム階層(BVH)を、構築(表面積ヒューリスティックを含む)と走査の両面から導入し、複雑なシーンでのレイの交差判定を効率化する。
第8章:サンプリングと再構成
サンプリング理論とフーリエ解析から出発してサンプリングと積分を結びつけ、サンプラのインタフェースを定義し、独立サンプラ、層化サンプラ、Halton サンプラ、Sobol' サンプラを実装した後、フィルタによる画像の再構成を論じる。
第9章:反射モデル
表面での散乱は BSDF で記述される。その表現を定義し、拡散反射、鏡面反射と透過、導体と誘電体の BSDF、マイクロファセット理論による粗さ、粗い誘電体、測定 BSDF、髪の毛による散乱のモデルを実装する。
第10章:テクスチャと材質
テクスチャは空間的な変化を記述し、材質はテクスチャの値を BSDF のパラメータに変換する。テクスチャのサンプリングとアンチエイリアシング、テクスチャ座標の生成、基本的なテクスチャと画像テクスチャ、材質のインタフェースとその実装を扱う。
第11章:ボリューム散乱
この章は関与媒質を導入する。吸収、放射、散乱の過程、透過率(ヌル散乱による定式化を含む)、位相関数、そして均質な媒質とグリッドに基づく不均質な媒質の表現である。
第12章:光源
光源のインタフェースを、点光源、平行光源、面光源、無限遠の面光源とともに示し、続いて光源のサンプリング戦略、とくに膨大な数の光源を持つシーンのための多光源サンプリングを扱う。
第13章:光輸送 I:表面での反射
光輸送方程式を導き、その方程式をモンテカルロ法で解くものとしてパストレーシングを示し、理解とデバッグに役立つ単純なパストレーサを実装した後、第1章のランダムウォーク・インテグレータよりはるかに効果的な、より完全なパストレーサを実装する。
第14章:光輸送 II:ボリュームレンダリング
輸送方程式は光輸送を関与媒質へと一般化する。不均質な媒質の不偏なサンプリングを含むボリューム散乱インテグレータを展開し、層状の材質での散乱をモデル化する。
第15章:GPU でのウェーブフロント・レンダリング
この版で新たに加わった章で、ウェーブフロント型のアーキテクチャを使ってパストレーシングを GPU に対応づける方法、pbrt のほぼすべてのコードを CPU と GPU の両方で動かすための実装の基盤、そして GPU 用のパストレーサそのものを説明する。冒頭の例では、GPU でのレンダリングがマルチコア CPU よりも何倍も速いことが報告されている。
第16章:回顧と今後
最終章は、版を重ねる中での pbrt とハードウェアの変化を振り返り、別の設計の可能性(アウトオブコア・レンダリング、マイクロポリゴンのグリッド、パケット・トレーシング、対話的およびアニメーションのレンダリング、特化したコンパイル)、逆レンダリングと微分可能レンダリングや機械学習といった新しい話題、そしてレンダリングシステムの将来を論じる。
付録 A–C:サンプリングアルゴリズム、ユーティリティ、シーン記述の処理
付録 A はエイリアス法、リザーバーサンプリング、棄却法、そして一次元および多次元の関数に対する逆関数法に基づくさらなるサンプリングを扱う。付録 B はシステムのユーティリティ、すなわち起動、数学的な基盤、エラー報告、メモリ管理、並列処理を説明する。付録 C はシーン記述ファイルがどのように字句解析・構文解析され、オブジェクトに変換されるかを説明する。
主要概念
第1章:はじめに
- 文芸的プログラミング:プログラムを文章と名前付きのコード断片を織り交ぜた形で示し、本文と実装を一つの文書にすること。
- インテグレータ:カメラのレイに沿って届く放射輝度を計算する pbrt の構成要素で、光輸送のアルゴリズムが置かれる場所。
第2–4章:基礎
- モンテカルロ推定量:ランダムなサンプルでの関数値をその確率密度で割った値の平均によって積分を近似すること。
- 重点サンプリング:被積分関数と形の似た分布からサンプルを取り、分散を減らすこと。
- 放射輝度:単位面積・単位立体角あたりで測られる、レイに沿って運ばれる放射量。
- スペクトルレンダリング:RGB の三つ組ではなく、波長に依存する分布のサンプルで光輸送を計算すること。
第5–8章:結像と幾何
- 薄レンズカメラ:レンズ上の点をサンプリングして被写界深度を加えるカメラモデル。
- バウンディングボリューム階層:バウンディングボックスの木で、レイの交差判定がシーンの大部分を飛ばせるようにする。
- 丸め誤差の管理:交差計算の浮動小数点誤差を見積もり、レイが誤って表面と再交差しないようにすること。
- 低食い違いサンプリング:Halton や Sobol' のように、ランダムな点より均一に定義域を覆うサンプル列。
第9–12章:光と物質
- BSDF:表面上で、ある方向から来た光が別の方向へどう散乱するかを表す関数。
- マイクロファセットモデル:粗い表面を、向きが統計的に分布する微小な鏡面の集まりとして表すこと。
- 関与媒質と位相関数:光を吸収・放射・散乱する体積と、散乱の角度分布を与える位相関数。
第13–16章:光輸送とシステム
- 光輸送方程式:ある点から出ていく放射輝度を、放射される放射輝度と入射する放射輝度に結びつける積分方程式。
- パストレーシング:カメラからランダムな光の経路をサンプリングしてその方程式を解く方法で、直接照明と多重重点サンプリングを組み合わせる。
- ウェーブフロント・アーキテクチャ:GPU でのレンダリングを、大量のレイをまとめて処理する段階の列として構成すること。
批判的分析
長所
- 理論と完全なコードが一体になっている。 序文は、完全で、説明的で、物理に基づくシステムという目標を掲げており、すべてのアルゴリズムが文脈の中で動くコードとして現れる。序文が述べるとおり、記述では隠れていた微妙な点が実装で明らかになり、読者は読み進めながら例のシーンをレンダリングできる。
- 全体を通じて物理に根ざしている。 正しい単位、放射測定、スペクトルレンダリングによって、正しさの具体的な基準が得られる。単純なシーンでは物理ベースレンダラは解析解と一致すべきであり、異なるアルゴリズムどうしも一致すべきである。この版では照明計算から RGB が完全に取り除かれている。
- 新しく幅広い内容。 第4版はモンテカルロ積分とパストレーシングを前に出すように構成を改め、GPU レンダリング、多光源サンプリング、層状の材質、髪の毛の散乱、双線形パッチ、最新のボリューム手法を加えている。
- 段階分けされた演習と設計の議論。 演習は 1、2 時間で終わるものから最終プロジェクト規模のものまで三段階に分けられ、第1章と第16章は中規模のレンダリングシステムにおける設計上のトレードオフを論じている。これを扱うグラフィックスの本は少ない。
短所
- 前提知識が重い。 入門的なグラフィックスの授業、多変数微積分と確率への慣れ、大規模な現代的 C++ のコードベースを読む力が前提とされる。織り交ぜられたコードのため、初心者には読むのに時間がかかる。
- オフラインレンダリングのみ。 対象は写実的な物理ベースのレンダリングに限られ、リアルタイムのラスタライズ、ゲーム向けの GPU グラフィックス API、非写実的な技法は範囲外である。
- 長さと密度。 16 章と三つの付録で一つの完全なレンダラを扱うため、一つの授業で扱える量をはるかに超える。星印の付いた節は上級の内容で、初読では飛ばすよう勧められている。
- コードが pbrt の設計に結びついている。 一部の説明は pbrt 固有の基盤(ディスパッチの仕組み、アロケータ、GPU 経路)に依存しており、自分でレンダラを作る読者は読み替える必要がある。
コースにおける位置づけ
このグラフィックスの書籍リストで、Physically Based Rendering は Akenine-Möller らの Real-Time Rendering と並ぶ専門的な二冊のうちの一冊である。両者は互いを補う。Real-Time Rendering は一般に GPU 向けの対話的なラスタライズ技法を扱う本とされ、pbrt はオフラインで物理的に正確なレイトレーシングに専念している。学生はまず、Marschner と Shirley の Fundamentals of Computer Graphics や Angel と Shreiner の Interactive Computer Graphics を使う授業を受け、序文が前提とする入門的なグラフィックスの背景を身につけるべきである。
Gambetta の Computer Graphics from Scratch はレイトレーシングとラスタライズの両方へのやさしい入門であり、そのあとがきは物理ベースレンダリングを次の一歩として挙げている。したがって Gambetta、一般的なグラフィックスの教科書、pbrt の順に読むのが自然な進み方となる。Rogers、Sharp、Preece の Interaction Design はコースの HCI の側面を扱い、本書とは重ならない。
本書の使い方
序文は三つの読者層を挙げている。入門的なグラフィックスの授業を受けた大学院生と学部上級生、レンダリングの研究者、そして業界の開発者である。読者はベクトル幾何と変換(第3章で復習される)、微積分と基礎的な確率、C++ を知っている必要がある。
本書はおおむね前から順に読むように書かれている。一学期の上級レンダリングの授業なら、第1章、第2章、第4章、第3章と第5–7章の一部、第8章(少なくともサンプリング理論と一、二種類のサンプラ)、第9章、第12章、第13章が実際的な中心となる。第11章と第14章でボリュームを加え、第15章は GPU に関心のある学生に向く。著者の勧めに従って、初読では星印の付いた節を飛ばすこと。また pbrt はインタフェースを中心に作られているので、構成要素のインタフェースを理解すればその実装は飛ばしてよいと著者は述べている。
pbrt.org から pbrt のソースコードとシーンをダウンロードし、読みながらシーンをレンダリングするとよい。演習は難易度で選ぶ。1、2 時間のものは練習に、10–20 時間のものは授業の課題に、40 時間以上のものは最終プロジェクトに向く。本書の図のレンダリング画像は pbr-book.org でオンラインで見比べられる。
版と出典
本ガイドは第4版(MIT Press、2023 年)に基づき、著者が 2023 年 11 月から無料で公開している公式オンライン版 https://pbr-book.org/4ed/contents を読んで作成した。序文の全文(読者層、目標、版ごとの変更点)、完全な目次、1.2–1.5 節(本書の読み進め方と演習の段階を含む)、全 16 章と三つの付録の導入部、第16章の節見出し、そして第16章を除く各章の演習のページを参照している。
