通用渲染管线 (URP) 中的着色器采用着色器关键字来支持许多不同的功能,这可能意味着 Unity 编译了许多着色器变体。
如果禁用URP 资源 (URP Asset) 中的功能,URP 会自动排除(“剥离”)相关着色器变体。这可以加快构建速度,并减少内存使用量和文件大小。
例如,如果您的项目不使用定向光阴影,则默认情况下 Unity 仍包含在构建中支持定向光阴影的变体。如果您在 URP 资源中禁用投射阴影 (Cast Shadows),URP 会剥离这些变体。
如果您想检查在 URP 中剥离着色器的代码,请参阅 Editor/ShaderPreprocessor.cs 文件。该文件使用 IPreprocessShaders API。
有关剥离着色器变体的更多信息,请参阅以下页面:
要记录 Unity 编译和剥离的变体总数,请执行以下步骤:
Editor.log 日志文件并搜索 ShaderStrippingReport。有关 Editor.log 的位置,请参阅日志文件。要记录更详细的着色器变体信息,请执行以下步骤:
Temp/graphics-settings-stripping.json 和 Temp/shader-stripping.json。有关更多信息,请参阅 Unity 用户手册中的以下内容:
默认情况下,URP 编译启用功能的变体和禁用功能的变体。
要减少变体数量,您可以在 URP 图形设置 (URP Graphics Settings) 中启用剥离不使用的变体 (Strip Unused Variants) 并执行以下操作:
如果您禁用剥离未使用的变体 (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_HQ、BLOOM_HQ_DIRT、_BLOOM_LQ、BLOOM_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,则可以禁用 XR 和 VR 模块。这允许 URP 从其标准着色器中剥离__ XR__虚拟现实(VR)、增强现实(AR)和混合现实(MR)应用的泛指术语。支持这些形式的交互式应用程序的设备可被称为 XR 设备。更多信息
See in Glossary 和__ VR__虚拟现实。更多信息
See in Glossary 相关的着色器变体。
如果创建自定义渲染器功能,则在 URP 资源中启用或禁用设置时,可使用 FilterAttribute API 来删除着色器变体。
例如,您可以执行以下操作: