1.4 如何阅读本书(How to Proceed through This Book

我们编写本书时假设读者会大致按照从前到后的顺序阅读。我们尽量减少对尚未介绍的概念和接口的前向引用,但我们假设读者在文章的任何特定点上都熟悉之前的内容。有些章节深入探讨了一些高级主题,某些读者可能希望在第一次阅读时跳过;每个高级章节在标题中用星号标识。

由于系统的模块化特性,主要要求读者需要熟悉如 Point3f 、 Ray 和 SampledSpectrum 的底层类、表 1.1 中列出的抽象基类定义的接口、以及最终调用积分器的 RayIntegrator::Li() 方法的渲染循环。有了这些知识,假如读者如果不关心基于透视投影矩阵的相机模型如何将 CameraSample 映射到光线,可以跳过该相机的实现,只需记住 Camera::GenerateRayDifferential() 方法以某种方式将 CameraSample 转换为 RayDifferential

本书的其余部分分为四个主要部分,每个部分包含几章。首先,第 2 章到第 4 章介绍了系统的基础。第 2 章简要介绍了蒙特卡罗积分的关键思想,第 3 章描述了广泛使用的几何类,如 Point3fRayBounds3f 。第 4 章介绍了用于测量光的物理单位以及 pbrt 用于表示光谱分布的 SampledSpectrum 类。它还讨论了颜色和人类对光谱的感知,这影响了输入如何提供给渲染器以及它如何生成输出。

本书的第二部分涵盖了图像形成以及场景几何的表示。第 5 章定义了 Camera 接口和几种不同的相机实现,然后讨论将到达胶片的光谱辐射转化为图像的整体过程。第 6 章介绍了 Shape 接口,并给出了多个形状的实现,包括如何与它们进行光线相交测试。第 7 章描述了加速结构的实现,这些结构通过跳过与光线可以明确不相交的图元的测试,使光线追踪更高效。最后,第 8 章的主题是 Sampler 类,这些类在图像平面上放置样本,并为蒙特卡洛积分提供随机样本。

书的第三部分讲述了光以及光如何在表面和参与介质中散射。第 9 章包括一系列定义不同类型表面反射的类。第 10 章中描述的材质使用这些反射函数来实现多种不同的表面类型,如塑料、玻璃和金属。材料属性(颜色、粗糙度等)的空间变化通过纹理建模,这些纹理在第 10 章中也有描述。第 11 章介绍了描述光在参与介质中如何散射和吸收的抽象,而第 12 章则描述了光源的接口和各种光源实现。

最后一部分将书中其余部分的所有想法汇集在一起,以实现一些有趣的光传输算法。第 13 章和第 14 章中的积分器代表了蒙特卡罗积分在计算光传输方程的更准确近似值方面的多种不同应用,相较于 随机游走积分器 。第 15 章随后描述了在 GPU 上运行的高性能积分器的实现,该实现基于与 CPU 积分器实现中使用的相同类的实现。

16 章,书的最后一章,提供了对系统设计决策的简要回顾和讨论,以及一些比练习中更具深远意义的项目建议。附录包含更多的蒙特卡罗采样算法,描述工具函数,并解释在解析输入文件时场景描述的创建细节。

1.4.1 练习(The Exercises)

在每一章的末尾,您会找到与该章所涵盖的内容相关的练习。每个练习被标记为三种难度级别之一:

①   一个应该只需一到两个小时便能完成的练习

②   适合当作课后作业的阅读和实现任务,预计需要 10 到 20 小时来完成

③   可能需要 40 小时或更长时间才能完成的课程的最终项目

1.4.2 查看图像(Viewing the Images)

本书中的图表比较了使用不同算法渲染同一场景的结果。与本书的前几版一样,我们尽力确保这些差异在印刷页上显而易见,尽管即使是高质量的印刷也无法与现代显示技术相匹配,尤其是在高动态范围显示器广泛可用的情况下。

因此,我们已将本章中使用的所有渲染图像在线提供。例如,本章中作为图 1.1 显示的第一张图像可以在网址 pbr-book.org/4ed/fig/1.1 找到。其他所有图像均遵循相同的命名规则。

1.4.3 在线版(The Online Edition)

从 2023 年 11 月 1 日起,本书的全部内容将在 pbr-book.org/4ed 上免费在线提供。(本书的前一版已在该网站上提供。)

在线版包含了由于页面限制无法包含在印刷书籍中的额外内容。所有这些材料都是本书内容的补充。例如,它包括一个额外相机模型的实现、一个 kd-tree 加速结构,以及关于双向光传输算法的完整章节。(几乎所有额外材料都在本书的前一版中出现过。)