版本:Unity 6 (6000.0)
语言:英语
在 URP 中将着色器分配给材质
在 URP 中编写自定义着色器

减少 URP 中的着色器变体

通用 渲染管线一系列操作,将场景的内容显示在屏幕上。 Unity 允许您选择预构建的渲染管线或编写自己的渲染管线。 更多信息
参见 词汇表
(URP) 中的 着色器在 GPU 上运行的程序。 更多信息
参见 词汇表
使用 着色器关键字 支持许多不同的功能,这意味着 Unity 会编译大量 着色器变体根据着色器关键字及其状态的特定组合生成的着色器程序版本。着色器对象可以包含多个着色器变体。 更多信息
参见 词汇表

如果您在 URP 资源 中禁用功能,URP 会自动排除(“剥离”)相关的着色器变体。这会加快构建速度,并减少内存使用量和文件大小。

例如,如果您的项目不使用方向光阴影,默认情况下 Unity 仍然会在您的构建中包含支持方向光阴影的变体。如果您在 URP 资源中禁用 投射阴影,URP 将剥离这些变体。

如果您想检查剥离 URP 中着色器的代码,请查看 Editor/ShaderPreprocessor.cs 文件。该文件使用 IPreprocessShaders API。

有关剥离着色器变体的更多信息,请参考以下页面

检查您的构建中有多少个着色器变体

要记录 Unity 总共编译和剥离了多少个变体,请按照以下步骤操作

  1. 打开 图形设置窗口
  2. 着色器剥离 部分中,选择除 禁用 之外的日志记录级别。
  3. 构建您的项目。
  4. 要查看记录的信息,请打开 Editor.log 日志文件并搜索 ShaderStrippingReport。有关 Editor.log 的位置,请参考 日志文件

要记录更详细的着色器变体信息,请按照以下步骤操作

  1. 打开 图形设置窗口
  2. 其他着色器剥离设置 部分中,选择 导出着色器变体
  3. 构建您的项目。
  4. 在包含您的项目文件的文件夹中,打开 Temp/graphics-settings-stripping.jsonTemp/shader-stripping.json

有关更多信息,请参考 Unity 用户手册中的以下内容

剥离功能着色器变体

默认情况下,URP 会编译启用功能的变体和禁用功能的变体。

要减少变体的数量,您可以在 URP 图形设置 中启用 剥离未使用的变体 并执行以下操作

  • 在构建中的所有 URP 资源中禁用功能,以便 URP 只保留禁用功能的变体。
  • 在构建中的所有 URP 资源中启用功能,以便 URP 只保留启用功能的变体。

如果您禁用 剥离未使用的变体设置,URP 无法剥离禁用功能的变体。这可能会增加变体的数量。

禁用功能

要让 Unity 剥离与功能相关的变体,请确保您在构建中的所有 URP 资源中禁用它。

Unity 将以下 URP 资源包含在您的构建中

  • 您在 图形设置 中设置为默认渲染管线资源的 URP 资源。
  • 您在为当前构建目标启用的 质量设置级别 中设置为 渲染管线资源 的任何 URP 资源。

避免在构建中包含使用不同 渲染路径渲染管线用来渲染图形的技术。选择不同的渲染路径会影响光照和着色的计算方式。某些渲染路径比其他路径更适合不同的平台和硬件。 更多信息
参见 词汇表
的 URP 资源,因为这会导致 Unity 为每个关键字创建两组变体。

功能 如何禁用功能 关闭此功能的着色器关键字 渲染路径
精确 G 缓冲区法线 在 URP 资源中禁用 精确 G 缓冲区法线。这对使用 Vulkan 图形 API 的平台没有影响。 _GBUFFER_NORMALS_OCT 延迟
附加光源 URP 资源光照部分 中,禁用 附加光源 _ADDITIONAL_LIGHTS, _ADDITIONAL_LIGHTS_VERTEX 前向
环境光遮蔽 从 URP 资源使用的所有渲染器中删除 环境光遮蔽一种近似环境光(非来自特定方向的光)照射到表面上一个点的方法。
参见 词汇表
渲染器功能。
_SCREEN_SPACE_OCCLUSION 前向和延迟
贴花 从 URP 资源使用的所有渲染器中删除 贴花 渲染器功能。 _DBUFFER_MRT1, _DBUFFER_MRT2, _DBUFFER_MRT3, _DECAL_NORMAL_BLEND_LOW, _DECAL_NORMAL_BLEND_MEDIUM, _DECAL_NORMAL_BLEND_HIGH, _DECAL_LAYERS 前向和延迟
快速 sRGB 到线性转换 URP 资源后期处理在图像显示在屏幕上之前应用滤镜和效果来改善产品视觉效果的过程。您可以使用后期处理效果来模拟物理相机和胶片属性,例如 Bloom 和景深。 更多信息 后期处理,后期处理,后期处理
参见 词汇表
部分中,禁用 快速 sRGB/线性转换
_USE_FAST_SRGB_LINEAR_CONVERSION 前向和延迟
地形场景中的景观。地形游戏对象会将一个大的平面添加到您的场景中,您可以使用地形检查器窗口来创建详细的景观。 更多信息
参见 词汇表
中的孔洞
URP 资源渲染 部分中,禁用 地形孔洞 _ALPHATEST_ON 前向
光饼 从项目中的所有光源中删除 光饼纹理 _LIGHT_COOKIES 前向和延迟
光源的渲染层 禁用 光源的渲染层 _LIGHT_LAYERS 前向和延迟
反射探测器一个渲染组件,它以球形的方式捕获周围环境的视图,类似于相机。捕获的图像然后存储为立方体贴图,可以由具有反射材质的物体使用。 更多信息
参见 词汇表
混合
禁用 探测器混合 _REFLECTION_PROBE_BLENDING 前向和延迟
反射探测器框投影 禁用 框投影 _REFLECTION_PROBE_BOX_PROJECTION 前向和延迟
渲染通道 在 URP 资源使用的所有渲染器中禁用 原生渲染 _RENDER_PASS_ENABLED 前向和延迟
附加光源的阴影 在 URP 资源的 附加光源 部分中,禁用 投射阴影 _ADDITIONAL_LIGHT_SHADOWS 前向和延迟
主光源的阴影 在 URP 资源的 主光源 部分中,禁用 投射阴影。Unity 删除的关键字可能取决于您的设置。 _MAIN_LIGHT_SHADOWS, _MAIN_LIGHT_SHADOWS_CASCADE, _MAIN_LIGHT_SHADOWS_SCREEN 前向和延迟
柔和阴影 在 URP 资源的 阴影 部分中,禁用 柔和阴影 _SHADOWS_SOFT 前向和延迟

剥离后期处理着色器变体

URP 图形设置 中启用 剥离未使用的后期处理变体,以剥离您不使用的 体积覆盖 的着色器变体。

例如,如果您的项目只使用 Bloom 效果,URP 会保留 Bloom 变体,但会剥离所有其他后期处理变体。

Unity 会检查所有场景中的体积覆盖,因此您无法通过从构建中删除一个 场景场景包含游戏中的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,您放置环境、障碍物和装饰,基本上是将游戏分段设计和构建。 更多信息
参见 词汇表
来剥离变体,但将其保留在您的项目中。

已删除的体积覆盖 关闭此功能的着色器关键字
Bloom _BLOOM_HQ, BLOOM_HQ_DIRT, _BLOOM_LQ, BLOOM_LQ_DIRT
色差 _CHROMATIC_ABERRATION
胶片颗粒 _FILM_GRAIN
HDR高动态范围
参见 词汇表
色彩分级
_HDR_GRADING
镜头畸变 _DISTORTION
色调映射将图像的 HDR 值重新映射到适合在屏幕上显示的范围的过程。 更多信息
参见 词汇表
_TONEMAP_ACES, _TONEMAP_NEUTRAL, _TONEMAP_GRADING

您还应该在 URP 图形设置中启用 剥离屏幕坐标覆盖变体,除非您覆盖屏幕坐标以支持大量多显示器(“集群”显示器)上的后期处理。

剥离 XR 和 VR 着色器变体

如果您不使用 XR涵盖虚拟现实 (VR)、增强现实 (AR) 和混合现实 (MR) 应用程序的总称。支持这些形式的交互式应用程序的设备可以称为 XR 设备。 更多信息
参见 词汇表
VR虚拟现实 更多信息
参见 词汇表
,您可以 禁用 XR 和 VR 模块。这允许 URP 从其标准着色器中剥离 XR 和 VR 相关的着色器变体。

如果您使用自定义渲染器功能,请删除变体

如果你创建了一个 自定义渲染器功能,可以使用 FilterAttribute API 在启用或禁用 URP 资源 中的设置时移除着色器变体。

例如,你可以执行以下操作:

  1. 使用 [[SerializeField]](https://docs.unity3d.org.cn/ScriptReference/SerializeField.html) 向自定义渲染器功能添加一个布尔变量,并在 URP 资源 检视器一个 Unity 窗口,用于显示当前选定游戏对象、资源或项目设置的信息,允许你检查和编辑这些值。 更多信息
    参见 术语表
    中添加一个复选框。
  2. 使用 ShaderKeywordFilter.RemoveIf 在启用复选框时移除着色器变体。

其他资源

在 URP 中将着色器分配给材质
在 URP 中编写自定义着色器