Unity 的渲染路径

什么是渲染路径

程序员指定渲染路径,是想配置光照属性与渲染流程。这是程序员与Unity的一个暗号。

渲染路径中主要有两种,一是前向渲染路径(Forward Rendering Path),一是延迟渲染路径(Differred Rendering Path)。

前向渲染路径

前向渲染需要计算两个缓冲区的信息,一是颜色缓冲区,二是深度缓冲区。利用深度缓冲来决定一个片元是否可见,如果可见就更新颜色缓冲区。

Unity含有内置的光照变量和函数,指定了前向渲染路径时,Unity会进行相关计算并填充一些变量如_LightColor0。

如何指定前向渲染路径

大多数情况下,一个项目只使用一种渲染路径,可以在菜单Edit里设置。

要是想使用多种渲染路径,也可以对不同的摄像机进行不同的设置。

完成了上面的设置,就可以在Pass中使用标签“LightMode”来指定该Path使用的的渲染路径,比如,“LightMode”=“ForwardBase”告诉Unity,当前Pass使用的是前向渲染路径中的“ForwadBase”路径,在shader中访问到Unity填好的光照属性。对于前向渲染,Unity Shader通常会定义一个Base Pass和一个Add Path。通常在Base Path中执行平行光照的逐像素计算,在Add Path中计算其他逐像素光照,最后Blend这些值。实际上,由于Shader中如何利用内置属性进行光照计算,完全取决于程序员,所以也可以在Base Path中进行逐顶点光照计算。

延迟渲染路径

前向渲染会多出很多重复的操作,延迟渲染可以解决。延迟渲染不仅要计算深度缓冲、颜色缓冲,还需要计算G缓冲(Geometry Buffer,G-Buffer)。G-Buffer中存储表面信息,包括表面的法线、位置、材质属性等。

延迟渲染的流程主要包括两个Pass,第一个Pass利用深度缓冲计算片元的可见性,如果一个片元可见就把其相关信息放到G-Buffer中。在第二个Pass中利用G-Buffer中的表面信息计算真正的着色。