计算机图形学

看一个游戏的图形方面做得如何,一般可以参考画面亮不亮,原因是这关系到了全局光照。

光栅化 Rasterization

把三维的几何形体画在屏幕上,这个画的过程,就叫光栅化。

几何学 Curves and Meshes

光线追踪 Ray Tracing

从相机发射光线穿过每个像素,计算交集和阴影,并继续反射光线直到它们击中光源。

动画、仿真 Animation/Simulation

其他行业应用。

总结

描述整个渲染管线

现代GPU常规流程。具体的可以看渲染管线篇

0.一堆三维空间的顶点。

1.将顶点做MVP变换,拉伸转换成2维平面。这步涉及2种相机、根据相似三角形确定的拉伸矩阵纹理映射。(如果是顶点着色模式,这在一步,还会进行Shading

  • 纹理映射:这一步就要做,因为需要在3维空间内和uv贴图进行一一映射。关系是 二维像素 - 三维平面 - uv贴图。

2.将二维平面的点进行连线,做出大量三角面(顺时针为正面)。

3.将三角面进行采样,投射到屏幕的像素点上,这一步叫光栅化。这步涉及:光栅化的预处理视口变换、采样阶段的优化包围盒、为了抗锯齿做的预处理(滤波、模糊)。

  • 视口变换:光栅化的预处理,将一个 [-1,1] x [-1,1] 的2维平面,转换成[width,0] x [0,height]的笛卡尔坐标系内来表示。

  • 抗锯齿:通过对图像模糊预处理(使用傅里叶来低通滤波),再用 多重采样抗锯齿 MSAA(超采)或其他 技术来采样。

4.确定了像素点,像素点之间还需要实现遮挡,用Z-Buffer。(如果是全像素着色模式,这在一步,还会进行Shading

  • Z-Buffer:只渲染每个像素上depth最浅的那个颜色。当物体发生运动后,会同步更新深度,有更小值出现就重新赋色。

5.通过 帧缓存技术 Framebuffer,将前面确定的像素点渲染到屏幕上。

  • 帧缓存技术 Frame Buffer(Memory for a Raster Display):将显卡中的一块内存区域中,存储的内容反映到屏幕上。

6.Shading单独拉出来说。着色目的是为了确定一个像素点的颜色系数,它受到uv贴图上对应的像素点+光反射,得到最终值。光反射在Blinn-Phong模型下,有3种光源:高光、漫反射、环境光照。着色频率分为3种:逐三角面、逐顶点、逐像素。

此外,纹理处理也有2种处理:Mipmaps (1/3)、Ripmaps 各异向性过滤(3倍)。

补充

前向渲染 (Forward Rendering):把空间的点进行各种剪裁后,进行处理。先渲染一遍物体,把法线和高光存在ARGB32的渲染纹理中(法线用rgb通道,高光用a通道),存在了z buffer里;然后通过深度信息,法线和高光信息计算光照(屏幕空间),光照信息缓存在Render Texture中;最后混合。

延后渲染 (Deferred Rendering):将摄像机空间的点光栅化转化成屏幕坐标后再进行处理。先不进行光照运算,对每个像素生成一组数据(G-buffer),包括位置,法线,高光等,然后用这些数据将每个光源以2D后处理的方式施加在最后图像上(屏幕空间),然后只进行了一次光照计算就实现了最终效果。缺点:不适用于半透明。