Стандартный шейдер MRTK2
Стандартная система заливки MRTK2 использует единый гибкий шейдер, который может создавать визуальные элементы, аналогичные стандартному шейдеру Unity, реализовывать принципы система Fluent Design и оставаться производительным на устройствах смешанной реальности.
Примеры сцен
Примеры материалов шейдеров можно найти в сцене MaterialGallery в разделе MRTK/Examples/Demos/StandardShader/Scenes/
. Все материалы в этой сцене используют шейдер MRTK/Standard.
Сцену сравнения для сравнения и тестирования шейдера MRTK/Standard с примером шейдера Unity/Standard можно найти в сцене StandardMaterialComparison в разделе MRTK/Examples/Demos/StandardShader/Scenes/
.
Архитектура
Система заливки MRTK/Standard — это шейдер uber, который использует функцию шейдера Unity для автоматического создания оптимального кода шейдера на основе свойств материала. Когда пользователь выбирает свойства материала в инспекторе материалов, он несет затраты только на производительность для включенных функций.
Инспектор материалов
Существует пользовательский инспектор материалов для шейдера MRTK/Standard с именем MixedRealityStandardShaderGUI.cs
. Инспектор автоматически включает или отключает функции шейдера на основе выбора пользователя и помогает в настройке состояния отрисовки. Чтобы получить дополнительные сведения о каждой функции, наведите указатель мыши на каждое свойство в редакторе Unity для подсказки.
В первой области инспектора находятся элементы для управления состоянием отрисовки материала. Режим отрисовки определяет, когда и как будет отображаться материал. Цель шейдера MRTK/Standard — зеркало режимов отрисовки в шейдере Unity/Standard. Шейдер MRTK/Standard также включает режим аддитивной отрисовки и режим пользовательской отрисовки для полного контроля пользователем.
Режим отрисовки | Описание |
---|---|
Непрозрачный | (По умолчанию) Подходит для обычных сплошных объектов без прозрачных областей. |
Вырезка | Позволяет создавать прозрачные эффекты с резкими границами между непрозрачными и прозрачными областями. В этом режиме нет полупрозрачных областей, текстура полностью непрозрачна или невидима. Этот режим полезен при использовании прозрачности для создания формы материалов, таких как растительность. |
Исчезание | Позволяет значениям прозрачности полностью исчезать объект, включая любые зеркальные выделения или отражения, которые он может иметь. Этот режим полезен, если вы хотите анимировать исчезающую или исчезающую анимацию объекта. Он не подходит для отрисовки реалистичных прозрачных материалов, таких как прозрачный пластик или стекло, потому что отражения и блики также будут выцветает. |
Прозрачный режим | Подходит для отрисовки реалистичных прозрачных материалов, таких как прозрачная пластмасса или стекло. В этом режиме сам материал будет принимать значения прозрачности (на основе альфа-канала текстуры и альфа цвета оттенка). Однако отражение и блики от освещения будут оставаться видимыми целиком, как в случае с реальными прозрачными материалами. |
Аддитивный | Включает режим аддитивного смешивания, который объединяет цвет предыдущего пикселя с цветом текущего пикселя. Это предпочтительный режим прозрачности, позволяющий избежать проблем с сортировкой параметров прозрачности. |
Другой | Позволяет управлять каждым аспектом режима отрисовки вручную. Только для опытных пользователей. |
Режим отбраковки | Описание |
---|---|
Выключено | Отключает отбраковку поверхностей. Отбраковку следует отключать только в том случае, если требуется двухсторонняя сетка. |
Front | Включение отбраковки лицевой поверхности. |
Назад | (По умолчанию) Включение отбраковки задней поверхности. Для повышения производительности отрисовки отбраковку задней поверхности следует включать как можно чаще. |
Производительность
Одним из основных преимуществ использования стандартного шейдера MRTK по сравнению со стандартным шейдером Unity является производительность. Стандартный шейдер MRTK расширяем для использования только включенных функций. Тем не менее, шейдер MRTK Standard также был написан для обеспечения сопоставимых эстетических результатов, как шейдер Unity Standard, но по гораздо более низкой цене. Одним из простых способов сравнения производительности шейдера является количество операций, которые необходимо выполнить с GPU. Конечно, величина вычислений может колебаться в зависимости от включенных функций и других конфигураций отрисовки. Но в целом шейдер MRTK Standard выполняет значительно меньше вычислений, чем шейдер Unity Standard.
Пример статистики шейдера Unity Уровня "Стандартный"
Пример статистики шейдера MRTK Standard
Примечание
Эти результаты можно создать, выбрав и просмотрев ресурс шейдера в инспекторе Unity, а затем нажав кнопку Скомпилировать и показать код .
Освещение
MRTK/Standard использует простое приближение для освещения. Поскольку этот шейдер не вычисляет физическую правильность и экономию энергии, он отрисовывается быстро и эффективно. Blinn-Phong является основным методом освещения, который смешивается с френелем и освещением на основе изображений, чтобы приблизить физическое освещение. Шейдер поддерживает следующие методы освещения:
Направленное освещение
Шейдер будет учитывать направление, цвет и интенсивность первого направленного освещения Unity в сцене (если включено). Динамические точечные огни, точечные огни или любой другой свет Unity не будут учитываться при освещении в режиме реального времени.
Сферические гармоники
Шейдер будет использовать пробы света для приближения света в сцене с помощью сферических гармоник, если они включены. Вычисления сферических гармоник выполняются для каждой вершины, чтобы снизить затраты на вычисление.
Карты освещения
Для статического освещения шейдер будет учитывать карты света, созданные системой lightmapping в Unity. Просто пометьте отрисовщик как статический (или lightmap static), чтобы использовать карты освещения.
HoverLight
- См. раздел Индикатор наведении
ProximityLight
Поддержка упрощенного конвейера отрисовки с поддержкой скриптов
MRTK содержит путь обновления, позволяющий разработчикам использовать упрощенный конвейер отрисовки (LWRP) Unity с шейдерами MRTK. Протестировано в Unity 2019.1.1f1 и упрощенном пакете RP 5.7.2. Инструкции по началу работы с LWRP см. на этой странице.
Чтобы выполнить обновление MRTK, выберите: Смешанная реальность Toolkit —> Служебные программы —> Обновление стандартного шейдера MRTK для упрощенного конвейера отрисовки.
После обновления шейдер MRTK/Standard будет изменен и все пурпурные материалы (ошибка шейдера) должны быть исправлены. Чтобы убедиться, что обновление выполнено успешно, проверка консоли для: Upgraded Assets/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader для использования с упрощенным конвейером отрисовки.
Поддержка UGUI
Стандартная система заливки MRTK работает со встроенной системой пользовательского интерфейса Unity. В компонентах пользовательского интерфейса Unity матрица unity_ObjectToWorld не является матрицей преобразования локального преобразования графического компонента, а матрицей его родительского Canvas. Для многих эффектов шейдера MRTK и стандартных требуется, чтобы масштаб объектов был известен. Для решения этой проблемы ScaleMeshEffect.cs
сохраняет сведения о масштабировании в атрибутах канала UV во время создания сетки пользовательского интерфейса.
Обратите внимание, что при использовании компонента образа Unity рекомендуется указать значение None (Sprite)" для исходного образа, чтобы предотвратить создание дополнительных вершин в пользовательском интерфейсе Unity.
Canvas в MRTK запрашивает добавление ScaleMeshEffect.cs
, если он требуется:
Комбинатор текстур
Для повышения паритета с шейдером Unity Standard значения металлического отлива, гладкости, излучения и поглощения можно контролировать с помощью упаковки каналов. Пример:
При использовании упаковки каналов необходимо лишь выполнить выборку и загрузку одной текстуры в память вместо четырех отдельных текстур. При написании карт текстур в программе, такой как Substance или Photoshop, вы можете упаковать их следующим образом:
Channel | Свойство |
---|---|
Красный | Металлик |
Зеленый | Загораживание |
Синий | Излучение (оттенки серого цвета) |
Коэффициент альфа | Гладкость |
Также можно использовать средство объединения текстур MRTK. Чтобы открыть средство, выберите Смешанная реальность Toolkit —> Utilities —> Texture Combiner, чтобы открыть следующее окно:
Это окно можно заполнить автоматически, выбрав шейдер Unity Standard и нажав кнопку "Автозаполнения из стандартного материала". Или можно вручную указать текстуру (или значение константы) для красного, зеленого, синего или альфа-канала. Сочетание текстур выполняется с ускорением GPU и не требует, чтобы входная текстура была доступна ЦП.
Дополнительная документация по функциям
Ниже приведены дополнительные сведения о нескольких функциях, доступных в шейдере MRTK/Standard.
Примитивное вырезка
Контуры сетки
Для многих методов структуры сетки используется метод постобработки. Постобработка обеспечивает отличное качество структуры, но может быть слишком дорогой на многих Смешанная реальность устройствах. Сцену, демонстрирующую использование контуров сетки, можно найти в сцене OutlineExamples в разделе MRTK/Examples/Demos/StandardShader/Scenes/
.
MeshOutline.cs
и MeshOutlineHierarchy.cs
можно использовать для отрисовки контура вокруг отрисовщика сетки. Включение этого компонента предоставляет дополнительный проход отрисовки для контурируемого объекта, но предназначен для эффективного выполнения на мобильных Смешанная реальность устройствах и не использует никакие пост-процессы. Ограничения этого эффекта включают в себя в том числе то, что он работает недостаточно хорошо c объектами, которые не являются совершенно определенными (или должны иметь две стороны), а также могут возникнуть проблемы с сортировкой глубины при перекрывании объектов.
Поведение структуры предназначено для использования в сочетании с шейдером MRTK/Standard. Материалы структуры обычно имеют сплошной цвет, но их можно настроить для достижения широкого спектра эффектов. Конфигурация материала структуры по умолчанию выглядит следующим образом:
- Запись в глубину — должна быть отключена для материалов структуры, чтобы гарантировать, что структура не препятствует отрисовке других объектов.
- Вершина экструдинования — необходимо включить для отрисовки структуры.
- Используйте Smooth Normals — этот параметр является дополнительным для некоторых сеток. Экструдирование происходит путем перемещения вершины вдоль нормали вершины, на некоторых сетках экструдирование вдоль нормалей по умолчанию приведет к разрыву в структуре. Чтобы устранить эти несоответствия, можно проверка это поле для использования другого набора сглаженных норм, которые создаются
MeshSmoother.cs
MeshSmoother.cs
— это компонент, который можно использовать для автоматического создания сглаживаемых нормалей в сетке. Этот метод группирует вершины в сетке, которая имеет одно и то же расположение в пространстве, а затем усредняет т нормали этих вершин. Данный процесс создает копию основной сетки и должен использоваться только при необходимости.
- Гладкие нормы, созданные с помощью
MeshSmoother.cs
. - Используемые по умолчанию нормы. Обратите внимание на артефакты по углам куба.
Тестирование набора элементов
Встроенная поддержка настраиваемого теста набора элементов для достижения широкого спектра эффектов. Например, порталы:
Поддержка экземпляров цветов
Поддержка экземпляров цвета для предоставления тысячам уникальных свойств материала для сеток с экземплярами GPU:
Сопоставление трипланаров
Трехплоскостное сопоставление — это метод программного наложения текстуры на сетку. Часто используется в местности, сетки без UV или трудно развернуть фигуры. Эта реализация поддерживает проекцию мира или локального пространства, спецификацию смешивания гладкости и поддержку нормальной карты. Обратите внимание, что для каждой используемой текстуры требуется 3 образца текстуры, поэтому используйте экономно в критических ситуациях производительности.
Выдавливание вершин
Выдавливание вершин в мировом пространстве. Полезно для визуализации экструдированных ограничивающих томов или переходов в сетках.
Прочее
Флажок для управления оптимизацией альбедо. Как операции оптимизации альбедо отключаются, если текстура альбедо не указана. Это полезно для управления удаленной загрузкой текстур.
Просто проверка это поле:
Поддерживаются текстуры обрезки по пикселям, локальное сглаживание на основе границ и нормальное масштабирование карты.