Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Обзор

Каждый раз, когда вы создаете свой проект, редактор Unity компилирует все шейдеры, которые требуются для вашей сборки: каждый необходимый шейдерпрограмма который работает на графическом процессоре. Подробнее
См. вариант Словарь
для каждого требуемого графического API.

Когда вы работаете в редакторе Unity, редактор не компилирует все заранее. Это связано с тем, что компиляция каждого варианта для каждого графического API может занять очень много времени.

Вместо этого редактор Unity делает следующее:

  • При импорте объекта шейдера выполняется минимальная обработка (например, создание шейдера поверхности).
  • Когда ему нужно отобразить вариант шейдера, он проверяет папку Library/ShaderCache.
  • Если он находит ранее скомпилированный вариант шейдера, использующий идентичный исходный код, он использует его.
  • Если он не находит совпадения, он компилирует требуемый вариант шейдера и сохраняет результат в кэше.

Компиляция шейдера выполняется с помощью процесса UnityShaderCompiler. Можно запустить несколько процессов UnityShaderCompiler (как правило, по одному на ядро ​​ЦП на вашем компьютере), чтобы компиляция шейдеров во время сборки проигрывателя могла выполняться параллельно. Пока Редактор не компилирует шейдеры, процессы компилятора ничего не делают и не потребляют ресурсы компьютера.

Папка кэша шейдеров может стать довольно большой, если у вас много шейдеров, которые часто меняются. Эту папку можно безопасно удалить; это просто заставляет Unity перекомпилировать варианты шейдера.

Во время сборки игрока все «еще не скомпилированные» варианты шейдеров компилируются, так что они находятся в данных игры, даже если редактор их не использовал.

Различные компиляторы шейдеров

Разные платформы используют разные компиляторы шейдеров для компиляции программы шейдера следующим образом:

  • Платформы, использующие DirectX, используют компилятор Microsoft FXC HLSL.
  • Платформы, использующие OpenGL (Core и ES), используют компилятор Microsoft FXC HLSL с последующей трансляцией байт-кода в GLSL с использованием HLSLcc.
  • Платформы, использующие Metal, используют компилятор Microsoft FXC HLSL с последующей трансляцией байт-кода в Metal с использованием HLSLcc.
  • На платформах, использующих Vulkan, используется компилятор Microsoft FXC HLSL с последующей трансляцией байт-кода в SPIR-V с использованием HLSLcc.
  • Другие платформы, например консольные, используют соответствующие компиляторы.
  • Шейдеры поверхностиУпрощенный способ написания шейдеров для встроенного конвейера рендеринга . Подробнее
    См. в Словарь
    использование HLSL и MojoShader для этапа анализа генерации кода.

Вы можете настроить различные параметры компилятора шейдера с помощью директив прагмы.

Кэширующий препроцессор шейдера

Компиляция шейдера включает несколько шагов. Одним из первых шагов является предварительная обработка. На этом этапе программа, называемая препроцессором, подготавливает исходный код шейдера для компилятора.

В предыдущих версиях Unity редактор использовал препроцессор, предоставляемый компилятором шейдеров для текущей платформы. Теперь вы можете выбрать, использовать ли препроцессор кэширования шейдеров Unity или вернуться к предыдущему поведению. Если у вас не возникнет проблем, вам следует использовать препроцессор кэширующего шейдера.

Кэширующий препроцессор шейдеров оптимизирован для более быстрого импорта и компиляции шейдеров; это до 25% быстрее. Он работает путем кэширования промежуточных данных предварительной обработки, поэтому редактору нужно анализировать включаемые файлы только при изменении их содержимого. Это делает компиляцию нескольких вариантов одного и того же шейдера более эффективной. Включение препроцессора кэширования шейдеров дает наиболее заметный эффект, когда шейдеры в проекте используют большой набор общих включаемых файлов.

Помимо улучшенной производительности, препроцессор кэширования шейдеров добавляет следующие функции:

  • Ограниченная поддержка директив #pragma внутри условий.
  • Поддержка директивы #pragma warning.
  • Поддержка директивы #include_with_pragmas, которая позволяет помещать директивы #pragma во включаемые файлы.
  • Флажок Только предварительная обработка в инспекторе шейдеров позволяет просматривать предварительно обработанный исходный код для этого ресурса шейдера.

Подробную информацию о различиях между препроцессором кэширования шейдеров и предыдущим поведением см. на форуме Unity: Новый препроцессор шейдеров.

Вы можете включить или отключить кэширующий препроцессор шейдеров, установив флажок Кэширующий препроцессор шейдеров в разделе Компиляция шейдеров в редакторе . settings или с помощью API EditorSettings.cachingShaderPreprocessor.

Разбор времени сборки

Во время сборки игры Unity может обнаружить, что некоторые варианты внутренних шейдеров не используются игрой, и исключить их из данных сборки («удалить»). Дополнительную информацию см. в разделе Варианты шейдераВерсия программы шейдера, которую Unity генерируется в соответствии с определенной комбинацией ключевых слов шейдера и их статусом. Объект Shader может содержать несколько вариантов шейдера. More info
See in Словарь
.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3