根据下面的数据字段,告诉着色器系统要包含或排除构建中的哪些着色器关键字。
这是基本过滤器属性类。请改用派生属性
只有当这些过滤器属性附加到类型树中属于 RenderPipelineAsset(由 QualitySettings 引用)的一部分的序列化数据字段时,它们才会应用于构建。这些属性使您可以根据渲染管线设置控制 Unity 用于构建着色器变体的着色器关键字。
例如,默认情况下,以下着色器代码在构建期间生成四种不同的着色器变体
#pragma multi_compile __ SHADOWS_LOW SHADOWS_MEDIUM SHADOWS_HIGH
如果您使用过滤器属性,则可以对其进行调整以更好地适应项目的设置配置。
在以下示例中,当 forceLowShadows
为 true
时,SelectIf
过滤器属性强制将 multi_compile
关键字设置为仅在构建期间包含 SHADOWS_LOW
变体。
using UnityEditor.ShaderKeywordFilter;
[SelectIf(true, keywordNames: "SHADOWS_LOW")] bool forceLowShadows;
您还可以从构建中排除关键字。在以下示例中,当 enableHighShadows
为 false
时,RemoveIf
过滤器属性会移除 SHADOWS_HIGH
。
[RemoveIf(false, keywordNames: "SHADOWS_HIGH")] bool enableHighShadows;
您还可以一次选择或移除多个关键字。在以下示例中,当 onlyHighOrNoShadows
为 true
时,SelectIf
过滤器属性仅选择 SHADOWS_HIGH
变体和一个无阴影变体。
空字符串 ""
表示空关键字。您只能与另一个关键字一起选择和移除空关键字,因为单独的 ""
应用于所有具有空关键字的 multi_compile
关键字集。
[SelectIf(true, keywordNames: new string[] {"", "SHADOWS_HIGH"})] bool onlyHighOrNoShadows;
您可以将 RemoveIfNot
与枚举数据一起使用。以下示例在 shadowMode
设置为除 Low
之外的任何值时,移除 SHADOWS_LOW
变体。
public enum ShadowMode { Low, Med, High }
[RemoveIfNot(ShadowMode.Low, keywordNames: "SHADOWS_LOW")] ShadowMode shadowMode;
您可以使用 overridePriority
参数使用过滤器属性覆盖您之前设置的过滤。通常,类型树中遇到的第一个针对特定关键字的过滤器规则会生效,Unity 会忽略任何后续属性。如果您使用 overridePriority
,则属性可以强制后续过滤器规则生效。
您可以向过滤器属性添加约束属性,以确定过滤器规则在当前上下文中是否处于活动状态。有关更多信息,请参阅 GraphicsAPIConstraintAttribute 和 TagConstraintAttribute。
FilterAttribute | 根据下面的数据字段,告诉着色器系统要包含或排除构建中的哪些着色器关键字。 |