Поделиться через


Стандартный шейдер 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 Уровня "Стандартный"

Статистика стандартного шейдера Unity

Пример статистики шейдера MRTK Standard

Статистика стандартного шейдера MRTK

Примечание

Эти результаты можно создать, выбрав и просмотрев ресурс шейдера в инспекторе 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 для упрощенного конвейера отрисовки.

обновление lwrp

После обновления шейдер 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. Материалы структуры обычно имеют сплошной цвет, но их можно настроить для достижения широкого спектра эффектов. Конфигурация материала структуры по умолчанию выглядит следующим образом:

Материал структуры сетки
  1. Запись в глубину — должна быть отключена для материалов структуры, чтобы гарантировать, что структура не препятствует отрисовке других объектов.
  2. Вершина экструдинования — необходимо включить для отрисовки структуры.
  3. Используйте Smooth Normals — этот параметр является дополнительным для некоторых сеток. Экструдирование происходит путем перемещения вершины вдоль нормали вершины, на некоторых сетках экструдирование вдоль нормалей по умолчанию приведет к разрыву в структуре. Чтобы устранить эти несоответствия, можно проверка это поле для использования другого набора сглаженных норм, которые создаютсяMeshSmoother.cs

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

Структура гладких норм
  1. Гладкие нормы, созданные с помощью MeshSmoother.cs.
  2. Используемые по умолчанию нормы. Обратите внимание на артефакты по углам куба.

Тестирование набора элементов

Встроенная поддержка настраиваемого теста набора элементов для достижения широкого спектра эффектов. Например, порталы:

тест набора элементов

Поддержка экземпляров цветов

Поддержка экземпляров цвета для предоставления тысячам уникальных свойств материала для сеток с экземплярами GPU:

свойства экземпляра

Сопоставление трипланаров

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

triplanar

Выдавливание вершин

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

обычный масштаб карты 1

Прочее

Флажок для управления оптимизацией альбедо. Как операции оптимизации альбедо отключаются, если текстура альбедо не указана. Это полезно для управления удаленной загрузкой текстур.

Просто проверка это поле:

назначение albedo

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

обычный масштаб карты 2

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