Version: 6000.3
语言: 中文
修复挂钩或失速
预热着色器

着色器加载

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

  1. 当 Unity 加载场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
    请参阅术语表
    运行时资源,它加载所有编译的着色器在 GPU 上运行的程序。更多信息
    请参阅术语表
    场景或资源的变体到 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. 任何回退中的子着色器着色器对象Shader 类的实例,Shader 对象是着色器程序和 GPU 指令的容器,以及告诉 Unity 如何使用它们的信息。将它们与材质一起使用,以确定场景的外观。更多信息
    请参阅术语表
    ,按它们在着色器对象中的显示顺序排列。

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

您可以使用以下命令设置哪些子着色器与哪些硬件兼容ShaderLabUnity 用于定义 Shader 对象结构的语言。更多信息
请参阅术语表
标签。请参阅 ShaderLab:将标签分配给子着色器

检查 Unity 何时加载着色器

若要检查着色器何时从序列化数据加载,请搜索以下内容探查器标记放置在代码中,用于描述 CPU 或 GPU 事件,然后显示在 Unity 探查器窗口中。默认添加到 Unity 代码中,或者您可以使用 ProfilerMarker API 添加自己的自定义标记。更多信息
请参阅术语表
分析器帮助您优化游戏的窗口。它显示了在游戏的各个领域花费了多少时间。例如,它可以报告渲染、动画制作或游戏逻辑所花费的时间百分比。更多信息
请参阅术语表
:

  • Shader.ParseThreaded
  • Shader.ParseMainThread

要检查着色器何时卸载着色器变体,请搜索Shader.MainThreadCleanupProfiler 标记。

其他资源

修复挂钩或失速
预热着色器