unity-doc-渲染路径

前向渲染路径

Forward Rendering Path
每进行一次完整的前向渲染,我们都需要渲染该对象的渲染图元,并计算颜色缓冲区和深度缓冲区的信息,其中深度缓冲区的信息决定了一个片元是否可见,若可见则颜色缓冲区中的值会被更新

对于每个逐像素光源,都需要进行一次上述渲染流程。若一个物体在多个逐像素光源的影响区域内,则该物体会执行多个Pass,每个Pass计算一个逐像素光源的光照结果,然后在帧缓冲中把这些光照结果混合起来得到最终的颜色值。假设,场景中有N个物体,每个物体受M个光源的影响,那么要渲染整个场景一共需要N*M个Pass。也就是逐像素光照越多执行的Pass数也有可能越变越大,因此渲染引擎通常限制每个物体逐像素光照的数目。

渲染方式

当我们渲染一个物体时,Unity会计算哪些光源照亮了它,以及这些光源照亮该物体的方式。
在Unity中,前向渲染路径有3种处理光照(即,照亮物体)的方式:逐像素处理逐顶点处理球谐函数(Spherical Harmonics, SH)处理

  • 分类方式
    • 如果一个灯被标记为Not Important,则这个灯会采用逐顶点或SH
    • 最亮的一盏平行灯采用逐像素
    • 被标记为Important的灯采用逐像素
    • 如果上面产生逐像素的灯数量小于工程中的像素等数量的话,则会有更多的等采用逐像素

Light Mode

ForwardBase

ForwardBase仅用最亮的逐像素的平行灯,以及所有的逐顶点与SH

可实现的光照效果有光照纹理(lightmap),环境光,自发光,阴影(主要指平行光的阴影)。
请注意,(1)lightmap对象不会从SH光源获得光照。(2)在着色器中使用OnlyDirectional作为该pass的Tag值时 ,前向渲染的Base Pass仅渲染主方向光、环境光、光照探针(lightprobe)和光照纹理,SH和顶点光不包括在该pass数据中。

ForwardAdd

ForwardAdd用于其他所有的逐像素灯,可实现的光照效果不支持阴影。

除非使用multi_compile_fwdadd_fullshadows变体快捷方式,否则默认情况下,这些Pass中的光照没有阴影,所以总的来看,正向渲染只支持一个带阴影的平行光。
多说一句关于性能的考量
球形谐波光照(SH)的渲染速度非常快。它们在CPU上的成本很小,甚至实际上可以免费供GPU应用(也就是说,base pass总是计算SH光照;但是由于SH光照的工作方式,其计算成本光照数目的增加而增加)。
不过SH光照也有非常明显的缺点:

  • 它们是在对象的顶点而不是像素处计算的,因此不支持light Cookies或法线贴图(normal maps)
  • SH光照频率很低,不能表现尖锐的灯光过渡,也仅影响漫反射光照(对于高光而言,频率太低)。
  • SH光照不在本地;靠近某个表面的点光源的光照计算效果看起来是错误的。

总而言之,SH光照通常可以应付小型动态物体。

延迟渲染路径

Deferred Rendering Path,将着色计算进行延后处理的一种渲染方式

pass

  • 几何处理G-Buffer Pass

    • RT0,ARGB32:Diffuse Color(RGB),Occlusion(A)
    • RT1,ARGB32:Specual Color(RGB),Roughness(A)
    • RT2,ARGB2101010:World Space Normal(RGB),Unused(A)
    • RT3,ARGB2101010(non-HDR) or ARGBHalf(HDR):Emission+Lighting+Lightmap+Reflection Probe
    • RT4,ARGB32:Light Occlusion
    • Depth + Stencil Buffer
  • 光照处理Lighting Pass

    • 只需渲染出一个屏幕大小的二维矩形,使用第一步在G-Buffer中存储的数据对此矩阵的每一个片段进行计算光照
  • 优点

    • 影响一个物体的光源数量是没有限制的
    • 每一个光源都是逐像素级别的效果,并且可以正确的计算法线贴图及阴影
  • 缺点

    • 不支持半透明效果
    • 不支持抗锯齿
    • 内存开销大
    • 不支持正交相机
  • 支持

    • 显卡必须支持Multiple Render Targets(MRT),即多渲染目标
    • SahderModel在3.0及以上
    • 手机平台在OpenGL3.0及以上

顶点照明渲染路径(Legacy)

Vertex Lit Rendering Path

  • 优点

    • 性能最优
    • 支持的硬件最广
    • 一个物品仅渲染一次,并且所有的光照计算都在顶点进行
  • 缺点

    • 不支持像素级别的效果,比如阴影、法线贴图、高质量高光等

旧的延迟渲染路径(Legacy)

Deferred Rendering Path