Version: Unity 6.0 (6000.0)
语言 : 中文
Shader loading
创建着色器变体集合

预热着色器

当 Unity 在构建的应用程序中首次使用着色器变体时,场景可能会卡顿。这是因为 Unity 和图形驱动程序需要编译着色器变体,并使用编译的着色器代码及其相关 GPU 状态创建一个管线状态对象 (PSO)。

要减少卡顿,请在首次需要着色器之前编译着色器并创建 PSO,以便图形驱动程序将它们缓存到磁盘上。这称为预热或预烘焙。通常在加载屏幕期间(应用程序启动时或加载场景时)进行预热。

注意:有些 API 是实验性的,尚未准备好用于生产。这些 API 和文档将来可能会被更改或删除。

使用 DirectX 12、Metal 或 Vulkan 预热着色器

要在 DirectX 12、Metal 或 Vulkan 上预热着色器,请使用实验性 GraphicsStateCollection API。此 API 收集项目在运行时使用的特定 GPU 状态,现代图形 API 需要这些状态来创建和缓存准确的 PSO。

请执行以下步骤:

  1. 在构建的应用程序的测试运行期间,使用 GraphicsStateCollection.BeginTraceGraphicsStateCollection.EndTrace 方法记录应用程序使用的着色器变体和 GPU 状态。
  2. 要将记录的信息保存为 .graphicsState 文件,请使用 GraphicsStateCollection.SendToEditor API。
  3. 在最终项目中,加载 .graphicsstate 文件,然后使用 WarmUpWarmUpProgressively API 预热着色器变体。这两个 API 都返回可用于异步预热着色器变体的 JobHandle 对象。

应该为使用的每个图形 API 创建一个不同的 .graphicsstate 文件。

有关更多信息,请参阅 GraphicsStateCollection

使用其他图形 API 预热着色器

通过以下方式进行预热:

要预热着色器变体集合,请执行以下操作之一:

检查着色器是否已预热

要检查 Unity 和图形驱动程序何时编译着色器并创建 PSO,请在性能分析器 (Profiler) 中搜索以下性能分析器标记:

  • Unity 创建特定于 GPU 的着色器变体版本所用的 Shader.CreateGPUProgram
  • Unity 创建 PSO 所用的 CreateGraphicsGraphicsPipelineImpl

其他资源

Shader loading
创建着色器变体集合