1、基础说明
Unity内置管线的渲染路径主要包含了延迟渲染管线和前向渲染管线。(不讨论旧版延迟渲染和旧版顶点光照)
Unity内置管线的切换可以在Graphics Setting中更改
也可以在摄像机的设置上更改
渲染路径的作用:告诉Unity,光照是如何应用到Unity Shader的。
前向渲染
简单说明
作用在每个物体上一定数量最亮的光(一般4个)逐像素,而后四个逐顶点,剩余的SH计算。
当光源有设置RenderMode时,Important始终为逐像素计算,Not Important时,始终为逐顶点或者SH计算。
Light Model相关
在Shader中,对Pass进行标记Light Model,指定计算何种光源。
ForwardBase:应用环境光、主方向光、顶点/SH 光源和光照贴图。
ForwardAdd:应用附加的逐像素光源。
multi_compile 相关
multi_compile_fwdbase 编译 PassType.ForwardBase 所需的所有变体。这些变体处理不同的光照贴图类型以及启用或禁用的方向光主要阴影。
multi_compile_fwdadd 编译 PassType.ForwardAdd 的变体。这将编译变体来处理方向光、聚光灯或点光源类型,以及它们带有剪影纹理的变体。
multi_compile_fwdadd_fullshadows - 与 multi_compile_fwdadd 相同,但还能够让光源具有实时阴影。
主要缺点:光源越多,性能越差。假设场景中有N个物体,每个物体受到M个光源的影响,那么要渲染整个场景,就需要N*M个pass。
延迟渲染
所有光源都按像素进行评估,对多光源的支持在性能上和表现上都好。
延迟渲染下G-Buffer中情况
RT0,ARGB32格式:漫反射颜色(RGB),遮挡(A)。
RT1,ARGB32格式:镜面反射颜色(RGB),粗糙度(A)。
RT2,ARGB2101010 格式:世界空间法线 (RGB),未使用 (A)。
RT3,ARGB2101010(非 HDR)或 ARGBHalf (HDR) 格式:发射 + 光照 + 光照贴图 + 反射探针缓冲区。
主要缺点:不能在硬件层支持抗锯齿,半透明物体会使用前向渲染。需要额外的内存存储G-Buffer。不支持正交投影
要求显卡支持MRT、Shader Model 3.0
参考
Unity官方渲染路径说明
Unity官方Shader Pass-Tag说明
Unity官方着色器变体和关键字说明