Unity渲染流水线总结

Posted by QXSoftware on October 23, 2016

Unity 的渲染流水线分为三个阶段

下面就这三个阶段详细说明一下。

应用程序阶段

这一阶段的主要任务是,准备渲染所需数据,设置渲染状态,向 GPU 发出 DrawCall。应用程序阶段是游戏开发者完全可控的。

准备渲染数据

这一步主要是从硬盘加载各种资源(AssetBundle),包括模型,贴图,Shader 等。为了优化性能,这一步一般会计算物体的可见性,比如使用遮挡剔除(Occlusion Culling)算法,或者使用自定义算法,比如 AOI(Area of Interest)。这样做可以由 CPU 计算出不需要显示的模型,减少 GPU 的压力。

其中 Occlusion Culling 是 Unity 引擎帮我们实现的,而 AOI 是由游戏开发者自己实现的。

设置渲染状态

这一步包括设置相机参数、灯光参数,以及哪些模型使用什么材质等。

发出 DrawCall

在所有东西都准备好之后,就可以向 GPU 发出指令了。

几何阶段

这一阶段一个最重要的目的就是将顶点坐标由模型空间转换到裁剪空间。这一步在 vertex shader 中体现为一句话:o.pos = mul(UNITY_MATRIX_MVP, v.position);。除了顶点坐标空间转换,这一步还可以执行逐顶点关照计算。

执行了裁剪操作之后,会进行屏幕映射。之后就到了光栅化阶段。

光栅化阶段

这一阶段会根据三角形生成其中覆盖的所有片元(fragment),片元经过 fragment shader 以及各种测试和片元操作,最终会被遗弃或显示。


转载请注明出处:

This work is licensed under a MIT License.