Unity 6.3
0 онлайн 134 гостей 3 в системе
Вход
Материалы и шейдеры Шаг 367 из 442

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

Объекты шейдера могут содержать сотни или тысячи варианты шейдеров. Если бы Редактор компилировал все варианты при загрузке объекта Shader, процесс импорта был бы очень медленным. Вместо этого Редактор компилирует варианты Shader по требованию, когда он впервые их встречает.

Компиляция этих вариантов шейдеров может привести к тому, что Редактор застопорится на миллисекунды или даже секунды, в зависимости от графики API и сложности объекта Shader. Чтобы избежать этих застопорок, вы можете использовать асинхронную компиляцию шейдеров для компиляции вариантов шейдеров в фоновом режиме, и использовать между тем объекты Shader.

Как работает асинхронная компиляция шейдеров

Асинхронная компиляция шейдеров работает следующим образом:

  1. Когда Редактор впервые встречает некомпилированный вариант шейдера, он добавляет этот вариант шейдера в очередь компиляции на потоке заданий. Статус очереди компиляции отображается на строке прогресса в правом нижнем углу Редактора.
  2. Пока загружается вариант шейдера, Редактор отображает геометрию с замещающим шейдером, который появляется в виде простого синего цвета.
  3. Когда Редактор завершит компиляцию варианта шейдера, он отобразит геометрию с использованием варианта шейдера.
Unity рендирует варианты шейдеров, которые все еще компилируются с помощью синего думильного шейдера до завершения компиляции. Нижняя правая полоса прогресса показывает прогресс очереди компиляции.
Unity рендирует варианты шейдеров, которые все еще компилируются с помощью синего думильного шейдера до завершения компиляции. Нижняя правая полоса прогресса показывает прогресс очереди компиляции.

Исключения

Применяются следующие исключения:

  • Если вы рисуете геометрию с помощью DrawProcedural или CommandBuffer.DrawProcedural, Редактор не использует замещающий шейдер. Вместо этого Редактор просто пропускает отображение этой геометрии до тех пор, пока не будет компилирован вариант шейдера.
  • Unity Editor не использует асинхронную компиляцию шейдеров с операциями Blit. Это для того, чтобы гарантировать правильный выход в наиболее распространенных случаях использования.