Эта страница содержит информацию об использовании блока Теги
в вашей ShaderLab Язык Unity для определения структуры объектов Shader. Подробнее
См. код Словарь для присвоения тегов пропуску. Он также содержит информацию об использовании тега LightMode
.
Для получения информации о том, как Shaderпрограмма работает на графическом процессоре. Подробнее
См. в Словарь работы объектов и отношения между объектами шейдеров, субшейдерами и проходами. , см. основные сведения об объекте шейдера.
Обзор
Теги — это пары данных "ключ-значение", которые можно присвоить пропуску. Unity использует предопределенные теги и значения, чтобы определить, как и когда отображать данный проход. Вы также можете создавать свои собственные пользовательские теги Pass с пользовательскими значениями и получать к ним доступ из кода C#.
Наиболее часто используемым предопределенным тегом Pass является тег LightMode
; это используется во всех конвейерах рендеринга. Другие теги Pass зависят от конвейера рендеринга. Дополнительные сведения см. на следующих страницах:
- Предопределенные теги прохода во встроенном конвейере рендеринга см. в разделе Предопределенные теги прохода во встроенном конвейере рендеринга.
- Предопределенные теги Pass в Universal Render Pipeline (URP) см. на странице Теги прохода URP.
Совместимость конвейера рендеринга
Название функции | Встроенный конвейер рендеринга | Универсальный конвейер рендеринга (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 Pass во встроенном конвейере рендеринга см. в разделе Предопределенные теги Pass во встроенном конвейере рендеринга.
- Значения тега LightMode Pass в универсальном конвейере рендеринга (URP) см. на странице Теги прохода URP: 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.
}
}
}