版本:Unity 6 (6000.0)
语言:English
编辑器中的异步着色器编译
启用或禁用异步着色器编译

异步着色器编译简介

着色器对象可能包含数百或数千个着色器变体根据特定着色器关键字及其状态的组合而生成的着色器程序版本。一个着色器对象可以包含多个着色器变体。 更多信息
参见 术语表
。如果编辑器在加载着色器在 GPU 上运行的程序。 更多信息
参见 术语表
对象时编译所有变体,则导入过程将非常缓慢。相反,编辑器会按需编译着色器变体,在第一次遇到它们时。

编译这些着色器变体会导致编辑器暂停几毫秒甚至几秒钟,具体取决于图形 API 和着色器对象Shader 类的实例,着色器对象是着色器程序和 GPU 指令的容器,以及告知 Unity 如何使用它们的说明。将它们与材质一起使用以确定场景的外观。 更多信息
参见 术语表
的复杂性。为了避免这些停顿,您可以使用异步着色器编译在后台编译着色器变体,并在同时使用占位符着色器对象。

异步着色器编译的工作原理

异步着色器编译的工作原理如下

  1. 当编辑器第一次遇到未编译的着色器变体时,它会将着色器变体添加到作业线程上的编译队列中。编辑器右下角的进度条显示编译队列的状态。
  2. 在加载着色器变体时,编辑器使用占位符着色器渲染几何体,该着色器显示为纯青色。
  3. 当编辑器完成着色器变体的编译后,它使用着色器变体渲染几何体。
Unity renders shader variants that are still compiling with a cyan dummy Shader until compilation has finished. The bottom right progress bar indicates the compilation queue progress.
Unity 使用青色虚拟着色器渲染仍在编译的着色器变体,直到编译完成。右下角的进度条指示编译队列进度。

例外情况

以下例外情况适用

  • 如果您使用 DrawProceduralCommandBuffer.DrawProcedural 绘制几何体,编辑器不会使用占位符着色器。相反,编辑器只是跳过渲染此几何体,直到它编译了着色器变体。
  • Unity 编辑器不会将异步着色器编译与Blit“位块传输”的简称。Blit 操作是从内存中的一个位置将数据块传输到另一个位置的过程。
    参见 术语表
    操作一起使用。这样做是为了保证在最常见的使用情况下输出正确。
编辑器中的异步着色器编译
启用或禁用异步着色器编译