Version: Unity 6.0 (6000.0)
语言 : 中文
编辑器中的异步着色器编译
启用或禁用异步着色器编译

异步着色器编译简介

Shader 对象可包含数百或数千个着色器变体。如果编辑器在加载 Shader 对象时编译所有变体,则导入过程将非常缓慢。相反,编辑器会在第一次遇到着色器变体时按需编译它们。

编译这些着色器变体可能会导致编辑器卡顿几毫秒甚至几秒,具体取决于图形 API 和 Shader 对象的复杂性。为了避免这些停顿,您可以使用异步着色器编译在后台编译着色器变体,同时使用占位 Shader 对象。

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

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

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

异常

将产生以下异常:

  • 如果使用 DrawProceduralCommandBuffer.DrawProcedural 绘制几何体,则编辑器不使用占位着色器。编辑器只是跳过对此几何体的渲染,直到此着色器变体的编译完成为止。
  • Unity 编辑器不会使用带有__ Blit__“位块传输 (Bit Block Transfer)”的简写。blit 操作是将数据块从内存中的一个位置传输到另一个位置的过程。
    See in Glossary
    操作的异步着色器编译。这是为了保证在最常见的用例中获得正确输出。
编辑器中的异步着色器编译
启用或禁用异步着色器编译
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961