背景
在渲染3D图形时,有两个问题我们需要回答:
- 如何表示一个三维世界?
- 如何将这个表示转换为二维图像?
我们将同时构建这两个问题的答案。
至少,我们需要一个充满物体的世界,即几何体。世界中还包含光源,这些光源将光线散射到几何体上。基于几何体的物理属性,光线会一次又一次地从几何体上反弹,照亮整个场景。这就是渲染方程的基础。
如下图所示

要真正查看这个场景,我们在世界中放置一个相机。这类似于我们的眼睛。从几何体反射的光线汇聚到相机,我们记录这些光线在称为图像平面的虚拟画布上的位置。在这个过程中,我们必须确定图像平面上的每个点实际上可以看到什么。

从几何形状发出的光线在相机处汇聚,穿过成像平面。这种汇聚使得距离相机较远的物体看起来更小,这种效果被称为透视
有两种方法可以解决可见性问题。概念上简单的方法是光线追踪,它通过从相机发出光线来模拟到达相机的光线,然后跟踪其传播到光源的路径。这很好地映射了光在现实世界中的物理传播方式,使模拟现实世界的效果(如阴影和反射)变得简单。这些效果统称为全局照明
然而,这种模拟很慢。另一种方法是栅格化。在这种方法中,我们首先将几何形状投影到图像平面上,然后直接处理几何形状的透视校正表示。这种方法可以更有效地实现,但代价是增加了复杂性。全局照明效果需要逐个特殊处理,通常需要多个渲染通道和预计算(“烘烤”)。
光栅化的工作原理是将几何图形投影到图像平面上,然后检查平面上哪些像素被投影的几何图形覆盖
如下图所示

光线追踪通常用于脱机渲染,如皮克斯电影,光栅化用于实时图形,如游戏。后者是gpu使用的方法。
在本课程中,我们将专注于光线追踪。它紧密地反映了我们对光与世界相互作用的直觉,我们可以避免在开发的初始阶段进行更复杂的数学计算。这让我们可以在小块中构建渲染器。我们将使用的概念是基础的,所以它们延续到实时渲染技术,以不同的方式近似相同的光传输