Partager via


Remplacer des matériaux pendant la conversion d’un modèle

Les paramètres de matériaux dans le modèle source définissent les matériaux PBR utilisés par le renderer. Parfois, la conversion par défaut ne donne pas les résultats souhaités et vous devez apporter des modifications. Pour plus d’informations, consultez Mappage de matériaux pour les formats de modèle.

Quand une maille triangulaire est convertie pour être utilisée dans Azure Remote Rendering, vous pouvez fournir un fichier de remplacement de matériau pour personnaliser la façon dont la conversion est effectuée pour chaque matériau. Si un fichier appelé <nomModèle>.MaterialOverrides.json se trouve dans le conteneur d’entrée avec le modèle d’entrée <nomModèle>.<ext>, il est utilisé en tant que fichier de remplacement de matériaux.

Fichier de remplacement utilisé pendant la conversion

Un modèle de boîte est un exemple simple qui comporte un seul matériau, appelé Default. Sa couleur albédo doit être ajustée pour une utilisation dans Remote Rendering. Dans ce cas, un fichier box.MaterialOverrides.json peut être créé de la manière suivante :

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

Le fichier box.MaterialOverrides.json est placé dans le conteneur d’entrée avec box.fbx, qui indique au service de conversion d’appliquer les nouveaux paramètres.

Matériaux couleur

Le modèle de matériau de couleur décrit une surface constamment ombrée indépendante de l’éclairage. Les matériaux couleur s’avèrent utiles pour les composants créés avec des algorithmes de photogrammétrie, par exemple. Pour plus d’informations, consultez Matériaux de couleur. Dans les fichiers de remplacement de matériau, vous pouvez déclarer un matériau comme matériau de couleur en définissant unlit sur true.

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

Ignorer des cartes de texture spécifiques

Dans certains cas, vous souhaiterez peut-être que le processus de conversion ignore des cartes de texture spécifiques, Cette situation peut se produire quand votre modèle a été généré par un outil qui crée des cartes spéciales que le renderer ne comprend pas. Il peut s’agir, par exemple, d’une « OpacityMap » utilisée pour définir autre chose que l’opacité ou d’une « NormalMap » stockée en tant que « BumpMap ». Dans ce dernier cas, vous avez intérêt à ignorer « NormalMap ». Ainsi, le convertisseur va utiliser « BumpMap » en tant que « NormalMap ».

Ajoutez une propriété appelée ignoreTextureMaps et ajoutez les cartes de texture à ignorer :

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

Pour obtenir la liste complète des cartes de texture que vous pouvez ignorer, consultez le schéma JSON.

Application des mêmes remplacements à plusieurs matériaux

Par défaut, une entrée dans le fichier de remplacement de matériau s’applique lorsque son nom correspond exactement au nom du matériau. Étant donné qu’il est courant que le même remplacement s’applique à plusieurs matériaux, vous pouvez éventuellement fournir une expression régulière comme nom d’entrée. Le champ nameMatching a une valeur par défaut exact, mais il peut être défini sur regex pour indiquer que l’entrée doit s’appliquer à chaque matériau correspondant. La syntaxe de l’expression régulière est la même que celle utilisée pour JavaScript.

Conseil

Des sites web de test regex gratuit sont disponibles pour tester et déboguer une expression régulière sur des chaînes arbitraires.

L’exemple suivant montre un remplacement qui s’applique à des matériaux portant les noms Material2, Material01 et Material999.

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

Cet exemple montre un remplacement appliqué à tous les matériaux :

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

L’ordre dans lequel chaque matériau trouve un remplacement qui lui correspond est le suivant :

  1. Tout d’abord, il teste la correspondance exacte des noms (c’est-à-dire qu’il vérifie tous les remplacements où nameMatching est absent ou égal à exact).
  2. Si aucun remplacement n’est trouvé, il teste tous les remplacements avec le mode de correspondance de nom regex et utilise le premier remplacement qui correspond.

Un seul matériau n’a jamais plusieurs remplacements appliqués, même si plusieurs expressions regex s’appliquent au nom du matériau.

Obtention d’informations sur les entrées appliquées

Le fichier d’informations qui est écrit dans le conteneur de sortie contient des informations sur le nombre de remplacements fournis et le nombre de matériaux qui ont été remplacés. Pour plus d’informations, consultez Informations sur un modèle converti.

Schéma JSON

Le schéma JSON complet pour les fichiers de matériaux est fourni ici. À l’exception de unlit et ignoreTextureMaps, les propriétés disponibles sont un sous-ensemble des propriétés décrites dans les sections sur les modèles de matériau de couleur et de matériau 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
    }
}

Étapes suivantes