Version: 6000.3
语言: 中文
着色器加载
创建着色器变体集合

预热着色器

当 Unity 使用着色器在 GPU 上运行的程序。更多信息
请参阅术语表
变体,则场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表
可能会结巴。这是因为 Unity 和图形驱动程序需要编译着色器变体,并使用已编译的着色器代码及其相关 GPU 状态创建管道状态对象 (PSO)。

若要减少卡顿,请在首次需要着色器之前编译着色器并创建 PSO,以便图形驱动程序将它们缓存到磁盘。这称为预热、预热或预煮。你通常会在加载屏幕期间预热,无论是在应用程序启动时还是在加载场景时。

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

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

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

按着这些次序:

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

您应该创建一个不同的.graphicsstate文件。

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

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

通过以下方式热身:

  • 要预热Shader 对象Shader 类的实例,Shader 对象是着色器程序和 GPU 指令的容器,以及告诉 Unity 如何使用它们的信息。将它们与材质一起使用,以确定场景的外观。更多信息
    请参阅术语表
    ,请使用 Experimental.Rendering.ShaderWarmup API。
  • 要预热当前内存中所有着色器对象的所有变体,请使用 Shader.WarmupAllShaders API。

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

检查着色器是否预热

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

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

其他资源

着色器加载
创建着色器变体集合