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


Материалы PBR

Материалы PBR — это один из поддерживаемых типов материалов в службе Удаленной отрисовки Azure. Они используются для треугольных сеток , которые должны получать реалистичное освещение. С другой стороны, облака точек не влияют на динамическое освещение.

PBR расшифровывается как Physically Based Rendering (физически верная отрисовка) и означает, что материал описывает визуальные свойства поверхности в соответствии с реальным физическим миром, так что при любых условиях освещения результат будет выглядеть реалистично. Большинство современных игровых двигателей и средств создания контента поддерживают материалы PBR, так как они считаются лучшим приближением реальных сценариев для отрисовки в режиме реального времени.

Модель примера шлема glTF, отрисованного службой Удаленной отрисовки Azure

Основная идея физически верной отрисовки заключается в использовании свойств BaseColor, Metalness и Roughness для имитации широкого спектра реальных материалов. В рамках этой статьи мы не будем подробно рассматривать PBR. Дополнительные сведения о PBR см. в других источниках.

Материалы PBR не являются универсальным решением, хотя. Существуют материалы, отражающие цвет иначе в зависимости от угла обзора. Например, некоторые ткани или краска для автомобилей. Эти виды материалов не обрабатываются стандартной моделью PBR и в настоящее время не поддерживаются azure Удаленная отрисовка. Это ограничение включает расширения PBR, такие как тонкие пленки (многоуровневые поверхности) и Clear-Coat (для автомобильных краски).

Свойства материала PBR

Следующие свойства материала предоставляются в API среды выполнения, например в классе C# Pbr Material или в классе C++ Pbr Material соответственно.

  • PbrFlags: флаги функций misc можно объединить в этой битовой маске, чтобы включить следующие функции:

    • TransparentMaterial: Для материалов PBR существует только один параметр прозрачности: он включен или нет. Непрозрачность определяется альфа-каналом цвета альбедо. При включении вызывается более сложный метод отрисовки для рисования полупрозрачных поверхностей. Удаленная отрисовка Azure реализует настоящую порядко-независимую прозрачность (OIT). Отрисовка прозрачной геометрии требует очень много ресурсов. Если вам нужны только отверстия на поверхности, например для листьев дерева, лучше использовать альфа-вырезку.

    Сферы, отрисованные с нулем до полной прозрачности Обратите внимание на приведенное выше изображение, как правая часть сферы полностью прозрачна, но отражение по-прежнему видно.

    Внимание

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

    • UseVertexColor: если сетка содержит vertex цвета и этот параметр включен, цвет сетки vertex умножается на AlbedoColor и AlbedoMap. По умолчанию UseVertexColor отключен.
    • DoubleSided: Если двусторонность имеет значение true, треугольники с этим материалом отрисовываются, даже если камера смотрит на их задние лица. Для материалов PBR освещение также корректно вычисляется для задних граней. Этот параметр по умолчанию отключен. См. также Single-sided rendering.
    • SpecularHighlights: включает зрителя для этого материала. По умолчанию SpecularHighlights флаг включен.
    • AlphaClipped: включает жесткие вырезания на пиксель на основе альфа-значения ниже значения AlphaClipThreshold (см. ниже). Это работает для непрозрачных материалов, а также.
    • FresnelEffect: Этот флаг материала обеспечивает эффект аддитивного френеля на соответствующий материал. Внешний вид эффекта регулируется другими параметрами FresnelEffectColor fresnel и FresnelEffectExponent описано ниже.
    • TransparencyWritesDepth: если TransparencyWritesDepth флаг установлен на материале и материал прозрачный, объекты, использующие этот материал, также будут способствовать окончательному буферу глубины. См. флаг материала PBR transparent в следующем разделе. Включение этой функции рекомендуется, если для вашего сценария требуется более правдоподобное перепроецирование на поздних этапах полностью прозрачных сцен. Для смешанных прозрачных и непрозрачных сцен этот параметр может привести к нереалистичному поведению перепроецирования или неправдоподобным артефактам перепроецирования. По этой причине значение по умолчанию и рекомендуемый вариант для универсальных сценариев — отключить этот флаг. Записанные значения глубины взяты из попиксельного уровня глубины объекта, расположенного ближе всего к камере.
  • AlbedoColor: этот цвет умножается на другие цвета, например AlbedoMap цвета или vertex цвета. Если в материале включена прозрачность, альфа-канал используется для настройки непрозрачности, где 1 — полностью непрозрачный, а 0 — полностью прозрачный. Цвет albedo по умолчанию непрозрачный белый.

    Примечание.

    Когда материал PBR полностью прозрачный, как идеально чистая стеклянная поверхность, она по-прежнему отражает окружающую среду. Яркие участки, например солнце, по-прежнему видны в отражении. Цветовые материалы ведут себя иначе.

  • AlbedoMap: 2D-текстура для значений альбэдо на пиксель.

  • AlphaClipThreshold: если AlphaClipped флаг задан в свойстве PbrFlags , все пиксели, где альфа-значение albedo меньше, чем AlphaClipThreshold не будет вырисовано. Альфа-обрезание можно использовать даже без включения прозрачности, и его гораздо быстрее отрисовать. Тем не менее материалы с альфа-обрезкой по-прежнему медленнее отрисовываются, чем полностью непрозрачные материалы. По умолчанию альфа-обрезка отключена.

  • TexCoordScale и TexCoordOffset: масштабирование умножается на координаты текстуры UV, смещение добавляется к нему. Можно использовать для растяжения и сдвига текстур. Масштаб по умолчанию — (1, 1), а смещение — (0, 0).

  • FresnelEffectColor: цвет френеля, используемый для этого материала. Важно только при установке флага эффекта френеля на этом материале (см. выше). Это свойство управляет базовым цветом сияния Френеля (подробные сведения см. в разделе Эффект Френеля). В настоящее время важны только значения RGB-канала, и альфа-значение будет игнорироваться.

  • FresnelEffectExponent: экспонент fresnel, используемый для этого материала. Важно только при установке флага эффекта френеля на этом материале (см. выше). Это свойство управляет распространением сияния Френеля. Минимальное значение 0,01 приводит к распространению по всему объекту. Максимальное значение 10,0 сжимает блеск только наиболее пасущихся краев, видимых.

  • PbrVertexAlphaMode: определяет, как используется альфа-канал цветов вершин. Предоставляются следующие режимы:

    • Occlusion: альфа-значение представляет значение внешнего окклюзии и, следовательно, влияет только на косвенное освещение из неба.
    • LightMask: альфа-значение служит коэффициентом масштабирования для общего объема примененного освещения, то есть альфа-значение может использоваться для темных областей. Это влияет как на косвенное, так и прямое освещение.
    • Opacity: Альфа представляет, как непрозрачный (1.0) или прозрачный (0,0) материал.
  • NormalMap: Чтобы имитировать подробные детали, можно предоставить обычную карту .

  • NormalMapScale: скалярное значение, которое масштабирует нормальную силу карты. Значение 1.0 принимает обычное значение карты как есть, значение 0 делает поверхность плоской. Значения, превышающие 1,0, преувеличивают нормальную пертурбацию карты.

  • Roughness и RoughnessMap: грубость определяет, насколько шероховато или гладко поверхности. Неровная поверхность отражает свет в большем количестве направлений, чем гладкая, поэтому отражения выглядят размытыми, а не четкими. Диапазон значений — от 0.0 до 1.0. Если значение Roughness равно 0.0, отражения будут четкими. Если значение Roughness равно 0.5, отражения будут размытыми. Если одновременно указаны значение неровности и схема неровности, итоговое значение будет являться их произведением.

  • Metalness и MetalnessMap: в физике это свойство соответствует ли поверхность проводяющей или диэлектрической. У проводящих материалов другие отражающие свойства, и они, как правило, могут отражать свет без цвета альбедо. В материалах PBR это свойство влияет на то, насколько поверхность отражает окружающую среду. Допустимы значения от 0.0 до 1.0. Когда металличность 0.0, цвет альбэдо полностью виден, и материал выглядит как пластик или керамика. Когда свойство металличности имеет значение 0.5, материал выглядит как окрашенный металл. Когда металличность 1.0, поверхность почти полностью теряет свой цвет альбэдо, и только отражает окружающую среду. Например, если metalness имеет значение 1.0, а roughness — 0.0, поверхность выглядит как настоящее зеркало. Если одновременно указаны значение металличности и схема металличности, итоговое значение будет являться их произведением.

    Сферы, отрисованные с разными значениями металличности и неровности

    На рисунке выше сфера в правом нижнем углу выглядит как реальный металл, а в левом нижнем углу — как керамика или пластик. Цвет альбедо также изменяется в соответствии с физическими свойствами. При увеличении неровности материал теряет четкость отражения.

  • AOMap и AOScale: внешний окклюзион делает объекты с трещинами выглядеть более реалистично, добавляя тени в occluded области. Значение затемнения имеет диапазон от 0.0 до 1.0, где 0.0 означает полное затемнение, а 1.0 — его отсутствие. Если 2D-текстура предоставляется как карта окклюзии, эффект включен и AOScale действует в качестве умножения.

    Объект, отрисованный с фоновым затемнением и без него

Переопределение цветового материала во время преобразования

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

Имя свойства материала Имя свойства в переопределении файла
PbrFlags.TransparentMaterial transparent
PbrFlags.AlphaClipped alphaClipEnabled
PbrFlags.UseVertexColor useVertexColor
PbrFlags.DoubleSided isDoubleSided
PbrFlags.TransparencyWritesDepth transparencyWritesDepth
AlbedoColor albedoColor
TexCoordScale textureCoordinateScale
TexCoordOffset textureCoordinateOffset
NormalmapScale normalMapScale
Metalness metalness
Roughness roughness
AlphaClipThreshold alphaClipThreshold

Технические сведения

Удаленная отрисовка Azure использует модель BRDF микрограней Кука — Торренса с GGX NDF, апроксимацию Шлика для Френеля, функцию видимости Смита GGX и ламбертовское рассеяние. В настоящее время эта модель представляет собой промышленный стандарт. Более подробные сведения см. в этой статье: Физически верная отрисовка: Кук — Торренс

Альтернатива модели PBR металличности и неровности, используемой в Удаленной отрисовке Azure, — модель PBR зеркальности и глянца. Эта модель может представлять более широкий спектр материалов. Тем не менее, это дороже, и обычно не работает хорошо для случаев реального времени. Невозможно преобразовать из Specular-Glossiness в Metalness-Шероховатость, так как есть (диффузные, спекулярные) пары значений, которые не могут быть преобразованы в (BaseColor, Metalness). Преобразование в обратном направлении выполняется проще и точнее, поскольку все пары (BaseColor, Metalness) соответствуют хорошо определенным парам (Diffuse, Specular).

Документация по API

Следующие шаги