Version: Unity 6.0 (6000.0)
语言 : 中文
Assign a channel-packed texture to a URP material
URP 着色器材质检视面板窗口参考

减少 URP 中的着色器变体

通用渲染管线 (URP) 中的着色器采用着色器关键字来支持许多不同的功能,这可能意味着 Unity 编译了许多着色器变体

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

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

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

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

查看构建有多少着色器变体

要记录 Unity 编译和剥离的变体总数,请执行以下步骤:

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

要记录更详细的着色器变体信息,请执行以下步骤:

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

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

剥离功能着色器变体

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

要减少变体数量,您可以在 URP 图形设置 (URP Graphics Settings) 中启用剥离不使用的变体 (Strip Unused Variants) 并执行以下操作:

  • 禁用构建中所有 URP 资源中的某个功能,因此 URP 仅保留禁用该功能的变体。
  • 在构建中的所有 URP 资源中启用某个功能,因此 URP 仅保留启用该功能的变体。

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

禁用功能

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

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

避免在构建中包含使用了不同渲染路径的 URP 资源,因为这会导致 Unity 为每个关键字创建两组变体。

| 功能 | 如何禁用该功能 | 这样会关闭的着色关键字 | 渲染路径 | - | - | - | | | | 精确 G 缓冲区法线 | 禁用 URP 资源中的精确 G 缓冲区法线。这对使用 Vulkan 图形 API 的平台没有影响。 | _GBUFFER_NORMALS_OCT | 延迟 | | 其他光源 | 在URP 资源光照 (Lighting) 部分,禁用其他光源 (Additional Lights). | _ADDITIONAL_LIGHTS_ADDITIONAL_LIGHTS_VERTEX | 前向 | | 环境光遮挡 | 删除 URP 资源使用的所有渲染器中的环境光遮挡 (Ambient Occlusion) 渲染器功能。| _SCREEN_SPACE_OCCLUSION | 前向和延迟 | | 贴花 | 删除 URP 资源使用的所有渲染器中贴花 (Decals) 渲染器功能。| _DBUFFER_MRT1_DBUFFER_MRT2_DBUFFER_MRT3_DECAL_NORMAL_BLEND_LOW_DECAL_NORMAL_BLEND_MEDIUM_DECAL_NORMAL_BLEND_HIGH_DECAL_LAYERS | 前向和延迟 | | 快速 sRGB 到线性转换 | 在 URP 资源后期处理 (Post-processing) 部分,禁用快速 sRGB /线性转换 (Fast sRGB/Linear conversions)。| _USE_FAST_SRGB_LINEAR_CONVERSION | 前向和延迟 | | 地形上的洞 | 在 URP 资源渲染 (Rendering) 部分,禁用地形孔洞 (Terrain Holes)。| _ALPHATEST_ON | 前向 | | 光照剪影 | 从项目的所有光源中移除剪影纹理 (Cookie textures)。| _LIGHT_COOKIES | 前向和延迟 | | 光源渲染层 | 禁用光源渲染层 (Rendering Layers for Lights)。| _LIGHT_LAYERS | 前向和延迟 | | 反射探针混合 | 禁用反射探针混合 (Probe Blending)。| _REFLECTION_PROBE_BLENDING | 前向和延迟 | | 反射探针盒体投影 | 禁用盒体投影 (Box Projection)。| _REFLECTION_PROBE_BOX_PROJECTION | 前向和延迟 | | 渲染通道 | 禁用 URP 资源使用的所有渲染器中的原生渲染器 (Native Render)。| _RENDER_PASS_ENABLED | 前向和延迟 | | 其他光源阴影 | 在 URP 资源的其他光源 (Additional Lights) 部分,禁用投射阴影 (Cast Shadows)。 | _ADDITIONAL_LIGHT_SHADOWS | 前向和延迟 | | 主光源阴影 | 在 URP 资源的主光源 (Main Light) 部分,禁用投射阴影 (Cast Shadows)。Unity 删除的关键字可能取决于您的设置。| _MAIN_LIGHT_SHADOWS_MAIN_LIGHT_SHADOWS_CASCADE_MAIN_LIGHT_SHADOWS_SCREEN | 前向和延迟 | | 柔和阴影 | 在 URP 资源的阴影 (Shadows) 部分,禁用柔和阴影 (Soft shadows)。| _SHADOWS_SOFT | 前向和延迟 |

剥离后期处理着色器变体

启用 URP 图形设置 (URP Graphics Settings)中的剥离未使用的后期处理变体 (Strip Unused Post Processing Variants),以剥离不使用的体积覆盖 (Volume Overrides) 的着色器变体。

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

Unity 会检查所有场景中的体积覆盖 (Volume Overrides),因此您无法通过从构建中删除场景但将其保留在项目中来剥离变体。

移除的体积覆盖 这样会关闭的着色器关键字
泛光 (Bloom) _BLOOM_HQBLOOM_HQ_DIRT_BLOOM_LQBLOOM_LQ_DIRT
色差 (Chromatic Aberration) _CHROMATIC_ABERRATION
胶片颗粒 (Film Grain) _FILM_GRAIN
HDR 分级 (HDR Grading) _HDR_GRADING
镜头失真 (Lens Distortion) _DISTORTION
色调映射 (Tonemapping) _TONEMAP_ACES_TONEMAP_NEUTRAL_TONEMAP_GRADING

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

剥离 XR 和 VR 着色器变体

如果不使用 XRVR,则可以禁用 XR 和 VR 模块。这允许 URP 从其标准着色器中剥离__ XR__虚拟现实(VR)、增强现实(AR)和混合现实(MR)应用的泛指术语。支持这些形式的交互式应用程序的设备可被称为 XR 设备。更多信息
See in Glossary
__ VR__虚拟现实。更多信息
See in Glossary
相关的着色器变体。

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

如果创建自定义渲染器功能,则在 URP 资源中启用或禁用设置时,可使用 FilterAttribute API 来删除着色器变体。

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

  1. 使用 [[SerializeField]](https://docs.unity.cn/ScriptReference/SerializeField.html) 将布尔变量添加到自定义渲染器功能,并将其添加为 URP 资源检视面板中的复选框。
  2. 启用此复选框时,请使用 ShaderKeywordFilter.RemoveIf 来删除着色器变体。

其他资源

Assign a channel-packed texture to a URP material
URP 着色器材质检视面板窗口参考
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961