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

Вы можете создавать шейдерыпрограмму, работающую на графическом процессоре. Подробнее
См. в Словарь
, которые имеют общий код, но имеют разные функциональные ключевое слово включено или отключено.

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

Объявление ключевых слов шейдера

Вы объявляете ключевые слова шейдера в наборах. Набор содержит взаимоисключающие ключевые слова.

Например, следующий набор содержит три ключевых слова:

  • COLOR_RED
  • COLOR_GREEN
  • COLOR_BLUE

Внутри ключевые слова шейдера используют директивы препроцессора #define. Когда вы объявляете набор ключевых слов шейдера, Unity компилирует варианты шейдера с соответствующими директивами #define.

Примечание. В Shader Graph используется другая терминология: набор ключевых слов называется ключевым словом, а ключевые слова в наборе называются состояниями. Внутренне функциональность такая же: Unity компилирует их одинаково, вы работаете с ними так же, как с C# скриптамиA фрагмент кода, который позволяет вам создавать свои собственные компоненты, запускать игровые события, изменять свойства компонентов с течением времени и реагировать на ввод данных пользователем любым удобным для вас способом. Подробнее
См. в Словарь
и т. д.

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

Чтобы объявить ключевые слова в написанных вручную шейдерах, см. раздел Объявление и использование ключевых слов шейдеров в HLSL. Чтобы объявить ключевые слова в шейдерах Shader Graph, см. Ключевые слова.

Объявление ключевых слов с локальной или глобальной областью действия

Когда вы объявляете набор ключевых слов, вы выбираете, будут ли ключевые слова в наборе иметь локальную или глобальную область действия.

Глобальные и локальные ключевые слова разделены: глобальные ключевые слова влияют на весь проект, а локальные ключевые слова относятся к отдельному шейдеру.

Если вы не планируете включать ключевые слова для нескольких шейдеров одновременно, обычно следует объявлять ключевые слова с локальной областью действия.

Чтобы установить это значение в шейдерах с ручным кодом, см. раздел Объявление и использование ключевых слов шейдера в HLSL. Чтобы установить это значение в шейдерах Shader Graph, см. раздел Keywords. Информацию о включении и отключении локальных и глобальных ключевых слов шейдера см. в разделе Использование ключевых слов шейдера со скриптами C#.

Примечание. Если есть глобальное и локальное ключевые слова с одинаковыми именами, Unity отдает приоритет локальному ключевому слову.

Тип определения: «множественная компиляция» или «функция шейдера»

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

  • «мультикомпиляция» объявляет набор ключевых слов.

    Unity компилирует варианты шейдеров для всех ключевых слов в наборе.

  • «Функция шейдера» объявляет набор ключевых слов, а также указывает компилятору компилировать варианты, в которых ни одно из этих ключевых слов не включено.

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

Какой вариант лучше, зависит от того, как вы используете ключевые слова. Если вы используете ключевые слова для настройки материалов в своем проекте и не меняете их значение из сценариев C# во время выполнения, вам следует использовать «функции шейдера», чтобы уменьшить количество ключевых слов и вариантов шейдера в вашем проекте. Если вы включаете и отключаете ключевые слова во время выполнения с помощью сценариев C#, вам следует использовать «мультикомпиляцию», чтобы предотвратить удаление вариантов по ошибке. Дополнительную информацию об удалении шейдеров см. в разделе Удаление вариантов шейдера.

Примечание. Если вы добавите шейдер в список Всегда включаемые шейдеры в окне настроек графики, Unity включает все ключевые слова из всех наборов в сборке, даже если они были объявлены с «функцией шейдера».

Чтобы установить это значение в шейдерах с ручным кодом, см. раздел Объявление и использование ключевых слов шейдера в HLSL. Чтобы установить это значение в шейдерах Shader Graph, см. Keywords.

Ключевые слова, относящиеся к этапу

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

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

Примечание. Вы несете ответственность за использование ключевых слов только на указанных этапах шейдера.

Поддержка графического API

Unity не полностью поддерживает использование директив ключевых слов для конкретных этапов для следующих графических API:

  • OpenGL и Vulkan: во время компиляции Unity автоматически преобразует все директивы ключевых слов для конкретных этапов в директивы обычных ключевых слов.
  • Металл: любое ключевое слово, относящееся к этапам вершин, также влияет на этапы тесселяции и наоборот.

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

Условная компиляция с использованием ключевых слов шейдера

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

В шейдерах, написанных вручную, и в Shader Graph это делается по-разному. Инструкции по написанию шейдеров вручную см. в разделе Определение и использование ключевых слов шейдеров. Инструкции по Shader Graph см. в разделе Shader Graph: Узел ключевых слов.

Включение и отключение ключевых слов шейдера

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

Существует два способа включения и отключения ключевых слов шейдера:

Предопределенные ключевые слова шейдера Unity

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

  • По умолчанию Unity добавляет этот набор ключевых слов ко всем программам создания графических шейдеров: STEREO_INSTANCING_ON, STEREO_MULTIVIEW_ON, STEREO_CUBEMAP_RENDER_ON, UNITY_SINGLE_PASS_STEREO. Вы можете удалить эти ключевые слова с помощью скрипта редактора. Дополнительную информацию см. в разделе Удаление вариантов шейдера.
  • По умолчанию Unity добавляет в стандартный шейдер следующий набор ключевых слов: LIGHTMAP_ON, DIRLIGHTMAP_COMBINED, DYNAMICLIGHTMAP_ON, LIGHTMAP_SHADOW_MIXING, SHADOWS_SHADOWMASK. Вы можете удалить эти ключевые слова в окне Настройки графики.
  • Во встроенном конвейере рендеринга, если в вашем проекте используются настройки уровня, отличающиеся друг от друга, Unity добавляет этот набор ключевых слов ко всей графике. шейдеры: UNITY_HARDWARE_TIER1, UNITY_HARDWARE_TIER2, UNITY_HARDWARE_TIER3. Дополнительную информацию см. в разделе Уровни графики: уровни графики и варианты шейдеров.

Ограничения ключевых слов шейдера

Существует ограничение в 384 глобальных ключевых слова шейдера, и Unity использует около 60 из них для внутреннего использования (поэтому доступное число уменьшается). Каждый отдельный шейдер имеет ограничение в 64 локальных ключевых слова.

Каждое ключевое слово, объявленное в исходном файле шейдера, и его зависимости
См. в Словарь
учитываются в этих пределах. Зависимости включают проходы, которые шейдер включает с помощью UsePass, и запасные варианты.

Если Unity встречает ключевое слово шейдера с одним и тем же именем несколько раз, оно учитывается только один раз.

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