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:
- 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 aexact
). - 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
}
}