Unity 通过以下方式从构建的应用程序加载已编译的着色器:
此方法可确保 Unity 和图形驱动程序避免在 Unity 需要着色器变体之前在 GPU 上处理和存储所有着色器变体。但是,当图形驱动程序首次创建特定于 GPU 的着色器变体时,可能会出现明显的卡顿。
Unity 会缓存每个特定于 GPU 的着色器变体,以避免 Unity 再次需要着色器变体时再次卡顿。
当不再有任何对象引用着色器变体时,Unity 会从 CPU 和 GPU 内存中完全删除着色器变体。
Unity 仅加载与平台的图形 API、硬件和图形层兼容的编译着色器。
如果因为您或 Unity 从构建的应用程序中剥离了着色器变体,导致 Unity 找不到所需的着色器变体,则 Unity 会尝试选择类似的着色器变体。如果 Unity 找不到类似的着色器变体,则会使用洋红色错误着色器。
可以启用严格的着色器变体匹配来阻止 Unity 尝试选择类似的着色器变体。
如果着色器变体包含多个子着色器,Unity 会尝试选择并使用与以下所有内容兼容的单个子着色器:
Unity 按以下顺序在以下元素中搜索第一个兼容的子着色器:
如果 Unity 找不到兼容的子着色器,则会使用洋红色错误着色器。
您可以使用__ ShaderLab__Unity 用于定义着色器对象结构的语言。更多信息
See in Glossary 标签设置哪些子着色器可与哪些硬件兼容。请参阅 ShaderLab:为子着色器分配标签。
要检查着色器何时从序列化数据加载,请在性能分析器 (Profiler) 中搜索以下性能分析器标记:
Shader.ParseThreadedShader.ParseMainThread