Эта страница содержит информацию об использовании блока Теги в вашей 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.
}
}
}

