Chapter 2 – The Graphics Rendering Pipeline 图形渲染管线

2.6 “穿越”管线

游戏中的物体或者模型一般由点,线,三角形,这几种图元所组成。假设一个应用是类似于CAD的软件,而用户正在检验一个华夫饼制作机的设计。那么我们将遵循,模型会通过的整个图形学渲染管线由四个主要阶段所组成:应用,几何,光栅化,以及像素处理。整个场景通过透视投影到屏幕上的窗口中。在我们所举的例子中,华夫饼制作机的模型包含线段(表示零件的边缘)与三角形(表示模型表面)。华夫饼制作机有一个盖子,而且可以被打开。一部分三角形带有显示制造商logo图像的贴图。这个例子中,表面的着色完全由几何阶段负责,除了使用贴图的部分,而这一部分将发生在光栅化阶段。

应用

CAD软件允许用户选中并移动模型的零件。例如,用户可以选中盖子,之后使用鼠标来打开盖子。应用阶段必须将鼠标的移动转换为相对应的旋转矩阵,之后在绘制模型时,该矩阵需要被运用于盖子。另一个例子:播放一个camera动画,沿着预定义的路径移动camera,并在不同角度展示华夫饼制作机。camera的参数,例如位置,视野方向,必须由应用基于时间进行更新。在绘制每一帧画面时,应用阶段将camera的位置,光照以及模型的图元传输至管线的下一个主要阶段——几何阶段。

几何处理

对于透视投影,我们假设应用已经提供了相对应的投影矩阵。同时,对于每一个物体,应用已经计算了视野空间转换矩阵以及物体自身的位置朝向矩阵。在我们的李子中,华夫饼制作机的底座拥有一个矩阵,而盖子拥有另一个矩阵。在几何阶段,物体的顶点与法线将通过该矩阵转换至视野空间。之后,我们可能会使用材质与光源的熟悉进行着色或者其他计算。投影则需要使用用户提供的投影矩阵,其将物体转换至单位立方体空间,该空间表示camera的视野范围。所有处于该立方体之外的图元都会被舍弃。所有与该立方体相交的图元都会基于立方体进行剪裁,这样我们就会得到一组完全位于单位立方体内的图元。之后顶点被映射到屏幕中的窗口。在所有这些基于三角形以及基于顶点的操作完成之后,数据将被传输至光栅化阶段。

光栅化

所有在上一阶段“幸免”于建材的图元之后会被光栅化,这意味着我们会找到所有位于图元内的像素,而这些像素将被传输至像素处理阶段。

像素处理

这一阶段的目标是计算每一个可见图元中每个像素的颜色。那些与贴图相关联的三角形将使用贴图进行绘制。像素是否可见则由z-buffer算法决定,我们还可以选择是否舍弃一个像素或者使用stencil test。每个物体都会依次处理,最后图像会呈现在显示屏上。

总结

我们所介绍的管线是多年来API与针对实时渲染的图形硬件不段进化的产物。我们需要注意的是,这并不是唯一的一种渲染管线;离线渲染有着不同的进化路径。电影行业一般使用微多边形管线(micropolygon pipeline),但是之后被射线追踪(ray tracing)与光线追踪(path tracing)所替代。这些技术将在之后的章节再来讨论。

许多年来,开发者只能通过图形API定义的固定功能管线(fixed-function pipeline)来使用我们所提到的渲染管线。其之所以被命名为固定功能管线,这是因为图形硬件负责处理管线,且管线不能被编程。最后一个固定功能管线的主机平台是任地狱的Wii。可编程的GPU意味着在管线中的不同阶段,开发者能够决定进行何种操作。

更进一步

A Trip Down the Graphics Pipeline,本书介绍了如何实现渲染管线,并且解释了其中的一些关键算法,如剪裁,透视插值等等。

OpenGL Programming Guide,本书也介绍了图像关系与相关的算法。

realtimerendering.com,本书的官方网站也提供了不同的管线图解,渲染引擎的实现,等等。

留下评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据