《Real-Time Rendering 3rd》其书
在实时渲染和计算机图形学领域,《Real-Time Rendering 3rd》这本书一直备受推崇。有人说,它实时渲染的圣经。也有人说,它是绝世武功的目录。
诚然,《Real-Time Rendering 3rd》这本书的世界观架构宏大,基本涵盖了计算机图形学的方方面面,可谓包罗万象。概念讲得清楚明了,有丰富的论文引用,可供作为工具书查阅,深入某细分领域继续学习使用。
){:height=”600” width=”800”}
当然,如果我们吹毛求疵,那么也可以说,正因这本书包罗万象,由于篇幅受限,就会拥有一个缺点,就是大而不精。由于篇幅,很多知识点到为止,无法展开讲解,缺少更多范例,这就会让初学者读起来理解坡度稍为陡峭。但我们知道,图形学和实时渲染领域的知识浩如烟海,就算是写个字典式的总览,这本书的篇幅也已经达到了惊人的1047页,要是再写详细一些,估计至少得3000页了。
总之,《Real-Time Rendering 3rd》这本书,可谓图形学界“九阴真经总纲”一般的存在,当世武功的心法口诀,尽数记载。它涵盖了计算机图形和实时渲染的方方面面,可做论文综述合集了解全貌,也可作案头工具书日后查用。
相关背景
《Real-Time Rendering 3rd》出版于2008年,至今已经9年之久,但丝毫不能减弱它作为实时渲染界泰斗之作的重量。
这本书第三版目前没有中译版,只有第二版(英文原版出版于2002年)的中译版。网络上有一些第三版的翻译,但大多翻译到第四章后就没有下文。
上文已经说到,《Real-Time Rendering 3rd》这本书,可谓图形学界“九阴真经总纲”一般的存在,当世武功的心法口诀,尽数记载。
图像渲染管线架构概述 Architecture
渲染管线的主要功能就是决定在给定虚拟相机、三维物体、光源、照明模式,以及纹理等诸多条件的情况下,生成或绘制一幅二维图像的过程。对于实时渲染来说,渲染管线就是基础。因此,我们可以说,渲染管线是实时渲染的底层工具。
渲染出的图像的位置、形状是由它们的几何形状,环境特性,摄像机位置决定的。而物体的外观由材质特性,光源,纹理和着色模型确定。
在概念上可以将图形渲染管线分为三个阶段:
应用程序阶段(The Application Stage) 几何阶段(The Geometry Stage) 光栅化阶段(The Rasterizer Stage)
几个要点:
每个阶段本身也可能是一条管线,如图中的几何阶段所示。此外,还可以对有的阶段进行全部或者部分的并行化处理,如图中的光栅化阶段。应用程序阶段虽然是一个单独的过程,但是依然可以对之进行管线化或者并行化处理。
最慢的管线阶段决定绘制速度,即图像的更新速度,这种速度一般用FPS来表示,也就是每秒绘制的图像数量,或者用Hz来表示。
应用程序阶段 The Application Stage
应用程序阶段一般是图形渲染管线概念上的第一个阶段。应用程序阶段是通过软件方式来实现的阶段,开发者能够对该阶段发生的情况进行完全控制,可以通过改变实现方法来改变实际性能。其他阶段,他们全部或者部分建立在硬件基础上,因此要改变实现过程会非常困难。 正因应用程序阶段是软件方式实现,因此不能像几何和光栅化阶段那样继续分为若干个子阶段。但为了提高性能,该阶段还是可以在几个并行处理器上同时执行。在CPU设计上,称这种形式为超标量体系(superscalar)结构,因为它可以在同一阶段同一时间做不同的几件事情。 应用程序阶段通常实现的方法有碰撞检测、加速算法、输入检测,动画,力反馈以及纹理动画,变换仿真、几何变形,以及一些不在其他阶段执行的计算,如层次视锥裁剪等加速算法就可以在这里实现。 应用程序阶段的主要任务:在应用程序阶段的末端,将需要在屏幕上(具体形式取决于具体输入设备)显示出来绘制的几何体(也就是绘制图元,rendering primitives,如点、线、矩形等)输入到绘制管线的下一个阶段。 对于被渲染的每一帧,应用程序阶段将摄像机位置,光照和模型的图元输出到管线的下一个主要阶段——几何阶段。
几何阶段 The Geometry Stage
几何阶段主要负责大部分多边形操作和顶点操作。可以将这个阶段进一步划分成如下几个功能阶段:
模型视点变换Model & View Transform 顶点着色Vertex Shading 投影 Projection 裁剪 Clipping 屏幕映射Screen Mapping
模型和视图变换 Model and View Transform
在屏幕上的显示过程中,模型通常需要变换到若干不同的空间或坐标系中。模型变换的变换对象一般是模型的顶点和法线。物体的坐标称为模型坐标。世界空间是唯一的,所有的模型经过变换后都位于同一个空间中。
不难理解,应该仅对相机(或者视点)可以看到的模型进行绘制。而相机在世界空间中有一个位置方向,用来放置和校准相机。
为了便于投影和裁剪,必须对相机和所有的模型进行视点变换。变换的目的就是要把相机放在原点,然后进行视点校准,使其朝向Z轴负方向,y轴指向上方,x轴指向右边。在视点变换后,实际位置和方向就依赖于当前的API。我们称上述空间为相机空间或者观察空间。
总结
模型和视图变换阶段分为模型变换和视图变换。模型变换的目的是将模型变换到适合渲染的空间当中,而视图变换的目的是将摄像机放置于坐标原点,方便后续步骤的操作。