第十一章 深度

11.1 可见性(visibility)

在物理世界中,如果物体 A 位于物体 B 的前方,则来自物体 B 方向的光,会在到达摄影机前被物体 A 挡住,因而不会出现在画面中(例如,图10.2中的蓝色六边形)。在计算机图形学中,我们需要以计算的方式对其建模。

对于确保只有对摄影机可见的面(surface)出现在渲染画面(image)中,有很多实现方式。其中一种是,将三角面根据它们在摄影机方向的深度进行排序,再由后至前绘制它们。这一思想在于最前面的三角面会重新绘制并覆盖在其后方的三角面上,从而得到正确的渲染画面。这一方法称作画家方式(painter's approach)的思路,它存在一些难以处理的点。例如,一个场景中也许包含有相互穿插的三角面。它也许还会包含图 11.1 中可见性循环(visibility cycles)这样的穿插三角面的情况。

另一种广泛使用的方式,我们将会在第 20 章中讨论,即光线追踪(ray casting)。这个方式,是对每一个像素,显式的计算沿着该像素方向的视线与场景的交点。使用距离最近的交点来计算该像素的颜色。

可见性计算也可以用于加速渲染过程。如果我们知道一个物体会被挡住,从一开始我们就不用去渲染它。这可以使用在诸如室内场景中,我们通常不会看到房间外很远的东西。在这种情境下,我们可以使用保守可见性检测(conservative visibility test);这一检测可以很快告诉我们一个物体是可能,或者完全不可能具有可见性。如果一个物体可能是可见的,那么我们使用 z-buffer 继续渲染该物体。但如果该物体完全不可能可见,那么我们可以将整个绘制省略掉。

11.2 基础数学模型

汇总在一起,我们现在可以将视角坐标系向归一化设备坐标系(NDC)转换的过程考虑为纯粹的 3D 几何变换。这一变换通常既非线性,也非仿射,而被称作三维投影变换(3D projective transformation)。

注意,尽管如此,投影变换不会保留距离。再次看看图 11.2 以及 11.3,我们可以看出,在二维平面上距离相等的像素,并不对应着视角空间下距离相等的几何点。同样,这些等距分布的像素,也不会对应归一化设备坐标系下等距的点。

Last updated