Unity 从您构建的应用程序中以以下方式加载已编译的着色器
此方法可确保 Unity 和图形驱动程序在 Unity 需要之前,不会在 GPU 上处理和存储所有着色器变体。但是,图形驱动程序第一次创建特定于 GPU 的着色器变体时,可能会出现明显的停滞。
Unity 会缓存每个特定于 GPU 的着色器变体,以避免 Unity 再次需要该着色器变体时出现停滞。
当不再有任何对象引用着色器变体时,Unity 会从 CPU 和 GPU 内存中完全删除该着色器变体。
Unity 只加载与平台的图形 API、硬件和图形层级兼容的已编译着色器。
如果 Unity 找不到所需的着色器变体(因为您或 Unity从构建的应用程序中剥离了着色器变体),Unity 会尝试选择类似的着色器变体。如果 Unity 找不到类似的着色器变体,它将使用洋红色的错误着色器。
您可以启用严格的着色器变体匹配以阻止 Unity 尝试选择类似的着色器变体。
如果着色器变体包含多个子着色器,Unity 会尝试选择并使用一个与以下所有内容兼容的子着色器
Unity 会按照以下顺序,在以下元素中搜索第一个兼容的子着色器
如果 Unity 找不到兼容的子着色器,它将使用洋红色的错误着色器。
您可以使用ShaderLabUnity 用于定义着色器对象结构的语言。 更多信息
查看 术语表标签设置哪些子着色器与哪些硬件兼容。查看ShaderLab:为子着色器分配标签。
要检查着色器何时从序列化数据加载,请在分析器一个帮助您优化游戏的窗口。它显示了在游戏的各个区域花费了多少时间。例如,它可以报告渲染、动画或游戏逻辑所花费的时间百分比。 更多信息
查看 术语表中搜索以下分析器标记放在代码中以描述 CPU 或 GPU 事件,然后在 Unity 分析器窗口中显示。默认情况下添加到 Unity 代码中,或者您可以使用 ProfilerMarker API 添加自己的自定义标记。 更多信息
查看 术语表
Shader.ParseThreaded
Shader.ParseMainThread