Shader 对象可包含数百或数千个着色器变体。如果编辑器在加载 Shader 对象时编译所有变体,则导入过程将非常缓慢。相反,编辑器会在第一次遇到着色器变体时按需编译它们。
编译这些着色器变体可能会导致编辑器卡顿几毫秒甚至几秒,具体取决于图形 API 和 Shader 对象的复杂性。为了避免这些停顿,您可以使用异步着色器编译在后台编译着色器变体,同时使用占位 Shader 对象。
异步着色器编译的工作原理是:
将产生以下异常:
DrawProcedural 或 CommandBuffer.DrawProcedural 绘制几何体,则编辑器不使用占位着色器。编辑器只是跳过对此几何体的渲染,直到此着色器变体的编译完成为止。