Unity3D的内置宏 _ADDITIONAL_LIGHTS_VERTEX
请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com
在Unity URP中,_ADDITIONAL_LIGHTS_VERTEX 是一个与 附加光源处理方式 相关的内置变体关键字(Shader Variant Keyword)。它的核心作用是 控制附加光源的光照计算阶段,决定是在 顶点着色器 还是 片元着色器 中处理附加光源的贡献。
核心含义 1. 光源计算阶段选择 启用时(_ADDITIONAL_LIGHTS_VERTEX 被定义):
附加光源的光照计算在 顶点着色器 阶段完成,计算结果通过顶点插值传递到片元着色器。 未启用时(默认或使用 _ADDITIONAL_LIGHTS):
附加光源的光照计算在 片元着色器 阶段逐像素完成。 2. 性能与质量的权衡 模式 性能消耗 光照精度 适用场景 _ADDITIONAL_LIGHTS_VERTEX 较低 中等(顶点插值) 移动端、低性能设备 _ADDITIONAL_LIGHTS 较高 高(逐像素) PC/主机、高质量渲染需求 触发条件 该宏的激活由以下因素决定:
URP Asset设置
在URP资源中启用 Additional Lights(附加光源) 设置 Per Object Light 类型为 Vertex 或 Fragment(对应不同模式) Shader编译指令
在Shader中使用以下指令声明变体:
#pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS 实际光源数量
当场景中存在 附加光源(点光源、聚光灯等) 且影响当前渲染对象时,Unity自动选择对应变体。
技术实现原理 顶点着色器阶段处理(_ADDITIONAL_LIGHTS_VERTEX) // 顶点着色器中计算附加光源 Varyings vert(Attributes input) { Varyings output; // .