包含此页的版本:
不含此页的版本:
这UNITY_DOTS_INSTANCED_PROP宏有 3 个变体:
UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED(PropertyType, PropertyName)UNITY_DOTS_INSTANCED_PROP_OVERRIDE_SUPPORTED(PropertyType, PropertyName)UNITY_DOTS_INSTANCED_PROP_OVERRIDE_REQUIRED(PropertyType, PropertyName)这些宏允许您指定是否可以在编译时实例化属性。它允许访问宏,例如UNITY_ACCESS_DOTS_INSTANCED_PROP扩展到更优化的代码,并可能对低端平台产生重大影响。
下面是使用上述所有宏变体的 DOTS 实例化属性块的示例:
UNITY_DOTS_INSTANCING_START(MaterialPropertyMetadata)
UNITY_DOTS_INSTANCED_PROP_OVERRIDE_SUPPORTED(float4, Color)
UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED(float4, SpecColor)
UNITY_DOTS_INSTANCED_PROP_OVERRIDE_REQUIRED(float4, EmissionColor)
UNITY_DOTS_INSTANCING_END(MaterialPropertyMetadata)
Color属性可以实例化,也可以不实例化。根据属性元数据高位动态选择正确的加载路径。SpecColor属性不可实例化。此声明不会在常量缓冲区中添加 uint32 字段。这相当于根本不声明任何东西。快速禁用属性上的实例化非常有用,而无需修改代码的其他部分。EmissionColor属性必须实例化。该属性始终从unity_DOTSInstanceDatabuffer,并且在访问属性时不会发出任何动态分支。默认情况下,UNITY_DOTS_INSTANCED_PROP与UNITY_DOTS_INSTANCED_PROP_OVERRIDE_SUPPORTED.可以通过取消注释定义来更改此默认行为UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED_BY_DEFAULT在“com.unity.render-pipelines.core\ShaderLibrary\UnityDOTSInstancing.hlsl”中。执行此作时,将启用定义,并且UNITY_DOTS_INSTANCED_PROP变成UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED.
注意:取消注释定义时UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED_BY_DEFAULT,您可能需要清除 Library 文件夹以确保着色器在 GPU 上运行的程序。更多信息
请参阅术语表正确重新编译。
在低端设备上,实例化属性可能会产生很大的性能成本。例如,从 SSBO 加载可能比正常的恒定缓冲区负载慢得多。这是因为在许多低端设备上,这种类型的缓冲区加载通过纹理采样器,而恒定缓冲区加载使用更快的硬件,除非使用动态索引来访问缓冲区。实例化属性始终使用动态索引加载,因为它取决于属性元数据,这意味着它们始终通过低端设备上的纹理采样器。
为了更好地针对低端设备优化项目,您可以默认禁用属性实例化。为此,请启用定义UNITY_DOTS_INSTANCED_PROP_OVERRIDE_DISABLED_BY_DEFAULT,这会将属性实例化设置为默认禁用。完成此作后,您可以仅为需要属性的属性手动启用属性实例化。