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


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

Параметры материала в исходной модели определяют материалы PBR, используемые отрисовщиком. Иногда преобразование по умолчанию не дает желаемых результатов, и вам необходимо внести изменения. Дополнительные сведения см. в разделе "Сопоставление материалов" для форматов моделей.

При преобразовании треугольной сетки для использования в Azure Удаленная отрисовка можно предоставить файл переопределения материала для настройки преобразования материалов на основе каждого материала. Если файл с именем <modelName>. MaterialOverrides.json находится в входном контейнере с именем модели>< ввода.<ext>, он используется в качестве файла переопределения материала.

Файл переопределения, используемый во время преобразования

В качестве простого примера возьмите модель коробки с одним материалом, который называется Default. Его цвет albedo необходимо настроить для использования в Удаленная отрисовка. В этом случае поле . Файл MaterialOverrides.json можно создать следующим образом:

[
    {
        "name": "Default",
        "albedoColor": {
            "r": 0.33,
            "g": 0.33,
            "b": 0.33,
            "a": 1.0
        }
    }
]

Поле . Файл MaterialOverrides.json помещается в входной контейнер с box.fbx, который сообщает службе преобразования применить новые параметры.

Цветовые материалы

Модель цветового материала описывает поверхность с постоянным оттенком, не зависящую от освещения. Цветные материалы полезны, например, для активов, созданных с помощью алгоритмов фотограмметрии. Дополнительные сведения см. в разделе "Цветовые материалы". В файлах переопределения материала материал можно объявить как цветной, установив для unlit значение true.

[
    {
        "name": "Photogrametry_mat1",
        "unlit" : true
    },
    {
        "name": "Photogrametry_mat2",
        "unlit" : true
    }
]

Игнорировать определенные карты текстур

Иногда может потребоваться, чтобы процесс преобразования игнорировал определенные карты текстур. Эта ситуация может произойти, когда модель была создана средством, которое создает специальные карты, не понятные отрисовщику. Например, параметр OpacityMap может использоваться для определения чего-либо, отличного от непрозрачности, или "NormalMap" хранится как "BumpMap". В последнем случае вы хотите игнорировать "NormalMap", что приводит к тому, что преобразователь будет использовать "BumpMap" в качестве "NormalMap".

Добавьте свойство с именем ignoreTextureMaps и добавьте любую карту текстур, которую вы хотите игнорировать:

[
    {
        "name": "Default",
        "ignoreTextureMaps": ["OpacityMap", "NormalMap"]
    }
]

Полный список карт текстур можно игнорировать, см. схему JSON.

Применение одних и тех же переопределений к нескольким материалам

По умолчанию запись в файле переопределения материалов применяется, когда ее имя в точности совпадает с именем материала. Так как обычно одно и то же переопределение должно применяться к нескольким материалам, при необходимости можно указать регулярное выражение в качестве имени записи. Поле nameMatching имеет значение по умолчанию exact, но его можно установить на regex, чтобы указать, что запись должна применяться ко всем совпадающим материалам. Синтаксис регулярного выражения совпадает с синтаксисом, используемым для JavaScript.

Совет

Существуют бесплатные веб-сайты регулярного тестирования, доступные для тестирования и отладки регулярного выражения на произвольные строки.

В следующем примере показано переопределение, которое применяется к материалам с такими именами, как Material2и Material01 Material999.

[
    {
        "name": "Material[0-9]+",
        "nameMatching": "regex",
        "albedoColor": {
            "r": 0.0,
            "g": 0.0,
            "b": 1.0,
            "a": 1.0
        }
    }
]

В этом примере показано переопределение, которое применяется ко всем материалам:

[
    {
        "name": ".*",
        "nameMatching": "regex",
        "albedoColor": {
            "r": 0.0,
            "g": 0.0,
            "b": 1.0,
            "a": 1.0
        }
    }
]

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

  1. Во-первых, он проверяет точное соответствие имени (то есть проверка все переопределения, где nameMatching отсутствует или равноexact).
  2. Если переопределение не найдено, он проверяет все переопределения с regex режимом сопоставления имен и использует первое переопределение, которое соответствует.

Один материал никогда не получает более одного переопределения, даже если несколько regex выражений применяются к имени материала.

Получение сведений о том, какие записи применены

Информационный файл, записанный в выходной контейнер, содержит информацию о количестве предоставленных переопределений и количестве материалов, которые были переопределены. Дополнительные сведения см. в разделе "Сведения о преобразованной модели".

Схема JSON

Полная схема JSON для файлов материалов приведена здесь. unlit ignoreTextureMapsКроме того, доступны свойства являются подмножеством свойств, описанных в разделах о цветовых материалах и моделях материалов PBR.

{
    "definitions" :
    {
        "color":
        {
            "type" : "object",
            "description" : "Color as 4 components vector",
            "properties":
            {
                "r": {"type":"number"},
                "g": {"type":"number"},
                "b": {"type":"number"},
                "a": {"type":"number"}
            },
            "required": ["r", "g", "b"]
        },
        "alpha":
        {
            "type" : "object",
            "description" : "Alpha channel for color",
            "properties":
            {
                "a": {"type":"number"}
            },
            "required": ["a"]
        },
        "colorOrAlpha":
        {
            "anyOf": [
                {"$ref": "#/definitions/color"},
                {"$ref": "#/definitions/alpha"}
            ]
        },
        "listOfMaps":
        {
            "type": "array",
            "items": {
                "type": "string",
                "enum": ["AlbedoMap",
                            "EmissiveMap",
                            "NormalMap",
                            "OcclusionMap",
                            "RoughnessMap",
                            "MetalnessMap",
                            "ReflectivityMap",
                            "BumpMap",
                            "OpacityMap",
                            "DiffuseMap",
                            "SpecularMap",
                            "ShininessMap",
                            "MetallicRoughnessMap",
                            "SpecularGlossinessMap"]
            }
        }
    },
    "type" : "array",
    "description" : "List of materials to override",
    "items":
    {
        "type" : "object",
        "description" : "List of parameters to override",
        "properties":
        {
            "name": { "type" : "string"},
            "nameMatching" : { "type" : "string", "enum" : ["exact", "regex"] },
            "unlit": { "type" : "boolean" },
            "albedoColor": { "$ref": "#/definitions/colorOrAlpha" },
            "roughness": { "type": "number" },
            "metalness": { "type": "number" },
            "normalMapScale": { "type": "number" },
            "transparent": { "type" : "boolean" },
            "alphaClipEnabled": { "type" : "boolean" },
            "alphaClipThreshold": { "type": "number" },
            "useVertexColor": { "type" : "boolean" },
            "isDoubleSided": { "type" : "boolean" },
            "ignoreTextureMaps": { "$ref" : "#/definitions/listOfMaps" },
            "transparencyWritesDepth": {"type" : "boolean" }
        },
        "required": ["name"],
        "additionalProperties" : false
    }
}

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