计算机图形学讲义
大家好,我今天要展示的是一个软件渲染器。
众所周知,良好的图像效果是一款游戏最直观的吸引点,而渲染在其中又扮演着至关重要的角色。一款好的渲染器能够成为游戏的支柱,保障良好的图像效果,而学习图像渲染的原理也能够让我们充分掌握上层图形API的使用。因此,我选择了以此作为媒体制作软件的选题。
图形渲染,就是指将三维空间中的图形通过一定方式变为屏幕中的图像。
渲染器分为光栅化渲染器和光线追踪渲染器两种。我选择实现的是一款光栅化渲染器。
光栅化渲染主要分为以下几个环节,而它们又被称为渲染管线。
一是顶点处理。在这个环节中,三维空间中的顶点被映射到屏幕的二维空间中,这种映射是一种仿射变换,它们由模型(model)、视图(View)、投影(Projection)和视口(Viewing)变换组成。前三者将空间坐标映射到归一化的矩形空间中,而最后一个变换将矩形空间中的坐标映射到屏幕上。我的代码实现如下:
二是三角形处理。在这个环节中,离散的顶点通过一定的拓扑顺序和绕序被程序构造成三角形的几何面片,从而将顶点构造为能够执行渲染的单元。
三是光栅化。在这个环节中,连续的三角形被打散为离散的采样单元,被存储进帧缓冲器(Frame Buffer)中。同时,采样点的深度信息还会通过深度测试被存储进深度缓冲器(Z Buffer)中,以正确计算图形的遮挡关系。值得注意的是,采样单元并不一定是一个像素,因为一个像素的信息可能会由多个采样点的信息综合而成,例如超采样抗锯齿技术(MSAA)。以下代码展示了通过MSAA实现的抗锯齿效果。
四是着色。在这个环节中,我们通过一定的材质模型为每一个被计算的面片提供颜色信息。在光栅化渲染器中的颜色计算并非基于物理模拟的真实渲染,而是符合一定图像原理的经验模型,比如Blinn-Phong光照模型。在这个模型下,物体的颜色计算被分为漫反射、高光和环境光三个环节。通过插值,我们能够计算得到三角形内部的颜色、法线和位置信息,从而提升渲染的效果。同时,为了简化并使对模型表面的颜色信息进行工程化的编辑成为可能,现代工业中还大量使用纹理映射技术。在这种技术中,物体表面的颜色信息被存储在被称作纹理的贴图中,并通过一定的关系映射到模型表面的坐标上。
五是输出。在这个环节中,帧缓冲器和深度缓冲器等信息被软件合成,从而输出最终的图像。