Compartir a través de


Reemplazo de materiales durante la conversión de modelos

La configuración de materiales del modelo define los materiales de PBR que usa el representador. A veces, la conversión predeterminada no proporciona los resultados deseados y es necesario realizar cambios. Para más información, consulte Asignación de material para formatos de modelo.

Cuando se convierte una malla triangular para su uso en Azure Remote Rendering, se puede proporcionar un archivo de invalidación de materiales para personalizar cómo se realiza la conversión de cada material. Si se encuentra un archivo llamado <modelName>.MaterialOverrides.jsen en el contenedor de entrada con el modelo de entrada <modelName>.<ext>, se usa como archivo de reemplazo del material.

Archivo de invalidación usado durante la conversión

Como ejemplo sencillo, supongamos que un modelo de cuadros tiene un único material, denominado Default. El color albedo necesita ajustarse para usarse en Remote Rendering. En este caso, se puede crear un archivo box.MaterialOverrides.json de la siguiente manera:

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

El archivo box.MaterialOverrides.json se coloca en el contenedor de entrada junto a box.fbx, que indica al servicio de conversión que aplique la nueva configuración.

Materiales de color

El modelo de material de color describe una superficie sombreada constantemente que es independiente de la iluminación. Los materiales de color son útiles para los recursos que se crean con los algoritmos de fotogrametría, por ejemplo. Para más información, consulte Materiales de colores. En los archivos de invalidación de materiales, un material se puede declarar como material de color estableciendo unlit en true.

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

Omitir mapas de texturas específicas

En ocasiones, es posible que quiera que el proceso de conversión ignore determinados mapas de texturas. Esta situación puede darse cuando el modelo se generó mediante una herramienta que genera mapas especiales que el representador no entiende. Por ejemplo, un elemento "OpacityMap" podría usarse para definir un valor distinto de opacidad o "NormalMap" se almacena como "BumpMap". En este último caso, es recomendable omitir "NormalMap", lo que hace que el convertidor use "BumpMap" como "NormalMap".

Agregue una propiedad llamada ignoreTextureMaps y cualquier mapa de texturas que quiera omitir:

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

Para ver la lista completa de mapas de texturas que puede omitir, consulte el siguiente esquema JSON.

Aplicación de las mismas invalidaciones a varios materiales

De forma predeterminada, una entrada en el archivo de reemplazo de material se aplica cuando su nombre coincide exactamente con el nombre del material. Dado que es común que la misma invalidación se aplique a varios materiales, puede proporcionar opcionalmente una expresión regular como nombre de la entrada. El campo nameMatching tiene un valor predeterminado exact, pero se puede establecer en regex para indicar que la entrada debe aplicarse a todos los materiales coincidentes. La sintaxis usada de la expresión regular es la misma que la que se usa para JavaScript.

Sugerencia

Hay sitios web gratuitos de prueba de expresiones regulares disponibles para probar y depurar una expresión regular en cadenas arbitrarias.

En el ejemplo siguiente se muestra una invalidación que se aplica a los materiales con nombres como Material2, Material01 y Material999.

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

En este ejemplo se muestra una invalidación que se aplica a todos los materiales:

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

El orden en que cada material encuentra una invalidación coincidente es el siguiente:

  1. En primer lugar, comprueba si hay coincidencias exactas de nombre (es decir, comprueba todas las invalidaciones en las que nameMatching no existe o es igual a exact).
  2. Si no se encuentra ninguna invalidación, comprueba todas las invalidaciones con el modo de coincidencia de nombres regex y usa la primera invalidación que coincide.

Un solo material nunca obtiene más de una invalidación aplicada, incluso si se aplican varias expresiones regex al nombre del material.

Obtención de información sobre las entradas aplicadas

El archivo info escrito en el contenedor de salida contiene información sobre el número de invalidaciones proporcionadas y el número de materiales que se han invalidado. Para más información, consulte Información sobre un modelo convertido.

Esquema de JSON

Aquí se proporciona el esquema JSON completo para los archivos de materiales. A excepción de unlit y ignoreTextureMaps, las propiedades disponibles son un subconjunto de las propiedades descritas en las secciones de los modelos de material de color y material de 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
    }
}

Pasos siguientes