Эта страница содержит информацию об использовании блока Теги
в вашей ShaderLab Язык Unity для определения структуры объектов Shader. Подробнее
См. код Словарь для назначения тегов субшейдеру.
Информацию об определении вложенного шейдера см. в разделе ShaderLab: определение вложенного шейдера. Для получения информации о том, как Shaderпрограмма работает на GPU. Подробнее
См. в Словарь работы объектов и отношения между объектами шейдеров, субшейдерами и проходами. , см. раздел Объекты шейдеров.
Обзор
Теги представляют собой пары данных "ключ-значение". Unity использует предопределенные ключи и значения, чтобы определить, как и когда использовать данный SubShader, или вы также можете создавать свои собственные теги SubShader с пользовательскими значениями. Вы можете получить доступ к тегам SubShader из кода C#.
Совместимость конвейера рендеринга
Название функции | Встроенный конвейер рендеринга | Универсальный конвейер рендеринга (URP) | Конвейер рендеринга высокого разрешения (HDRP) | Пользовательская SRP |
---|---|---|---|---|
ShaderLab: SubShader Tags block | Да | Да | Да | Да |
ShaderLab: RenderPipeline SubShader tag | Нет | Да | Да | Нет |
ShaderLab: Queue SubShader tag | Нет | Да | Yes
|
Yes
Примечание. в пользовательском SRP вы можете определить свой собственный порядок рендеринга и выбрать, использовать ли очереди рендеринга. Дополнительные сведения см. в разделах DrawingSettings и SortingCriteria. |
ShaderLab: RenderType SubShader tag | Да | Да | Да | Да |
ShaderLab: DisableBatching SubShader tag | Да | Да | Да | Да |
ShaderLab: ForceNoShadowCasting SubShader tag | Да | Да | Yes
This disables regular shadows, but has no effect on contact shadows. |
Да |
ShaderLab: CanUseSpriteAtlas SubShader tag | Да | Да | Да | Да |
ShaderLab: PreviewType SubShader tag | Да | Да | Да | Да |
Использование блока тегов в подшейдере
В ShaderLab вы назначаете теги вспомогательному шейдеру, помещая блок Tags
внутрь блока SubShader
.
Обратите внимание, что и вложенные шейдеры, и проходы используют блок Теги
, но работают по-разному. Назначение тегов SubShader для прохода не имеет никакого эффекта, и наоборот. Разница в том, где вы размещаете блок Теги
:
- Чтобы определить теги Pass, поместите блок
Tags
внутрь блокаPass
. - Чтобы определить теги SubShader, поместите блок
Tags
внутрь блокаSubShader
, но внеПропустить
блок.
Информацию о присвоении тегов пропуску см. в разделе Назначение тегов пропуску.
Подпись | Функции |
---|---|
Tags { “[name1]” = “[value1]” “[name2]” = “[value2]”} | Применяет указанные теги к SubShader.
Вы можете определить любое количество тегов. |
Использование тегов SubShader с кодом C#
Теги SubShader можно прочитать из скрипта C# с помощью Material.GetTag API, например:
using UnityEngine;
public class Example : MonoBehaviour
{
// Attach this to a gameObject that has a Renderer component
string tagName = "ExampleTagName";
void Start()
{
Renderer myRenderer = GetComponent();
string tagValue = myRenderer.material.GetTag(ExampleTagName, true, "Tag not found");
Debug.Log(tagValue);
}
}
Тег RenderPipeline
Тег RenderPipeline
сообщает Unity, совместим ли субшейдер с универсальным конвейером рендеринга (URP) или конвейером рендеринга высокого разрешения (HDRP).
Синтаксис и допустимые значения
Подпись | Функции |
---|---|
“RenderPipeline” = “[name]” | Сообщает Unity, совместим ли этот SubShader с URP или HDRP. |
Параметры | Значение | Функции |
---|---|---|
[name] | UniversalRenderPipeline | Этот SubShader совместим только с URP. |
HighDefinitionRenderPipeline | Этот SubShader совместим только с HDRP. | |
(any other value, or not declared) | Этот SubShader не совместим с URP или HDRP. |
Примеры
В этом примере кода объявляется, что SubShader совместим с URP:
Shader "ExampleShader" {
SubShader {
Tags { "RenderPipeline" = "UniversalRenderPipeline" }
Pass {
…
}
}
}
Тег очереди
Тег Queue
сообщает Unity, какую очередь рендеринга использовать для рендеринга геометрии. Очередь рендеринга — это один из факторов, определяющих порядок, в котором Unity рендерит геометрию.
Синтаксис и допустимые значения
Тег Queue
можно использовать двумя способами: вы можете указать Unity использовать именованную очередь рендеринга или безымянную очередь рендеринга, которая отображается после именованной очереди рендеринга.
Подпись | Функции |
---|---|
“Queue” = “[queue name]” | Используйте именованную очередь рендеринга. |
“Queue” = “[queue name] + [offset]” | Использовать безымянную очередь с заданным смещением от именованной очереди.
Примером, когда это полезно, является прозрачная вода, которую следует рисовать после непрозрачных объектов, но перед прозрачными объектами. |
Подпись | Значение | Функции |
---|---|---|
[queue name] | Background | Определяет очередь фонового рендеринга. |
Geometry | Определяет очередь рендеринга геометрии. | |
AlphaTest | Определяет очередь рендеринга AlphaTest. | |
Transparent | Задает прозрачную очередь рендеринга. | |
Overlay | Определяет очередь рендеринга наложения. | |
[offset] | integer | Указывает индекс, по которому Unity отображает безымянную очередь относительно именованной очереди. |
Использование этого тега с кодом C#
Вы можете использовать Shader.renderQueue для чтения значения тега Queue активного подшейдера объекта Shader.
По умолчанию Unity рендерит геометрию в очереди рендеринга, указанной в теге [Queue]. Вы можете переопределить это значение для каждого материала. В редакторе Unity это можно сделать в инспекторе материалов, задав свойство Очередь рендеринга. В сценарии C# это можно сделать, установив значение Material.renderQueue с помощью файла Rendering.RenderQueue перечисление.
Примеры
В этом примере кода создается вспомогательный шейдер, который визуализирует геометрию как часть очереди прозрачного рендеринга:
Shader "ExampleShader" {
SubShader {
Tags { "Queue" = "Transparent" }
Pass {
…
}
}
}
В этом примере кода создается SubShader, который визуализирует геометрию в безымянной очереди после очереди Geometry.
Shader "ExampleShader" {
SubShader {
Tags { "Queue" = "Geometry+1" }
Pass {
…
}
}
}
Тег RenderType
Используйте тег RenderType
, чтобы переопределить поведение объекта Shader.
Во встроенном конвейере рендеринга вы можете менять местами подшейдеры во время выполнения, используя технику, называемую заменой шейдера. Этот метод работает путем идентификации подшейдеров, которые имеют совпадающие значения тега RenderType
. В некоторых случаях это используется для создания текстуры глубины камеры.
В конвейере рендеринга на основе Scriptable Render Pipeline можно переопределить состояние рендеринга, определенное в объекте Shader, с помощью структуры RenderStateBlock
. Вы можете использовать значение тега RenderType
, чтобы определить субшейдеры для переопределения.
Синтаксис и допустимые значения
Подпись | Функции |
---|---|
“RenderType” = “[renderType]” | Установите значение RenderType для этого SubShader. |
Подпись | Значение | Функции |
---|---|---|
[renderType] | String | Для этого параметра нет заданных значений. Чтобы определить значение RenderType для любого вспомогательного шейдера, который вы хотите заменить, откройте исходный файл шейдера.
Теги Вы также можете создавать собственные значения для пользовательских подшейдеров. |
Использование этого тега с кодом C#
Информацию о замене шейдеров во встроенном конвейере рендеринга см. в разделе Замена шейдеров. Для получения информации об использовании RenderStateBlock в Scriptable Render Pipeline см. документацию по API для ScriptableRenderContext.DrawRenderers.
Примеры
В этом примере кода создается SubShader со значением RenderType TransparentCutout
:
Shader "ExampleShader" {
SubShader {
Tags { "RenderType" = "TransparentCutout" }
Pass {
…
}
}
}
Тег ForceNoShadowCasting
Тег ForceNoShadowCasting
не позволяет геометрии в SubShader отбрасывать (а иногда и получать) тени. Точное поведение зависит от конвейера рендеринга и рендерингапроцесса вывода графики на экран (или текстуры рендеринга). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
См. в пути Словарь.
Это может быть полезно, если вы используете замену шейдера, но не хотите наследовать передачу тени от другого вспомогательного шейдера.
Синтаксис и допустимые значения
Подпись | Функции |
---|---|
“ForceNoShadowCasting” = “[state]” | Следует ли предотвращать отбрасывание (а иногда и получение) теней для всей геометрии, использующей этот SubShader. |
Подпись | Значение | Функции |
---|---|---|
[state] | True | Unity не позволяет геометрии в этом SubShader отбрасывать тени.
В встроенном конвейере рендеринга с путями рендеринга Forward, Legacy Vertex Lit или Legacy Deferred Unity также предотвращает получение теней геометрией в этом SubShader. В HDRP это не мешает геометрии отбрасывать контактные тени. |
False | Unity не препятствует тому, чтобы геометрия в этом SubShader отбрасывала или получала тени. Это значение по умолчанию. |
Примеры
В этом примере кода создается SubShader со значением ForceNoShadowCasting True
:
Shader "ExampleShader" {
SubShader {
Tags { "ForceNoShadowCasting" = "True" }
Pass {
…
}
}
}
Тег DisableBatching
Тег субшейдера DisableBatching
запрещает Unity применять динамическую пакетную обработку Автоматический процесс Unity, который пытается визуализировать несколько сеток, как если бы они были одной сеткой, для оптимизации графической производительности. Этот метод преобразует все вершины GameObject на ЦП и группирует множество похожих вершин вместе. Подробнее
См. в Словаре геометрию, использующую этот SubShader.
Это полезно для шейдерных программ, выполняющих операции с объектным пространством. Динамическая пакетная обработка преобразует всю геометрию в мировое пространство, а это означает, что шейдерные программы больше не могут обращаться к объектному пространству. Следовательно, шейдерные программы, которые полагаются на пространство объектов, не отображают правильно. Чтобы избежать этой проблемы, используйте этот тег SubShader, чтобы Unity не применяла динамическую пакетную обработку.
Синтаксис и допустимые значения
Подпись | Функции |
---|---|
“DisableBatching” = “[state]” | Предотвращает ли Unity динамическую пакетную обработку для всей геометрии, использующей этот субшейдер. |
Подпись | Значение | Функции |
---|---|---|
[state] | True | Unity запрещает динамическую пакетную обработку для геометрии, использующей этот субшейдер. |
False | Unity не препятствует динамической пакетной обработке геометрии, использующей этот субшейдер. Это значение по умолчанию. | |
LODFading | Unity предотвращает динамическую пакетную обработку для всей геометрии, которая является частью LODGroup со значением Fade Mode, отличным от None. В противном случае Unity не препятствует динамической пакетной обработке. |
Примеры
В этом примере кода создается SubShader со значением DisableBatching True
:
Shader "ExampleShader" {
SubShader {
Tags { "DisableBatching" = "True" }
Pass {
…
}
}
}
Игнорировать тег Projector
Во встроенном конвейере рендеринга тег IgnoreProjector
SubShader сообщает Unity, влияют ли на геометрию проекторы. Это в основном полезно для исключения полупрозрачной геометрии, с которой проекторы несовместимы.
Этот тег не действует в других конвейерах рендеринга.
Синтаксис и допустимые значения
Подпись | Функции |
---|---|
“IgnoreProjector” = “[state]” | Игнорирует ли Unity проекторы при рендеринге этой геометрии. |
Подпись | Значение | Функции |
---|---|---|
[state] | True | Unity игнорирует проекторы при рендеринге этой геометрии. |
False | Unity не игнорирует проекторы при рендеринге этой геометрии. Это значение по умолчанию. |
Примеры
В этом примере кода создается SubShader со значением IgnoreProjectors True
:
Shader "ExampleShader" {
SubShader {
Tags { "IgnoreProjector" = "True" }
Pass {
…
}
}
}
Тег PreviewType
Тег PreviewType
SubShader сообщает редактору Unity, как отображать материал, который использует этот SubShader, в Инспекторе материаловОкно Unity, в котором отображается информация о выбранном в данный момент игровом объекте, активе или настройках проекта, что позволяет просматривать и редактировать значения. Дополнительная информация
См. в Словарь.
Синтаксис и допустимые значения
Подпись | Функции |
---|---|
“PreviewType” = “[shape]” | Какую форму использует редактор Unity для предварительного просмотра материала, в котором используется этот субшейдер. |
Подпись | Значение | Функции |
---|---|---|
[shape] | Sphere | Отобразите материал на сфере. Это значение по умолчанию. |
Plane | Отображение материала на плоскости. | |
SkyboxОсобый тип материала, используемый для изображения неба. Обычно шестигранник. More info See in Словарь |
Отобразите материал на скайбоксе. |
Примеры
В этом примере кода создается SubShader со значением PreviewType Plane
:
Shader "ExampleShader" {
SubShader {
Tags { "PreviewType" = "Plane" }
Pass {
…
}
}
}
Тег CanUseSpriteAtlas
Используйте этот тег SubShader в проектах, в которых используется устаревший упаковщик спрайтов, чтобы предупредить пользователей о том, что ваш шейдер основан на исходных координатах текстуры и поэтому им не следует упаковывать его текстуры в атласы. .
Синтаксис и допустимые значения
Подпись | Функции |
---|---|
“CanUseSpriteAtlas” = “[state]” | Совместимы ли спрайты, использующие этот вспомогательный шейдер, с устаревшими SpriteA двухмерными графическими объектами. Если вы привыкли работать в 3D, спрайты — это, по сути, просто стандартные текстуры, но есть специальные приемы комбинирования текстур спрайтов и управления ими для повышения эффективности и удобства во время разработки. Подробнее См. в Словарь Packer. |
Подпись | Значение | Функции |
---|---|---|
[state] | True | Спрайты, использующие этот SubShader, совместимы с устаревшим Sprite Packerсредством, которое плотно упаковывает графику из нескольких текстур спрайтов в одну текстуру. известен как атлас. Unity предоставляет утилиту Sprite Packer для автоматизации процесса создания атласов из отдельных текстур спрайтов. Подробнее См. в Словарь. Это значение по умолчанию. |
False | Спрайты, использующие этот SubShader, несовместимы с Legacy Sprite Packer.
Когда SubShader со значением |
Примеры кода тега CanUseSpriteAtlas
В этом примере кода создается SubShader со значением CanUseSpriteAtlas False
:
Shader "ExampleShader" {
SubShader {
Tags { "CanUseSpriteAtlas" = "False" }
Pass {
…
}
}
}