Введение в написание шейдеров в коде
Как вы пишете пользовательские шейдеры в Unity зависит от используемого конвейера рендеринга:
- Для руководства и примеров для Universal Render Pipeline (URP), см. URP: Запись пользовательских шейдеров.
- Для руководства и примеров для Built-in Render Pipeline, см. Примеры шейдеров для Built-in Render Pipeline.
- Не рекомендуется писать собственные программы для HDRP, из-за сложности кода. Вместо этого используйте Shader Graph для создания объектов Shader без написания кода.
- Пример простого вершинного и фрагментного шейдера для пользовательского Scriptable Render Pipeline см. в Создание простого цикла рендеринга в пользовательском конвейере рендеринга.
Языки
При написании шейдеров для Unity используются следующие языки:
- Язык программирования под названием HLSL. Используйте его для написания самих программ для шейдеров. Для более подробной информации о HLSL, см. HLSL в Unity.
- Специфический язык Unity, называемый ShaderLab. Используйте его для определения Объект шейдера, который выступает в качестве контейнера для ваших шейдерных программ. Дополнительную информацию о ShaderLab см. ShaderLab.
Вам не нужно использовать разные языки для разных платформ; Unity компилирует ваш HLSL и ShaderLab код на разные языки для разных графиков APIs. Для более подробной информации см. Компиляция шейдеров.
Примечание: Вы также можете напрямую писать свои программы для шейдеров в GLSL и Metal, если хотите. Это не рекомендуется и не требуется как часть обычного рабочего процесса. Для получения дополнительной информации об использовании GLSL, см. GLSL в Unity.
ShaderLab
ShaderLab является декларативным языком, который используется в исходных файлах шейдера. Он использует синтаксис вложенных скобок для описания объекта шейдера.
Есть много вещей, которые вы можете определить в ShaderLab, но наиболее распространенными являются:
- Определение общей структуры объекта Shader. См. ShaderLab: создание Shader, ShaderLab: создание SubShader, и ShaderLab: создание Pass.
- Использование блоков кода для добавления шейдерных программ, написанных на HLSL. См. ShaderLab: добавление шейдерных программ.
- Использование команд для настройки состояния рендеринга GPU перед выполнением шейдерной программы или для выполнения операции, включающей другой проход. См. ShaderLab: команды.
- Отображение свойств из кода шейдера, чтобы вы могли редактировать их в материале Inspector и сохранять как часть ассета материала. См. ShaderLab: определение свойств материала.
- Указание требований к пакетам для SubShaders и Passes. Это позволяет Unity запускать определенные SubShaders и Passes только при установке определенных пакетов в проекте Unity. См. ShaderLab: указание требований к пакетам.
- Определение резервного поведения, когда Unity не может запустить SubShaders с объектом Shader на текущем оборудовании. См. ShaderLab: назначение резервного.
Во Встроенном Render Pipeline, вы также можете писать поверхностные шейдеры. Они являются упрощенным способом написания шейдеров, которые взаимодействуют с освещением. Для более подробной информации, см. поверхностные шейдеры.
Запись шейдеров для различных графиков APIs
В некоторых случаях вам придется писать код шейдера по-разному в зависимости от графики API, на которую вы нацелены. Информацию об этом см. в Писание шейдеров для разных графиков APIs.