Unity 6.3
0 онлайн 20 гостей 3 в системе
Вход

Включение или отключение асинхронной компиляции шейдеров

Асинхронная компиляция шейдеров включена по умолчанию.

Чтобы включить или отключить асинхронную компиляцию шейдеров:

  1. Перейдите в Edit > Project Settings > Редактор.
  2. В нижней части настроек Редактора в разделе Компиляция шейдеровустановите или снимите флажок Asynchronous Shader Compilation.

Примечание: Включение и отключение асинхронной компиляции шейдеров таким образом по умолчанию влияет только на представления Scene и Game. Если вы хотите использовать его в других частях Редактора, см. Инструменты пользовательского редактора и асинхронная компиляция шейдеров.

Включить или отключить асинхронную компиляцию шейдера для определенных вызовов отображения

Вы можете включить или отключить асинхронную компиляцию шейдеров для определенных команд рендеринга в своих 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.SetAsyncCompilation и ShaderUtil.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, добавьте #pragma editor_sync_compilation директива к исходному коду шейдера.

Примечание: Не следует навязывать синхронную компиляцию для сложных объектов Shader, которые встречают новые варианты Shader во время рендеринга; это может задержать рендеринг в Редакторе.

Инструменты пользовательского редактора и асинхронная компиляция шейдеров

По умолчанию, асинхронная компиляция Shader работает в представлениях Game и Scene. Если вы хотите использовать ее в пользовательских инструментах Редактора, вы можете включить ее через C# для вашего пользовательского инструмента.

Для этого можно включить асинхронную компиляцию шейдеров для определенных вызовов рендеринга.