Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

В Unity при работе с шейдерами, которые являются частью графического конвейера, обычно работать с экземплярами Shaderпрограммы, работающей на графическом процессоре. Подробнее
См. в Словарь
. Экземпляр класса Shader называется объектом Shader.

Объект Shader — это специфичный для Unity способ работы с шейдерными программами. это оболочка для шейдерных программ и другой информации. Он позволяет вам определять несколько шейдерных программ в одном файле и указывать Unity, как их использовать.

Совместимость конвейера рендеринга

Название функции Встроенный конвейер рендеринга Универсальный конвейер рендеринга (URP) Конвейер рендеринга высокого разрешения (HDRP) Пользовательская SRP
Shader objects Да Да Да Да

Основы шейдерных объектов

Объект Shader содержит шейдерные программы, инструкции по изменению настроек графического процессора (в совокупности называемые состоянием рендеринга) и информацию, которая сообщает Unity, как их использовать.

Вы используете объекты Shader с материаламиресурсом, который определяет, как поверхность должна быть оказано. Подробнее
См. в Словарь
, чтобы определить внешний вид вашего sceneСцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь
.

Активы

Вы можете создавать объекты Shader двумя способами. У каждого есть свой тип объекта:

  • Вы можете написать код для создания актива шейдера, который представляет собой текстовый файл с .shader расширение.
  • Вы можете использовать Shader Graph для создания объекта Shader Graph.

Каким бы способом вы ни создавали объект Shader, Unity представляет результаты одним и тем же образом внутри.

Внутри объекта Shader

Объект Shader имеет вложенную структуру. Он организует информацию в структуры, называемые SubShaders и Passes. Он организует шейдерные программы в варианты шейдеров.

Объект шейдера

Объект Shader содержит:

  • Информация о себе, такое как его название
  • Необязательный резервный объект Shader, который Unity использует, если не может использовать этот.
  • Один или несколько подшейдеров

Вы также можете указать дополнительную информацию, такую ​​как общий код шейдера или использовать ли пользовательский редактор. Для получения информации об определении объекта Shader см. ShaderLab: определение объекта Shader.

Подшейдеры

Подшейдеры позволяют разделить объект шейдера на части, совместимые с различным оборудованием, конвейерами рендеринга и настройками среды выполнения.

Подшейдер содержит:

  • Информация о том, с каким оборудованием, конвейерами рендеринга и параметрами среды выполнения совместим этот субшейдер.
  • Теги SubShader, представляющие собой пары "ключ-значение", предоставляющие информацию о SubShader
  • Один или несколько пропусков

Вы также можете определить дополнительную информацию, такую ​​как состояние рендеринга, которое является общим для всех его проходов. Для получения информации обо всем, что вы можете определить в SubShader, см. ShaderLab: определение SubShader.

Проходит

Пропуск содержит:

  • Теги передачи, представляющие собой пары "ключ-значение", предоставляющие информацию о передаче.
  • Инструкции по обновлению состояния рендеринга перед запуском шейдерных программ
  • Шейдерные программы, организованные в один или несколько вариантов шейдера

Вы также можете указать дополнительную информацию, такую ​​как имя. Информацию обо всем, что можно определить в проходе, см. в разделе ShaderLab: определение прохода.

Варианты шейдера

Шейдерные программы, содержащиеся в проходе, организованы в варианты шейдеров. Варианты шейдеров имеют общий код, но имеют разную функциональность при включении или отключении данного ключевого слова.

Количество вариантов шейдера в проходе зависит от того, сколько ключевых слов вы определили в коде шейдера, и от целевой платформы. Каждый пропуск содержит как минимум один вариант.

Дополнительную информацию см. в разделе Варианты шейдераВерсия шейдера программа, которую Unity генерирует в соответствии с определенной комбинацией ключевых слов шейдера и их статусом. Объект Shader может содержать несколько вариантов шейдера. Подробнее
См. в Словарь
.

Порядок операций при рендеринге

Это общее описание того, как Unity использует объекты Shader для рендеринга геометрии во всех конвейерах рендеринга.

Прежде чем Unity использует объект Shader:

  1. Unity создает список подшейдеров для объекта Shader. Он добавляет все вложенные шейдеры, определенные в объекте шейдера, а затем добавляет все вложенные шейдеры во всех резервных объектах шейдера по порядку.

Когда Unity впервые визуализирует геометрию с помощью объекта Shader или когда изменяется значение уровня детализации шейдера или активный конвейер рендеринга:

  1. Unity перебирает список всех субшейдеров и проверяет их, чтобы определить, являются ли они: совместимыми с аппаратным обеспечением устройства; на уровне или ниже текущего шейдера LODМетод Level Of Detail (LOD) — это оптимизация, которая уменьшает количество треугольников, которые Unity должна отображать для GameObject, когда его расстояние от камеры увеличивается. Подробнее
    Увидеть в значении Словарь
    ; и совместим с активным конвейером рендеринга.
  2. Если в списке есть один или несколько субшейдеров, отвечающих этим требованиям, выбирается первый. Это активный субшейдер.
  3. Если в списке нет субшейдеров, отвечающих всем требованиям:
    1. Если в списке есть один или несколько подшейдеров, которые соответствуют требованиям к оборудованию (но не соответствуют требованиям LOD или конвейера рендеринга), Unity выбирает первый. Это активный субшейдер.
    2. Если в списке нет субшейдеров, отвечающих требованиям к оборудованию, Unity отображает шейдер ошибок.

Unity может идентифицировать геометрию, использующую тот же вариант шейдера, и организовывать ее в пакеты для более эффективной рендерингаПроцесс отрисовки графики на экран (или текстуры рендеринга). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
См. в Словарь
. Один раз на кадр для каждой партии геометрии:

  1. Unity определяет, какой из проходов в активном субшейдере он должен отображать и в какой точке кадра. Это поведение зависит от конвейера рендеринга.
  2. Для каждого прохода, который он отображает:
    1. Если текущее состояние рендеринга не соответствует состоянию рендеринга, определенному в проходе, Unity устанавливает состояние рендеринга, как определено в проходе.
    2. Графический процессор визуализирует геометрию с использованием соответствующего варианта шейдера.
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3