版本:Unity 6 (6000.0)
语言:English
异步着色器编译简介
检测异步着色器编译

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

默认情况下启用异步着色器在 GPU 上运行的程序。 更多信息
参见 术语表
编译。

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

  1. 转到编辑 > 项目设置 > 编辑器
  2. 在编辑器设置底部,在着色器编译下,选中或取消选中异步着色器编译复选框。

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

为特定的渲染调用启用或禁用异步着色器编译

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

以下说明将向您展示如何在立即作用域和CommandBuffer作用域中启用或禁用此功能。

在立即作用域中

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

操作方法

  1. ShaderUtil.allowAsyncCompilation的当前状态存储在一个变量中。
  2. 在调用渲染命令之前,将ShaderUtil.allowAsyncCompilation设置为false
  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作用域中

CommandBuffer作用域中,您可以使用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类的实例,着色器对象是着色器程序和GPU指令以及告诉Unity如何使用它们的信息的容器。将它们与材质一起使用以确定场景的外观。 更多信息
参见 术语表
的异步着色器编译。对于始终在渲染开始时存在的并且编译速度相对较快的用于生成数据的着色器对象,这是一个不错的选择。如果您正在执行高级渲染,则很可能需要此功能。

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

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

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

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

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

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