Стандартный шейдер MRTK

Standard shader examples

Система заливки MRTK уровня "Стандартный" использует один гибкий шейдер, который может достичь визуальных элементов, аналогичных стандартному шейдеру Unity, реализации система Fluent Design принципов и обеспечения производительности на устройствах смешанной реальности.

Примеры сцен

Примеры материалов шейдера можно найти в сцене MaterialGallery в разделе MRTK/Examples/Demos/StandardShader/Scenes/. Все материалы в этой сцене используют шейдер MRTK/Standard.

Material Gallery

Сцену сравнения можно найти для сравнения и тестирования шейдера MRTK/Standard с примером шейдера Unity или Standard в сцене StandardMaterialComparison в разделе MRTK/Examples/Demos/StandardShader/Scenes/.

Material Comparison

Архитектура

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

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

Для шейдера MixedRealityStandardShaderGUI.csMRTK/Standard существует пользовательский инспектор материалов. Инспектор автоматически включает и отключает функции шейдера на основе выбора пользователей и помощников при настройке состояния отрисовки. Для получения дополнительных сведений о каждой функции наведите указатель мыши на каждое свойство в редакторе Unity для подсказки.

Material Inspector

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

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

Rendering Modes

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

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

Одним из основных преимуществ использования стандартного шейдера MRTK по сравнению со стандартным шейдером Unity является производительность. Стандартный шейдер MRTK можно использовать только включенные функции. Тем не менее, шейдер MRTK Standard также был написан для доставки сопоставимых эстетических результатов, как шейдер Unity Standard, но с гораздо более низкой стоимостью. Одним из простых способов сравнения производительности шейдера является количество операций, которые необходимо выполнить на GPU. Конечно, величина вычислений может меняться по включенным функциям и другим конфигурациям отрисовки. Но в целом шейдер MRTK standard выполняет значительно меньше вычислений, чем шейдер Unity Standard.

Пример статистики шейдеров уровня "Стандартный" в Unity

Unity Standard Shader Statistics

Пример статистики шейдеров MRTK уровня "Стандартный"

MRTK Standard Shader Statistics

Примечание

Эти результаты можно создать, выбрав и просмотрев ресурс шейдера в инспекторе Unity, а затем нажмите кнопку "Компиляция и показать код ".

Освещение

MRTK/Standard использует простое приближение для освещения. Поскольку этот шейдер не вычисляет физическую правильность и экономию энергии, он быстро и эффективно отображается. Blinn-Phong является основным методом освещения, который смешивается с Френелем и освещением на основе изображений, чтобы приблизить физическое освещение. Шейдер поддерживает следующие методы освещения:

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

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

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

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

Облегчаемая маска

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

HoverLight

ProximityLight

Поддержка конвейера упрощенной отрисовки с возможностью создания скриптов

MRTK содержит путь обновления, позволяющий разработчикам использовать упрощенный конвейер отрисовки (LWRP) Unity с шейдерами MRTK. Протестировано в пакете Unity 2019.1.1f1 и упрощенном пакете RP 5.7.2. или инструкции по началу работы с LWRP см. на этой странице.

Чтобы выполнить обновление MRTK, выберите: Смешанная реальность набор средств — служебные программы —>> обновление стандартного шейдера MRTK для упрощенного конвейера отрисовки

lwrp upgrade

После обновления шейдер MRTK/Standard будет изменен, и все материалы шейдера (ошибка шейдера) должны быть исправлены. Чтобы убедиться, что обновление выполнено успешно, проверьте в консоли обновленные ресурсы/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader для использования с упрощенным конвейером отрисовки.

Поддержка UGUI

Стандартная система заливки MRTK работает со встроенной системой пользовательского интерфейса Unity. В компонентах пользовательского интерфейса Unity матрица unity_ObjectToWorld не является матрицей преобразования локального преобразования, на которую находится графический компонент, а на родительском холсте. Для многих эффектов шейдера MRTK/Standard требуется известный масштаб объектов. Чтобы решить эту проблему, данные ScaleMeshEffect.cs масштабирования будут храниться в атрибутах канала UV во время построения сетки пользовательского интерфейса.

Обратите внимание, что при использовании компонента образа Unity рекомендуется указать "None (Sprite)" для исходного образа, чтобы пользовательский интерфейс Unity не создавал дополнительные вершины.

Холст в MRTK запросит добавление элемента, ScaleMeshEffect.cs если требуется:

scale mesh effect

Комбинатор текстур

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

channel map example

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

Канал Свойство
Красный Металлические
Зеленый Загораживание
Синий Выбросы (серая шкала)
Коэффициент альфа Гладкость

Кроме того, можно использовать средство объединения текстур MRTK. Чтобы открыть средство, выберите : Смешанная реальность набор средств —> Служебные программы —> комбинатор текстур, который откроет следующее окно:

texture combiner example

Это окно можно автоматически заполнить, выбрав стандартный шейдер Unity и щелкнув "Автозаполнения из стандартного материала". Кроме того, можно вручную указать текстуру (или постоянное значение) на красный, зеленый, синий или альфа-канал. Сочетание текстур является ускорением GPU и не требует, чтобы входная текстура была доступна для ЦП.

Дополнительная документация по функциям

Ниже приведены дополнительные сведения о нескольких компонентах, доступных с помощью шейдера MRTK/Standard.

Обрезка примитивов

primitive clipping

Mesh контуры

Многие методы структуры сетки выполняются с помощью метода постобработки . Постобработка обеспечивает отличные качественные контуры, но может быть запрещено дорого на многих Смешанная реальность устройствах. Сцену, демонстрирующую использование контуров сетки, можно найти в сцене OutlineExamples в разделе MRTK/Examples/Demos/StandardShader/Scenes/.

Mesh Outline

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

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

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

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

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

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

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

stencil test

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

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

instanced properties

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

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

triplanar

Экструзия вершин

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

normal map scale 1

Прочее

Флажок для управления оптимизацией albedo. При отключении операций оптимизации albedo при отсутствии текстуры albedo. Это полезно для управления удаленной загрузкой текстур.

Просто установите этот флажок:

albedo assignment

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

normal map scale 2

См. также