Version: Unity 6.0 (6000.0)
语言 : 中文
修复顿挫或停顿情况
预热着色器

Shader loading

Unity 通过以下方式从构建的应用程序加载已编译的着色器

  1. Unity 加载场景或运行时资源时,会将场景或资源的所有编译着色器变体加载到 CPU 内存中。
  2. 默认情况下,Unity 将所有着色器变体解压缩到 CPU 内存的另一个区域中。您可以控制不同平台上着色器使用的内存量
  3. Unity 第一次需要使用着色器变体渲染几何体时,Unity 会将着色器变体及其数据传递给图形 API 和图形驱动程序。
  4. 图形驱动程序会创建特定于 GPU 的着色器变体版本并将其上传到 GPU。

此方法可确保 Unity 和图形驱动程序避免在 Unity 需要着色器变体之前在 GPU 上处理和存储所有着色器变体。但是,当图形驱动程序首次创建特定于 GPU 的着色器变体时,可能会出现明显的卡顿。

Unity 会缓存每个特定于 GPU 的着色器变体,以避免 Unity 再次需要着色器变体时再次卡顿。

当不再有任何对象引用着色器变体时,Unity 会从 CPU 和 GPU 内存中完全删除着色器变体。

Unity 加载的着色器 

Unity 仅加载与平台的图形 API、硬件和图形层兼容的编译着色器。

如果因为您或 Unity 从构建的应用程序中剥离了着色器变体,导致 Unity 找不到所需的着色器变体,则 Unity 会尝试选择类似的着色器变体。如果 Unity 找不到类似的着色器变体,则会使用洋红色错误着色器

可以启用严格的着色器变体匹配来阻止 Unity 尝试选择类似的着色器变体。

Unity 如何选择子着色器

如果着色器变体包含多个子着色器,Unity 会尝试选择并使用与以下所有内容兼容的单个子着色器:

Unity 按以下顺序在以下元素中搜索第一个兼容的子着色器:

  1. 子着色器在着色器中的显示顺序。
  2. 任何回退着色器对象中的子着色器,按它们在着色器对象中的显示顺序。

如果 Unity 找不到兼容的子着色器,则会使用洋红色错误着色器。

您可以使用__ ShaderLab__Unity 用于定义着色器对象结构的语言。更多信息
See in Glossary
标签设置哪些子着色器可与哪些硬件兼容。请参阅 ShaderLab:为子着色器分配标签

检查 Unity 何时加载着色器

要检查着色器何时从序列化数据加载,请在性能分析器 (Profiler) 中搜索以下性能分析器标记:

  • Shader.ParseThreaded
  • Shader.ParseMainThread

其他资源

修复顿挫或停顿情况
预热着色器