Version: 6000.3
语言: 中文
编辑器中的异步着色器编译
启用或禁用异步着色器编译

异步着色器编译简介

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

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

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

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

  1. 当编辑器首次遇到未编译的着色器变体时,它会将着色器变体添加到作业线程上的编译队列中。编辑器右下角的进度条显示编译队列的状态。
  2. 加载着色器变体时,编辑器使用占位符着色器渲染几何体,该着色器显示为纯青色。
  3. 编辑器完成编译着色器变体后,它会使用着色器变体渲染几何体。
Unity 渲染着色器变体,这些着色器变体仍在使用青色虚拟着色器进行编译,直到编译完成。右下角的进度条指示编译队列进度。
Unity 渲染着色器变体,这些着色器变体仍在使用青色虚拟着色器进行编译,直到编译完成。右下角的进度条指示编译队列进度。

异常

以下例外情况适用:

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