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

Использование и производительность встроенных шейдеров

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

Свойства материала появятся в Инспектореокне Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, позволяя вам проверять и редактировать значения. Дополнительная информация
См. в Словарь
, если либо сам Материал, либо GameObjectФундаментальный объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки и многое другое. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь
, в котором выбран Материал. Инспектор материалов выглядит следующим образом:

Каждый материал будет выглядеть в Инспекторе немного по-разному, в зависимости от того, какой шейдер он использует. Шейдер сам определяет, какие свойства будут доступны для настройки в Инспекторе. Инспектор материалов подробно описан на странице справки по материалам. Помните, что шейдер реализуется через Материал. Таким образом, в то время как шейдер определяет свойства, которые будут отображаться в Инспекторе, каждый Материал фактически содержит скорректированные данные из ползунков, цветов и текстур. Самое важное, что нужно помнить об этом, это то, что один шейдер может использоваться в нескольких Материалах, но один Материал не может использовать несколько шейдеров.

Имена шейдеров

Изменение имени устаревшего шейдера может повлиять на его функциональность. Это связано с тем, что до Unity 5.0 некоторые функции шейдера определялись его путем и именем. Это по-прежнему то, как работают устаревшие шейдеры. Дополнительные сведения см. в разделе Имена шейдеров прежних версий

.

Вопросы производительности

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

Пути рендеринга и производительность шейдера

Из процесса рендерингапроцесса вывода графики на экран (или текстуры рендеринга). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
См. в Словарь
пути, которые поддерживает Unity, Отложенное затенениеПуть рендеринга во встроенном конвейере рендеринга, который не ограничивает количество источников света, которые могут влиять игровой объект. Все источники света оцениваются попиксельно, что означает, что все они корректно взаимодействуют с картами нормалей и так далее. Кроме того, все источники света могут иметь файлы cookie и тени. Подробнее
См. в Словарь
и Vertex Lit имеют наиболее предсказуемую производительность. В отложенном затенении каждый объект обычно рисуется один раз, независимо от того, какие источники света на него воздействуют. Точно так же в Vertex Lit каждый объект обычно рисуется один раз. Таким образом, разница в производительности шейдеров в основном зависит от того, сколько текстур они используют и какие вычисления выполняют.

Производительность шейдера в прямом пути рендеринга

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

Шейдеры

Vertex-Lit в Упреждающий рендерингПуть рендеринга, который визуализирует каждый объект в одном или больше проходов, в зависимости от света, воздействующего на объект. Сами источники света также обрабатываются Forward Rendering по-разному, в зависимости от их настроек и интенсивности. Подробнее
См. в Словарь
всегда дешевле, чем Pixel-Lit шейдеры. Эти шейдеры вычисляют освещение на основе сеткиосновного графического примитива Unity. Меши составляют большую часть ваших 3D-миров. Unity поддерживает триангулированные или четырехугольные полигональные сетки. Поверхности Nurbs, Nurms, Subdiv должны быть преобразованы в полигоны. Подробнее
Просмотр в Словарь
с использованием всех источников света одновременно. Из-за этого, независимо от того, сколько источников света светит на объект, его нужно будет нарисовать только один раз.

Шейдеры Pixel-Lit рассчитывают итоговое освещение для каждого пикселянаименьшей единицы компьютерного изображения. . Размер пикселя зависит от разрешения вашего экрана. Пиксельное освещение рассчитывается для каждого пикселя экрана. Подробнее
Посмотрите в Словарь
, что нарисовано. Из-за этого объект должен быть отрисован один раз, чтобы получить окружающий и основной направленный свет, и один раз для каждого дополнительного света, падающего на него. Таким образом, формула представляет собой N проходов рендеринга, где N — конечное количество пикселей, освещающих объект. Это увеличивает нагрузку на ЦП для обработки и отправки команд на графическую карту, а также на графическую карту для обработки вершин и отрисовки пикселей. Размер пиксельного объекта на экране также влияет на скорость его прорисовки. Чем больше объект, тем медленнее он будет отображаться.

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

Помните, что источники света можно принудительно перевести в пиксельный («важный») или вершинный/SH («неважный») режим. Любое вершинное освещение, сияющее на шейдере Pixel-Lit, будет рассчитываться на основе вершин объекта или всего объекта и не будет увеличивать стоимость рендеринга или визуальные эффекты, связанные с пиксельным освещением.

Общая производительность шейдера

Среди встроенных шейдеров они расположены примерно в таком порядке возрастания сложности:

  • Не горит. Это просто текстура, на которую не влияет освещение.
  • Подсветка вершин.
  • Рассеянный.
  • Сопоставление нормалей. Это немного дороже, чем Diffuse: добавляется еще одна текстура (карта нормалей) и пара инструкций для шейдера.
  • Отражение. Это добавляет расчет зеркальных бликов.
  • Зеркальное отображение нормалей. Опять же, это немного дороже, чем Specular.
  • Параллакс-нормаль сопоставляется. Это добавляет вычисление сопоставления нормалей параллакса.
  • Зеркальное отображение нормали параллакса. Это добавляет как параллаксное сопоставление нормалей, так и расчет зеркальных бликов.

Упрощенные мобильные шейдеры

Кроме того, в Unity есть несколько упрощенных шейдеров, предназначенных для мобильных платформ, в категории «Мобильные». Эти шейдеры работают и на других платформах, поэтому, если вы можете жить с их упрощениями (например, приблизительное отражение, отсутствие поддержки цвета для каждого материала и т. д.), попробуйте их использовать!

Чтобы увидеть конкретные упрощения, сделанные для каждого шейдера, просмотрите файлы .shader из пакета "встроенных шейдеров". вверху файла в некоторых комментариях.

Некоторые примеры общих для мобильных шейдеров изменений:

  • Нет цвета материала или основного цвета для окрашивания шейдера.
  • Для шейдеров, использующих карту нормалейТип текстуры карты рельефа, который позволяет добавлять детали поверхности, такие как неровности, канавки и царапины модели, которые отражали свет, как если бы они были представлены реальной геометрией. Подробнее
    См. в Словарь
    , используется тайлинг и смещение от базовой текстуры.
  • Шейдеры частиц не поддерживают AlphaTest или ColorMask.
  • Ограниченная поддержка функций и освещения. некоторые шейдеры поддерживают только одно направление света.
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3