转载请注明出处
欢迎留言、讨论、指正
本文未注明出处图片均来自 个人 或 Fundamentals of Computer Graphics(4th Ed)
前几章建立了“对象顺序渲染”的数学基础,现在可以来看看“对象顺序渲染”了。与光线追踪不一样,我们将依次考察每个对象对那些像素产生了怎么样的影响。这个找到几何对象影响的像素的过程称为栅格化(rasterization)(也称作scanline renderers),故“对象顺序渲染”也被称作“栅格化渲染”。从对象开始,以刷新图像像素值结束,这个操作序列便被称为管线(graphics pipeline)。
“对象顺序渲染”因其效率高大获成功。对于大型场景,数据访问模式的管理对于性能至关重要,相对于重复检索对象刷新像素值,仅对场景中的对象数据进行一次访问优势要大得多。
有两种目的截然不同的管线:通过API支持OpenGL和Direct3D进行交互式渲染(玩家行为,与游戏环境的交互给图像带来影响)的硬件管线,和支持在电影领域中使用较多支持RenderMan的API的软件管线。硬件管线要求更高的速度,应对实时游戏,虚拟现实,用户交互中的变化做出及时反应。工业管线需要满足尽可能高质量的动画、特效和随屏幕尺寸缩放的要求,可能会花费很长时间。本章侧重于不同管线间的诸多相同点,而不是区别。
管线任务大体分为栅格化几何体自身,和栅格化之后所需要的操作。多数操作都是前两章讨论的矩阵变换,将对象空间中描述几何体的点映射到荧幕空间中(screen space),这样的输入给栅格器(rasterizer),输出便是像素坐标。最常见的像素化操作(pixelwise operation)是被遮挡表面的忽略(hidden surface removal)。再加上每个阶段各自的操作便能完成各种不同的渲染效果。
这章中我们讨论的管线主要分为四个阶段:应用 或场景记录文件 将以顶点几何描述的几何对象送入管线,顶点在顶点处理阶段(vertex-processing stage) 处理为基元(primitves),之后这些基元被送入栅格化阶段(rasterization stage) 之后这些基元被打散成片段,每个片段包含基元影响到的像素点,最终经段处理阶段(fragment processing stage) 处理后由段合成阶段(fragment blending stage) 合成。