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.BeginTrace 和 GraphicsStateCollection.EndTrace 方法记录应用程序使用的着色器变体和 GPU 状态。
  2. 要将记录的信息保存为 .graphicsState 文件,请使用 GraphicsStateCollection.SendToEditor API。
  3. 在最终项目中,加载 .graphicsstate 文件,然后使用 WarmUp 或 WarmUpProgressively API 预热着色器变体。这两个 API 都返回可用于异步预热着色器变体的 JobHandle 对象。

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

有关更多信息,请参阅 GraphicsStateCollection。

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

通过以下方式进行预热:

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

检查着色器是否已预热

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

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

其他资源

Shader loading
创建着色器变体集合