US3S4L1——渲染管线概述

渲染路径

渲染路径(Rendering Path)是指在图形渲染过程中,图形引擎按照特定的步骤和顺序来处理场景中的几何、光照、材质等信息,最终生成屏幕上的图像的一种算法或策略。它决定了图形引擎如何组织和执行渲染过程,以产生最终的视觉效果。

对于我们来说:在 Unity 中,渲染路径决定了光照如何应用到 Unity Shader 中,如果要在 Unity Shader 中和光源打交道,我们需要为每个 Pass 渲染通道匹配对应的渲染路径,这样才能在 Shader 当中获取到正确的光源数据进行处理

总而言之:渲染路径会影响光照处理,从而影响最终的渲染效果(光照、阴影等),Unity 存在多种不同的渲染路径

影响原因:简单来说,使用不同的渲染路径时,Unity 在 Shader 中准备光源数据的流程是不同的,那么在 Shader 开发时,获取光源数据的方式就会有所不同

渲染路径的种类和设置

我们可以在 Camera 组件中的 Rendering Path(渲染路径)对其进行修改,在内置渲染管线中主要有3种渲染路径,分别是:

  • Forward(前向渲染路径):默认的标准的渲染方式,适用于相对简单的场景和较少的光源
  • Deferred(延迟渲染路径):可以处理较复杂的场景,有大量光源时可以提供更好的性能
  • Legacy Vertex Lit((遗产)顶点照明渲染路径):较适用于为简单的渲染方式,适用于性能受限的场景。基本已经不会使用

这里是 Unity 的 Built-in 内置渲染管线的渲染路径选项,而非 URP、HDRP、SRP 等管线的选项

注意:当显卡不支持选定的渲染路径时会自动选择一个较低精度的渲染路径,比如不支持延迟渲染路径时,前向渲染路径会被采用

LightMode 标签的作用

我们之前在编写 Shader 时都会使用 LightMode​(光模式)标签。

1
Tags{ "LightMode" = "标签值" }

它的主要作用就是来指明该 Pass​ 匹配的渲染路径是哪种,只要匹配正确,我们便可以获取到正确的光源相关数据

注意:LightMode​ 标签通常应该与 Camera 中的 Rendering Path 匹配
用于指定 Pass​ 在渲染过程中的哪个阶段,如果它们不匹配,可能导致渲染不正确

标签名 描述
Always 不管使用哪种渲染路径,该 Pass​ 始终渲染,但不会计算任何光照
ForwardBase 前向渲染路径的基础照明阶段执行的Pass,该 Pass会计算环境光、重要的平行光、逐顶点/SH(球谐函数光照相关)光源和 Lightmaps
ForwardAdd 前向渲染路径的额外照明阶段执行的 Pass,该 Pass会计算额外的逐像 素光源,每个 Pass对应一个光源
Deferred 延迟渲染路径中执行的 Pass,用于几何阶段之后执行光照计算,该 Pass会渲染 G 缓冲(G-buffer) #TODO#​
ShadowCaster 用于生成阴影图的 Pass,通常用于阴影投射。把物体的深度信息渲染到阴影映射纹理或一张深度纹理中
MotionVectors 用于生成运动矢量的 Pass​,通常用于运动模糊
Meta 用于在渲染对象元数据时执行的 Pass
Vertex​、VertexLMRGBM​、VertexLM 用于遗留的顶点照明渲染(基本不使用了)

在 Shader 开发中如果我们不进行 LightMode​ 渲染标签的设置。
比如摄像机默认的是前向渲染路径,但是我们没有为 Pass​ 设置相关的标签,那么这个 Pass​ 会被当作一个顶点照明渲染路径的 Pass​。
这时光源相关的数据就不会被正确的进行赋值,我们计算出来的结果就会出现错误,从而可能呈现出错误的渲染效果
因此,在进行 Unity Shader 开发时,我们需要对 Pass渲染通道进行正确的 LightMode标签设置,从而匹配当前使用的渲染路径