在内置渲染管线中,使用表面着色器时,如何应用光照以及使用着色器的哪些通道取决于所使用的渲染路径。着色器中的所有通道均通过通道标签来表达其光照类型。
| 功能名称 | 通用渲染管线 (URP) | 高清渲染管线 (HDRP) | 自定义 SRP | 内置渲染管线 |
|---|---|---|---|---|
| 表面着色器 | 否 有关通过 URP 创建着色器对象的简化方法,请参阅着色器图表。 |
否 有关通过 HDRP 创建着色器对象的简化方法,请参阅着色器图表。 |
否 | 是 |
ForwardBase 和 ForwardAdd 通道。Deferred 通道。Vertex、VertexLMRGBM 和 VertexLM 通道。ShadowCaster 通道。
ForwardBase 通道可一次性渲染环境光、光照贴图、主方向光和不重要的(顶点/SH)光源。ForwardAdd 通道负责所有附加的逐像素光源;针对此类光源照亮的每个对象进行一次调用。详情请参阅前向渲染。
如果使用前向渲染,但着色器缺乏适合前向渲染的通道(即,ForwardBase 和 ForwardAdd 通道类型均不存在),则会按照在顶点光照通道中的方式来渲染该对象。具体见下文。
Deferred 通道会渲染光照需要的所有信息(在内置着色器中:漫反射颜色、镜面反射颜色、平滑度、世界空间法线、自发光)。还会为自发光通道增加光照贴图、反射探针和环境光照。详情请参阅延迟着色。
由于顶点光照通常被用于不支持可编程着色器的平台,因此 Unity 无法在内部创建复数着色器变体来处理光照贴图与非光照贴图的情况。所以,要处理光照贴图对象和非光照贴图对象,必须明确编写多个通道。
Vertex 通道负责非光照贴图对象。所有光源均通过固定函数 OpenGL/Direct3D 光照模型 (Blinn-Phong) 进行一次性渲染。VertexLMRGBM 通道在光照贴图为 RGBM 编码(PC 和游戏主机)时负责光照贴图对象。不应用实时光照;通道应该将纹理与光照贴图组合。VertexLM 通道在光照贴图为双 LDR 编码(移动平台)时负责光照贴图对象。不应用实时光照;通道应该将纹理与光照贴图组合。