Part I Ray Tracing Basics
如今,光栅化在大多数实时渲染的应用领域里占据着主导地位,因此可能许多探寻实时渲染技巧的读者最后一次接触光线追踪是在学生时代(可能是几十年前)。 本部分包含各种介绍性章节,以帮助了解基础知识,构建通用词汇表,并提供其他简单(但有用)的构建模块。
第一章,“光线追踪术语”,定义了本书中使用的常用术语,并引用了引入这些观点的开创性研究论文。 对于新手读者来说,当你深入研究文献时,会出现令人困惑并且不断变化的各种重叠和命名不佳的术语; 当你阅读30年前的论文同时不理解术语的演变过程的时候,可能会感到沮丧。 本章提供了基本的路线图。
第二章,“什么是光线”,包含了几种常见的光线的数学定义,如何去理解他们,并且哪些通常会被用到现代API里面。虽然这一个简单的章节,弄清楚这个基础的基本结构,可能有助于提醒读者到处都存在着数字精度问题。 对于光栅化,z-fighting和shadow mapping会出现精度问题; 在光线跟踪中,每个光线查询都需要注意避免伪交点(更广泛地覆盖精度问题在第六章里)。
最近,微软介绍了DirectX RayTracing,这是对于DirectX光栅 API的扩展。在第三章,“DirectX Raytracing 简介”,简要介绍了该编程接口引入的抽象概念、mental模型和新的着色阶段。 此外,它还介绍并解释了初始化API所需的步骤,并提供了示例代码的指示以帮助您入门。
光线追踪可以轻松建立任意的相机模型,不像光栅化API一样使用4X4的projection 矩阵来限制相机。在第四章,A Planetarium Dome Master Camera(天文馆圆顶主照相机)提供数学理论和示例代码,用于为180°半球形穹顶投影(例如,天文馆)构建光线追踪照相机。
第5章,“计算子数组的最小值和最大值”描述了基本算法构建块的三种计算方法(具有各种计算权衡):计算数组的任意子集的最小值或最大值。 从表面上看,此类查询的计算显然与光线追踪无关,但它在诸如科学可视化等领域中具有应用,其中通常使用光线查询。
本部分中的信息将帮助您开始了解现代光线跟踪的基础知识,以及高效地使用它进行渲染所需的心态。