Version: 6000.3
语言: 中文
URP 中的自定义光照
在URP的着色器中渲染其他光源

URP中的自定义光照简介

通过实现自定义照明功能或模型,可以更好地控制应用程序的视觉样式和性能。

例如,更简单的卡通风格渲染可能比逼真的基于物理的渲染快得多,并且可以具有独特的吸引人的外观。

自定义光照实现的一个很好的例子是URP 3D示例项目中的驾驶舱场景

Unity 提供了多种使用 HLSL 实现自定义光照的方法,着色器在 GPU 上运行的程序。更多信息
请参阅术语表
graph自定义函数节点,或通过URP源码修改。

HLSL 着色器和着色器图着色器

自定义 HLSL 着色器为你提供了广泛的功能和灵活性来实现自定义照明功能。你可以完全控制渲染通道、输入和输出变量、属性和内部着色器函数。

预构建的着色器图表节点允许您使用常见的着色器函数,但提供很少的选项来修改其行为。着色器图表还提供自定义函数节点,允许您在节点内注入自定义 HLSL 代码。

你可以在URP 3D示例项目和着色器图表特征示例中找到自定义函数节点的示例。

自定义函数节点的限制

自定义函数节点允许您将代码插入顶点着色器 渲染模型时在 3D 模型的每个顶点上运行的程序。更多信息
请参阅术语表
函数或片段着色器函数。这些函数对应于着色器图中的顶点片段着色器阶段,或对应于函数vert(Attributes IN)frag(Varyings IN)在 HLSL 着色器中。

自定义函数节点不提供以下功能:

  • 更改或添加输入和输出结构中的属性(通常定义为struct Attributesstruct Varyings在着色器代码中)。例如,这意味着您无法向 FragmentVertex 着色器阶段添加额外的自定义选项。

  • 定义额外的着色器通道。

  • 定义额外的渲染状态命令,例如ColorMask.

如果你的着色器需要上述任何功能,请考虑编写一个ShaderLabUnity 用于定义 Shader 对象结构的语言。更多信息
请参阅术语表
着色。

使用不同类型光的方法

实现自定义光照的技术因自定义效果所需的光源类型而异。

要使用主灯,请使用GetMainLight着色器函数。有关更多信息,请参阅在自定义URP着色器中使用光照

Forward 和 Forward+ 渲染路径以不同的方式处理额外的定向光源和附加光源。前进+渲染路径渲染管道用于渲染图形的技术。选择不同的渲染路径会影响照明和着色的计算方式。某些渲染路径比其他路径更适合不同的平台和硬件。更多信息
请参阅术语表
对每个实时光源没有限制游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表
,因此GetAdditionalLightsCount方法始终返回 0。有关如何编写在“前向”和“前向+”渲染路径中使用其他灯光的渲染循环的信息,请参阅在URP 中的着色器中渲染其他灯光

其他资源

URP 中的自定义光照
在URP的着色器中渲染其他光源