Стандартный шейдер Graphics Tools — MRTK3

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

Пример коллекции материалов стандартного шейдера

Образец

См. пример коллекции материалов, в котором демонстрируются несколько вариантов шейдера Graphics Tools/Стандартный. Примеры шейдера Graphics Tools/Стандартный холст см. в примере UnityUI

Architecture

Система шейдинга "Graphics Tools/Стандартный" — это "супершейдер", использующий функцию варианта программы шейдера Unity для автоматического создания оптимального кода шейдера на основе свойств материала. Когда пользователь выбирает свойства материала в инспекторе материалов, он платит только за функции, которые он включил.

Для более эффективной поддержки традиционных рабочих процессов Unity и рабочих процессов UnityUI (холст) система шейдинга "Graphics Tools/Стандартный" имеет две точки входа шейдера:

Контекст По умолчанию UnityUI
Имя Graphics Tools/Стандартный Graphics Tools/Стандартный холст
Шейдер GraphicsToolsStandard GraphicsToolsStandardCanvas

Оба шейдера в основном идентичны, поскольку они используют одинаковый код шейдера. Шейдер Graphics Tools/Стандартный холст содержит дополнительную логику в отношении UnityUI.

Следующий шейдер включает возможности системы шейдинга "Graphics Tools/Стандартный":

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

Поддержка конвейера отрисовки

В Unity имеется несколько конвейеров отрисовки. Система шейдинга "Graphics Tools/Стандартный" предназначена для автоматической работы со встроенным конвейером отрисовки Unity или универсальным конвейером отрисовки (URP). Нет необходимости переключать шейдеры на основе конвейера. Ниже приведена таблица со сведениями о поддержке.

Pipeline Поддерживается Исключения
Встроенный конвейер отрисовки Акриловые режимы размытия не поддерживаются.
Универсальный конвейер отрисовки (URP)
Конвейер отрисовки высокой четкости (HDRP)
Настраиваемый конвейер отрисовки Поддержка зависит от того, как создается конвейер.

Поддержка UnityUI

Система шейдинга "Graphics Tools/Стандартный" работает со встроенной системой пользовательского интерфейса Unity, называемой UnityUI. Graphics Tools/Standard Canvas следует использовать для всех материалов на холстах UnityUI.

Объект Canvas или CanvasRenderer в Graphics Tools при необходимости выдает запрос на добавление ScaleMeshEffect.cs.

Предупреждение инспектора эффектов сетки масштабирования

В компонентах UnityUI матрица unity_ObjectToWorld (или UNITY_MATRIX_M в URP) не является матрицей локального преобразования, на базе которой работает графический компонент, а относится к его родительскому холсту. Для многих эффектов шейдера Graphics Tools/Стандартный холст должно быть известно масштабирование объектов. Для решения этой проблемы ScaleMeshEffect.cs сохраняет сведения о масштабировании в атрибутах канала UV во время создания сетки пользовательского интерфейса.

Совет

При использовании компонента изображения Unity рекомендуется указать "Нет (спрайт)" для исходного изображения, чтобы исключить создание дополнительных вершин в Unity UI.

Инспектор материалов

Для шейдеров средств Graphics Tools/Стандартный и Graphics Tools/Стандартный холст имеется настраиваемый инспектор материалов, который называется StandardShaderGUI.cs. Инспектор автоматически включает или отключает функции шейдера на основе выбора пользователя и помогает в настройке состояния отрисовки. Чтобы подробнее узнать о каждой функции, наведите указатель мыши на требуемое свойство в редакторе Unity для отображения подсказки.

Примечание

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

Инспектор материалов для шейдеров с типом

Инспектор состоит из нескольких областей, как описано ниже.

Режим отрисовки

В первой области инспектора находятся элементы для управления состоянием отрисовки материала. Режим отрисовки определяет, когда и как будет отображаться материал. Цель шейдеров Graphics Tools/Standardи Graphics Tools/Standard Canvas — зеркально отобразить режимы отрисовки в шейдере Unity/Стандартный. Шейдеры Graphics Tools/Стандартный и Graphics Tools/Стандартный холст также включают режим аддитивной отрисовки и режим настраиваемой отрисовки для полного пользовательского управления.

Режим отрисовки Описание
Непрозрачный (По умолчанию) Подходит для обычных сплошных объектов без прозрачных областей.
Вырезка Позволяет создавать прозрачные эффекты с резкими границами между непрозрачными и прозрачными областями. В этом режиме нет полупрозрачных областей, текстура полностью непрозрачна или невидима. Этот режим полезен при использовании прозрачности для создания формы материалов, таких как растительность.
Исчезание Позволяет значениям прозрачности полностью скрывать объект, включая любые блики или отражения, которые могут иметься. Этот режим полезен, если требуется анимировать появляющийся или исчезающий объект. Однако он не подходит для отрисовки реалистичных прозрачных материалов, таких как прозрачная пластмасса или стекло, потому что отражения и блики также будут исчезать.
Прозрачный режим Подходит для отрисовки реалистичных прозрачных материалов, таких как прозрачная пластмасса или стекло. В этом режиме сам материал будет принимать значения прозрачности (на основе альфа-канала текстуры и альфа цвета оттенка). Однако отражение и блики от освещения будут оставаться видимыми целиком, как в случае с реальными прозрачными материалами.
Аддитивный Включает режим аддитивного смешивания, который объединяет цвет предыдущего пикселя с цветом текущего пикселя. Это предпочтительный режим прозрачности, позволяющий избежать проблем с сортировкой параметров прозрачности.
Другой Позволяет управлять каждым аспектом режима отрисовки вручную. Только для опытных пользователей.

Область с примерами режимов отрисовки

Режим отбраковки

Режим отбраковки Описание
Выключено Отключает отбраковку поверхностей. Отбраковку следует отключать только в том случае, если требуется двухсторонняя сетка.
Front Включение отбраковки лицевой поверхности.
Назад (По умолчанию) Включение отбраковки задней поверхности. Для повышения производительности отрисовки отбраковку задней поверхности следует включать как можно чаще.

Основные карты

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

Для повышения паритета с шейдером Unity Standard значения металлического отлива, гладкости, излучения и поглощения можно контролировать с помощью упаковки каналов.

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

Channel Свойство
Красный Металлик
Зеленый Загораживание
Синий Излучение (оттенки серого цвета)
Коэффициент альфа Гладкость

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

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

Суперсглаживание выборки следует использовать для любых материалов, для которых отображается значок или изображение, где расстояние между элементами имеет важное значение.

Параметры отрисовки

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

Сравнения освещения

Параметры Fluent

Fluent — это платформа проектирования, используемая в компонентах пользовательского интерфейса в продуктах Майкрософт. В этом разделе содержится несколько функций, которые помогают эмулировать принципы системы проектирования Fluent на произвольных поверхностях. Если вам требуются определенные шейдеры Fluent, обратитесь к пространство имен шейдеров Graphics Tools/Холст и Graphics Tools/Не холст.

Расширенные параметры

Аналогичны разделу расширенных параметров во встроенных шейдерах Unity. В этом разделе находятся параметры управления порядком отрисовки и вариантами создания экземпляров GPU. Кроме того, имеется поддержка настраиваемого теста трафарета для достижения широкого спектра эффектов. Например, порталы:

Пример с порталом

Освещение

Шейдеры Graphics Tools/Стандартный и Graphics Tools/Стандартный холст используют простую аппроксимацию для освещения. Поскольку шейдеры не вычисляют физическую корректность и сохранение энергии, они быстро и эффективно отрисовываются. Модель отражения Блинна – Фонга является основным методом освещения, который используется, и смешивается с освещением на основе линзы Френеля и изображения для аппроксимации физического освещения. Шейдеры поддерживают следующие методы освещения:

Направленное освещение

Шейдер будет учитывать направление, цвет и интенсивность первого направленного освещения Unity в сцене (если включено).

Важно!

Динамический точечный свет, прожекторы или любой другой свет Unity не будут учитываться при освещении в режиме реального времени. В настоящее время световые маски не поддерживаются.

Сферические гармоники

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

Важно!

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

Карты освещения

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

Производительность

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

Совет

Как правило, стандартный шейдер Graphics Tools следует использовать поверх встроенных шейдеров на мобильных устройствах смешанной реальности. Однако всегда разумно профилировать свой сценарий с помощью таких средств, как RenderDoc.

См. также раздел