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

ShaderLab: присвоение тегов по паролю

Эта страница содержит информацию об использовании блока Теги в вашей ShaderLab Язык Unity для определения структуры объектов Shader. Подробнее
См. код Словарь
для присвоения тегов пропуску. Он также содержит информацию об использовании тега LightMode.

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

Обзор

Теги — это пары данных "ключ-значение", которые можно присвоить пропуску. Unity использует предопределенные теги и значения, чтобы определить, как и когда отображать данный проход. Вы также можете создавать свои собственные пользовательские теги Pass с пользовательскими значениями и получать к ним доступ из кода C#.

Наиболее часто используемым предопределенным тегом Pass является тег LightMode; это используется во всех конвейерах рендеринга. Другие теги Pass зависят от конвейера рендеринга. Дополнительные сведения см. на следующих страницах:

Совместимость конвейера рендеринга

Название функции Встроенный конвейер рендеринга Универсальный конвейер рендеринга (URP) Конвейер рендеринга высокого разрешения (HDRP) Пользовательская SRP
ShaderLab: Pass Tags block Да Да Да Да
ShaderLab: LightMode Pass tag Да Да Да Да

Использование блока тегов

Чтобы назначить теги проходу в ShaderLab, вы помещаете блок Tags внутрь блока Pass.

Обратите внимание, что и вложенные шейдеры, и проходы используют блок Теги, но работают по-разному. Назначение тегов SubShader для прохода не имеет никакого эффекта, и наоборот. Разница в том, где вы размещаете блок Теги:

  • Чтобы определить теги Pass, поместите блок Tags внутрь блока Pass.
  • Чтобы определить теги SubShader, поместите блок Tags внутрь блока SubShader, но вне Пропустить блок.

Информацию о назначении тегов вложенному шейдеру см. в разделе Назначение тегов вложенному шейдеру.

Подпсь Функции
Tags {"<name1>" = "<value1>" "<name2>" = "<value2>"} Применяет указанные теги к пропуску.

Вы можете определить любое количество тегов.

Использование тегов Pass со сценариями C#

Чтобы получить доступ к значению тега Pass из скриптов C#фрагмента кода, позволяющего создавать собственные компоненты, запускать игровые события, изменять свойства компонентов с течением времени и реагировать на действия пользователя любым удобным для вас способом. Подробнее
См. в Словарь
, вы можете использовать Shader.FindPassTagValue API. Это работает для предопределенных тегов Pass в Unity и для пользовательских тегов Pass, созданных вами.

Примечание. Существует несколько API, которые работают напрямую с тегом LightMode Pass. Дополнительную информацию см. в разделе Использование тега LightMode со сценариями C#.

Тег LightMode

Тег LightMode – это предопределенный тег Pass, который Unity использует для определения того, следует ли выполнять Pass в данном кадре, когда во время этого кадра Unity выполняет Pass и какие Unity делает с выводом.

Примечание. Тег LightMode не связан с LightMode. перечисление, относящееся к освещению.

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

Во встроенном конвейере рендеринга, если вы не установите тег LightMode, Unity рендерит проход без какого-либо освещения или теней; по сути это то же самое, что и LightMode со значением Always. В Scriptable Render Pipeline вы можете использовать значение SRPDefaultUnlit для ссылки на проходы без тега LightMode.

Синтаксис и допустимые значения

Подпись Функции
“LightMode” = “[value]” Устанавливает значение LightMode для этого прохода.

Действительные значения этого тега зависят от конвейера рендеринга.

Использование тега LightMode со сценариями C#

Material.SetShaderPassEnabled и ShaderTagId используют значение LightMode, чтобы определить, как Unity обрабатывает данный Pass.

В Scriptable Render Pipeline вы можете создавать собственные значения для тега LightMode. Затем вы можете использовать эти пользовательские значения, чтобы определить, какие проходы нужно отрисовывать во время данного вызова ScriptableRenderContext.DrawRenderers, настроив структуру DrawingSettings. Дополнительные сведения и пример кода см. в разделе Создание простого цикла рендеринга в пользовательском конвейере рендеринга с поддержкой сценариев.

Примеры

Shader "Examples/ExampleLightMode" { SubShader { Pass { Tags { "LightMode" = "Always" } // The rest of the code that defines the Pass goes here. } } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3