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