Основы объекта шейдера
В Unity при работе с шейдерами, которые являются частью графический конвейер, вы обычно работаете с экземплярами Shader класс. Экземпляр Shader класс называется Объект шейдера.
Объект Shader является специфическим для Unity способом работы с программами-шайдерами; это оболочка для программ-шайдеров и другой информации. Он позволяет определить несколько программ-шайдеров в одном файле и сообщить Unity, как ими пользоваться.
Совместимость конвейера отображения
| Название особенности | Universal Render Pipeline (URP) | High Definition Render Pipeline (HDRP) | Изготовленный на заказ SRP | Built-in Render Pipeline |
|---|---|---|---|---|
| Объекты шейдера | Да | Да | Да | Да |
Объект шейдера
Объект Shader содержит шейдерные программы, инструкции по изменению настроек GPU (в совокупности называемых состоянием рендеринга) и сведения, объясняющие Unity, как их использовать.
Вы используете объекты Shader с материалами для определения внешнего вида вашей сцены.
Ассеты
Объекты Shader можно создавать двумя способами. Каждый из них имеет свой тип ассета:
- Вы можете написать код для создания шейдера, который является текстовым файлом с расширением
.shader. - Вы можете использовать Shader Graph для создания ассета Shader Graph.
Независимо от того, каким образом вы создаете свой Shader-объект, Unity представляет результаты таким же образом внутри.
Внутри объекта Shader
Объект Shader имеет вложенную структуру. Он организует информацию в структуры, называемые SubShaders и Проходит. Он организует программы Shader в варианты Shader.
Объект шейдера
Объект Shader содержит:
- Информация о себе, например, название
- Необязательный резервный объект Shader, который Unity использует, если он не может использовать этот
- Один или несколько SubShaders
Вы также можете определить дополнительную информацию, такую как общий код шейдера или использование пользовательский редактор. Информацию об определении объекта Shader см. в ShaderLab: определение объекта Shader.
SubShaders
SubShaders позволяет разделить объект Shader на части, совместимые с различным оборудованием, конвейерами рендеринга и настройками времени выполнения.
SubShader содержит:
- Информация о том, с каким оборудованием, конвейерами отображения и параметрами времени выполнения совместим этот SubShader
- метки SubShader, которые представляют собой пары ключ-значение, предоставляющие информацию о SubShader
- Один или несколько пропусков
Вы также можете задать дополнительные сведения — например, состояние рендеринга, общее для всех проходов. О том, что ещё можно задать в SubShader, см. ShaderLab: определение SubShader.
Пассажи
Пропуск содержит:
- метки Pass, представляющие собой пары ключ-значение, которые предоставляют информацию о Pass;
- Инструкции по обновлению состояния рендеринга перед запуском его шейдерных программ
- Программы шейдеров, организованные в один или несколько вариантов шейдеров
Вы также можете определить дополнительную информацию, такую как имя. Информацию обо всем, что вы можете определить в Пропуске, см. ShaderLab: определение Пропуска.
Варианты шейдеров
Программы шейдеров, содержащиеся в Пассе, организованы в варианты шейдеров. Варианты шейдеров имеют общий код, но различную функциональность при включении или отключении данного ключевого слова.
Количество вариантов шейдера в Пропуске зависит от количества ключевых слов, определенных в коде шейдера, и целевой платформы. Каждый Пропуск содержит по крайней мере один вариант.
Более подробную информацию см. Варианты шейдеров.