Version: 6000.3
语言: 中文
异步着色器编译简介
检测异步着色器编译

启用或禁用异步着色器编译

异步着色器在 GPU 上运行的程序。更多信息
请参阅术语表
默认情况下,编译处于启用状态。

若要启用或禁用异步着色器编译,请执行以下作:

  1. 转到 编辑(Edit) > 项目设置(Project Settings> 编辑器。
  2. 在编辑器设置底部的 着色器编译(Shader Compilation) 下,选中或取消选中 异步着色器编译(Asynchronous Shader Compilation) 复选框。

注意:以这种方式启用和禁用异步着色器编译仅影响场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,你放置你的环境、障碍物和装饰品,基本上是将你的游戏设计和构建成碎片。更多信息
请参阅术语表
和游戏视图。如果你想在编辑器的其他部分使用它,请参阅自定义编辑器工具和异步着色器编译

为特定呈现调用启用或禁用异步着色器编译

可以在 C# 中为特定呈现命令启用或禁用异步着色器编译脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
请参阅术语表
.

以下说明演示如何在即时作用域和 CommandBuffer 作用域中启用或禁用该功能。

在即时范围内

在即时作用域中,您可以使用ShaderUtil.allowAsyncCompilation.

为此,请执行以下作:

  1. 存储当前状态ShaderUtil.allowAsyncCompilation在变量中。
  2. 在调用渲染命令之前,将ShaderUtil.allowAsyncCompilationfalse.
  3. 调用渲染命令。
  4. 调用渲染命令后,恢复ShaderUtil.allowAsyncCompilation恢复到以前的状态。

下面是一个伪代码示例:

// Store the current state
bool oldState = ShaderUtil.allowAsyncCompilation;

// Disable async compilation
ShaderUtil.allowAsyncCompilation = false;

// Enter your rendering code that should never use the placeholder shader, for example UI elements or characters.
Graphics.RenderMesh(...);

// Restore the old state
ShaderUtil.allowAsyncCompilation = oldState;

在 CommandBuffer 作用域中

CommandBufferscope,您可以使用ShaderUtil.SetAsyncCompilationShaderUtil.RestoreAsyncCompilation.

  1. 在调用渲染命令之前,立即调用ShaderUtil.SetAsyncCompilation,并将其设置为false.CommandBuffer 中的后续命令不允许异步编译。
  2. 将呈现命令添加到 CommandBuffer。
  3. 渲染命令后,调用Shader.Util.RestoreAsyncCompilation以还原异步着色器编译的状态。

这是一个例子:

// Create the CommandBuffer
CommandBuffer cmd = new CommandBuffer();

// Disable async compilation for subsequent commands
ShaderUtil.SetAsyncCompilation(cmd, false);

/// Enter your rendering commands that should never use the placeholder shader, for example UI elements or characters.
cmd.DrawMesh(...);

// Restore the old state
ShaderUtil.RestoreAsyncCompilation(cmd);

禁用特定着色器对象的异步编译

您可以为特定着色器对象Shader 类的实例,Shader 对象是着色器程序和 GPU 指令的容器,以及告诉 Unity 如何使用它们的信息。将它们与材质一起使用,以确定场景的外观。更多信息
请参阅术语表
通过强制编辑器始终同步编译它们。对于生成数据的着色器对象来说,这是一个不错的选择,这些对象在渲染开始时始终存在,并且编译速度相对较快。如果您正在执行高级渲染,您很可能需要它。

要强制对 Shader 对象进行同步编译,请将#pragma editor_sync_compilation 指令添加到着色器源代码中。

注意:不应强制同步编译在渲染过程中遇到新着色器变体的复杂着色器对象;这可能会在编辑器中停止渲染。

自定义编辑器工具和异步着色器编译

默认情况下,异步着色器编译在游戏中工作,并且场景视图您正在创建的世界的交互式视图。您可以使用场景视图来选择和定位场景、角色、摄像机、灯光和所有其他类型的游戏对象。更多信息
请参阅术语表
.如果要在自定义编辑器工具中使用它,可以通过 C# 为自定义工具启用它。

为此,可以为特定渲染调用启用异步着色器编译

异步着色器编译简介
检测异步着色器编译