Games101 - 导学
计算机图形学
看一个游戏的图形方面做得如何,一般可以参考画面亮不亮,原因是这关系到了全局光照。
光栅化 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后处理的方式施加在最后图像上(屏幕空间),然后只进行了一次光照计算就实现了最终效果。缺点:不适用于半透明。