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 和电介质 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。
- 内容新且覆盖面广。 第四版重新编排结构,把蒙特卡罗积分和路径追踪提前,并新增 GPU 渲染、多光源采样、分层材质、毛发散射、双线性面片以及最前沿的体渲染方法。
- 分级练习与设计讨论。 练习分为三个等级,从一两个小时到期末项目规模不等;第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 涵盖课程中人机交互的一面,与本书没有重叠。
如何使用本书
前言列出三类读者:修过图形学入门课程的研究生和高年级本科生、渲染方向的研究者,以及业界开发者。读者应掌握向量几何与变换(第3章会复习)、微积分和基础概率,以及 C++。
本书的设计是大致从前往后阅读。对于一学期的高级渲染课程,实用的核心内容是第1章、第2章、第4章、第3章和第5–7章的部分内容、第8章(至少采样理论和一两种采样器)、第9章、第12章和第13章;第11章和第14章增加体渲染内容,第15章适合对 GPU 感兴趣的学生。按照作者的建议,初读时跳过带星号的小节;由于 pbrt 以接口为中心构建,作者也指出,读者在理解某个组件的接口之后可以跳过它的具体实现。
从 pbrt.org 下载 pbrt 源代码和场景,边读边渲染,并按难度等级选择练习:一两个小时的练习用于巩固,10–20 小时的练习可作为课程作业,40 小时以上的练习可作为期末项目。书中的渲染图像可在 pbr-book.org 上在线查看以便比较。
版本与来源
本导读依据第四版(MIT Press,2023),阅读的是作者自 2023 年 11 月起免费开放的官方在线版 https://pbr-book.org/4ed/contents。内容取材于前言全文(读者对象、目标和各版之间的变化)、完整目录、第1.2–1.5节(包括如何阅读本书和练习等级)、全部 16 章和三个附录的导言、第16章的小节标题,以及除第16章外每一章的练习页面。
