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


Сопоставление материалов для форматов модели

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

В этой статье приводятся точные сопоставления, используемые для преобразования материалов исходных ресурсов в материалы среды выполнения.

glTF

Практически все параметры спецификации glTF 2.0 поддерживаются службой удаленной отрисовки Azure, за исключением EmissiveFactor и EmissiveTexture.

Сопоставление показано в следующей таблице.

glTF Удаленная отрисовка Azure
baseColorFactor albedoColor
baseColorTexture albedoMap
metallicFactor metalness
metallicTexture metalnessMap
roughnessFactor roughness
roughnessTexture roughnessMap
occlusionFactor occlusion
occlusionTexture occlusionMap
normalTexture normalMap
normalTextureInfo.scale normalMapScale
alphaCutoff alphaClipThreshold
alphaMode.OPAQUE alphaClipEnabled = false, isTransparent = false
alphaMode.MASK alphaClipEnabled = true, isTransparent = false
alphaMode.BLEND isTransparent = true
doubleSided isDoubleSided
emissiveFactor -
emissiveTexture -

Каждая текстура glTF может иметь значение texCoord, также поддерживаемое в материалах удаленной отрисовки Azure.

Встроенные текстуры

Поддерживаются текстуры, внедренные в файлы *.bin или *.glb .

Поддерживаемое расширение glTF

Кроме базового набора функций, служба удаленной отрисовки Azure поддерживает следующие расширения glTF:

  • MSFT_packing_occlusionRoughnessMetallic
  • KHR_materials_unlit: соответствует цветным материалам. Это расширение рекомендуется использовать для излучающих материалов.
  • KHR_materials_pbrSpecularGlossiness: вместо шероховатых металлических можно воспользоваться рассеивающими зеркально-глянцевыми текстурами. Реализация удаленной отрисовки Azure вытекает из формул преобразования на основе расширения.

FBX

Формат FBX является закрытым источником, и материалы FBX не совместимы с материалами PBR в целом. В FBX используется сложное описание поверхностей со множеством уникальных параметров и свойств, не все из которых используются конвейером удаленной отрисовки Azure.

Важно!

Конвейер преобразования модели удаленной отрисовки Azure поддерживает только FBX 2011 и более поздние версии.

Формат FBX определяет консервативный подход к материалам. В официальной спецификации FBX существуют только два типа освещения:

  • Ламберт — не часто используется уже некоторое время, но он по-прежнему поддерживается путем преобразования в Phong во время преобразования.
  • По методу Фонга — данный тип используется почти для всех материалов и большинства средств для работы с содержимым.

Модель Phong является более точной, и она используется в качестве единственной модели для материалов FBX. Далее она рассматривается как материал FBX.

В приложении Maya используются два пользовательских расширения для FBX благодаря определению пользовательских свойств для типов материалов PBR и Stingray. Эти сведения не включены в спецификацию FBX и в настоящее время не поддерживаются службой удаленной отрисовки Azure.

Материалы FBX используют концепцию уровня рассеивающего зеркального отражения Diffuse-Specular-SpecularLevel, поэтому для преобразования рассеивающей текстуры в карту Аlbedo необходимо вычислить другие параметры, чтобы убрать их из диффузии.

Все цвета и текстуры FBX находятся в пространстве sRGB (известном как гамма-пространство), но во время визуализации Служба удаленной отрисовки Azure работает с линейным пространством и в конце фрейма преобразует все обратно в пространство sRGB. Конвейер ресурсов удаленной отрисовки Azure преобразует все данные в линейное пространство для отправки в отрисовщик.

В таблице приведено сопоставление текстур материалов FBX с материалами удаленной отрисовки Azure. Некоторые из них не используются напрямую, но в сочетании с другими текстурами, участвующими в формулах (например, диффузная текстура):

FBX Удаленная отрисовка Azure
AmbientColor Occlusion Map
DiffuseColor используется для Аlbedo, металлических свойств
TransparentColor используется для альфа-канала Аlbedo
TransparencyFactor используется для альфа-канала Аlbedo
Непрозрачность используется для альфа-канала Аlbedo
SpecularColor используется для Аlbedo, металлических свойств, шероховатости
SpecularFactor используется для Аlbedo, металлических свойств, шероховатости
ShininessExponent используется для Аlbedo, металлических свойств, шероховатости
NormalMap NormalMap
Bump преобразуется в NormalMap
EmissiveColor -
EmissiveFactor -
ReflectionColor -
DisplacementColor -

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

Некоторые используемые ниже определения:

  • Specular = SpecularColor * SpecularFactor
  • SpecularIntensity = Specular.Red ∗ 0.2125 + Specular.Green ∗ 0.7154 + Specular.Blue ∗ 0.0721
  • DiffuseBrightness = 0.299 * Diffuse.Red2 + 0.587 * Diffuse.Green2 + 0.114 * Diffuse.Blue2
  • SpecularBrightness = 0.299 * Specular.Red2 + 0.587 * Specular.Green2 + 0.114 * Specular.Blue2
  • SpecularStrength = max(Specular.Red, Specular.Green, Specular.Blue)

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

Неровность

Roughness вычисляется на основе Specular и ShininessExponent посредством этой формулы. Формула является аппроксимацией шероховатости экспоненты по методу Фонга:

Roughness = sqrt(2 / (ShininessExponent * SpecularIntensity + 2))

Металлические свойства

Metalness вычисляется на основе Diffuse и Specular посредством этой формулы из спецификации glTF.

Идея заключается в том, что мы решаем уравнение: Ax2 + Bx + C = 0. Диэлектрические поверхности отражают примерно 4% света, а остальной свет рассеивается. Металлические поверхности не рассеивают свет, а только отражают. Эта формула имеет несколько недостатков, потому что нет способа различать глянцевые пластиковые и глянцевые металлические поверхности. Мы предполагаем, что большая часть времени поверхность имеет металлические свойства, и поэтому глянцевые пластиковые или резиновые поверхности могут не выглядеть должным образом.

dielectricSpecularReflectance = 0.04
oneMinusSpecularStrength = 1 - SpecularStrength

A = dielectricSpecularReflectance
B = (DiffuseBrightness * (oneMinusSpecularStrength / (1 - A)) + SpecularBrightness) - 2 * A
C = A - SpecularBrightness
squareRoot = sqrt(max(0.0, B * B - 4 * A * C))
value = (-B + squareRoot) / (2 * A)
Metalness = clamp(value, 0.0, 1.0);

Albedo

Albedo вычисляется на основе Diffuse, Specular и Metalness .

Как упоминалось в разделе "Металлические свойства", диэлектрические поверхности отражают примерно 4% света.
Суть заключается в линейной интерполяции цветов Dielectric и Metal с использованием в качестве коэффициента значения Metalness. Если металличность имеет 0.0значение, то в зависимости от спектра он будет либо темным цветом (если спектрулярный высокий), либо диффузный не изменится (если не присутствует зрителя). При большом значении металлических свойств рассеивающий цвет практически отсутствует, а преобладает отражающий цвет.

dielectricSpecularReflectance = 0.04
oneMinusSpecularStrength = 1 - SpecularStrength

dielectricColor = diffuseColor * (oneMinusSpecularStrength / (1.0f - dielectricSpecularReflectance) / max(1e-4, 1.0 - metalness))
metalColor = (Specular - dielectricSpecularReflectance * (1.0 - metalness)) * (1.0 / max(1e-4, metalness))
albedoRawColor = lerpColors(dielectricColor, metalColor, metalness * metalness)
AlbedoRGB = clamp(albedoRawColor, 0.0, 1.0);

AlbedoRGB вычисляется формулой выше, но альфа-канал требует больше вычислений. В формате FBX нет четкого определения прозрачности. Его можно задать разными способами. Для разных средств для работы с содержимым используются различные методы. Суть заключается в объединении их в одну формулу. При этом некоторые ресурсы неправильно отображаются как прозрачные, однако, если они не создаются обычным образом.

Это вычисляется на основе TransparentColor, TransparencyFactor, Opacity:

Если задано свойство Opacity, используйте его напрямую: AlbedoAlpha = Opacity else
If TransparencyColor is defined, then AlbedoAlpha = 1.0 - ((TransparentColor.BlueTransparentColor.Red + TransparentColor.Green + ) / 3.0) else
Если задано свойство TransparencyFactor, то AlbedoAlpha = 1.0 - TransparencyFactor

Окончательный цвет Albedo имеет четыре канала, объединяющих AlbedoRGB с AlbedoAlpha.

Итоги

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

Известные проблемы

  • Текущая формула не работает хорошо для простой цветной геометрии. При большом значении Specular все геометрические объекты становятся отражающими металлическими поверхностями без какого-либо цвета. Обходной путь в этом случае — снизить Specular до 30 % от исходного или использовать параметр преобразования fbxAssumeIteic.
  • Материалы PBR недавно добавлены в средства для создания содержимого Maya и 3DS Max. Они используют настраиваемые пользовательские свойства "черного ящика" для передачи в FBX. Azure Удаленная отрисовка не считывает эти свойства, так как они не документируются и формат является закрытым источником.

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