默认情况下启用异步着色器在 GPU 上运行的程序。 更多信息
参见 术语表编译。
要启用或禁用异步着色器编译
注意:以这种方式启用和禁用异步着色器编译仅影响场景场景包含游戏的环境和菜单。可以将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您放置环境、障碍物和装饰,本质上是分段设计和构建您的游戏。 更多信息
参见 术语表和游戏视图(默认)。如果您想在编辑器的其他部分使用它,请参阅自定义编辑器工具和异步着色器编译。
您可以在 C# 脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性并以任何您喜欢的方式响应用户输入。 更多信息
参见 术语表中为特定的渲染命令启用或禁用异步着色器编译。
以下说明将向您展示如何在立即作用域和CommandBuffer作用域中启用或禁用此功能。
在立即作用域中,您可以使用ShaderUtil.allowAsyncCompilation
。
操作方法
ShaderUtil.allowAsyncCompilation
的当前状态存储在一个变量中。ShaderUtil.allowAsyncCompilation
设置为false
。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
作用域中,您可以使用ShaderUtil.SetAsyncCompilation
和ShaderUtil.RestoreAsyncCompilation
。
ShaderUtil.SetAsyncCompilation
并将其设置为false
。CommandBuffer中的后续命令将不允许异步编译。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# 启用它。
为此,您可以为特定的渲染调用启用异步着色器编译。