Condividi tramite


Sostituire i materiali durante la conversione di modelli

Le impostazioni dei materiali nel modello di origine definiscono i materiali PBR usati dal renderer. A volte la conversione predefinita non restituisce i risultati desiderati ed è necessario apportare modifiche. Per altre informazioni, vedere Mapping materiale per i formati di modello.

Quando una mesh triangolare viene convertita per l'uso in Azure Rendering remoto, è possibile fornire un file di override del materiale per personalizzare la modalità di conversione dei materiali in base al materiale. Se un file denominato <modelName>. MaterialOverrides.json si trova nel contenitore di input con il modello di <input modelName>.<ext>, viene usato come file di override del materiale.

File di override usato durante la conversione

Come esempio semplice, prendere un modello box con un singolo materiale, denominato Default. Il suo colore albedo deve essere regolato per l'uso in Rendering remoto. In questo caso, una casella. Il file MaterialOverrides.json può essere creato come segue:

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

Casella . Il file MaterialOverrides.json viene inserito nel contenitore di input con box.fbx, che indica al servizio di conversione di applicare le nuove impostazioni.

Materiali a colori

Il modello di materiale a colori descrive una superficie costantemente ombreggiata indipendente dall'illuminazione. I materiali a colori sono utili per gli asset creati dagli algoritmi di fotogrammametria, ad esempio. Per altre informazioni, vedere Materiali a colori. Nei file di override del materiale, un materiale può essere dichiarato come materiale a colori impostando unlit su true.

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

Ignora mappe trama specifiche

A volte è possibile che il processo di conversione ignori mappe di trama specifiche. Questa situazione può verificarsi quando il modello è stato generato da uno strumento che genera mappe speciali non comprese dal renderer. Ad esempio, è possibile usare "OpacityMap" per definire un elemento diverso dall'opacità oppure "NormalMap" viene archiviato come "BumpMap". In quest'ultimo caso si vuole ignorare "NormalMap", che fa sì che il convertitore usi "BumpMap" come "NormalMap".

Aggiungere una proprietà denominata ignoreTextureMaps e aggiungere qualsiasi mappa trama da ignorare:

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

Per l'elenco completo delle mappe delle trame che è possibile ignorare, vedere lo schema JSON.

Applicazione degli stessi override a più materiali

Per impostazione predefinita, una voce nel file material esegue l'override del file quando il nome corrisponde esattamente al nome del materiale. Poiché è comune che lo stesso override debba essere applicato a più materiali, è possibile specificare facoltativamente un'espressione regolare come nome della voce. Il campo nameMatching ha un valore exactpredefinito, ma può essere impostato su regex per indicare che la voce deve essere applicata a ogni materiale corrispondente. La sintassi dell'espressione regolare è la stessa sintassi usata per JavaScript.

Suggerimento

Sono disponibili siti Web di test regex gratuiti per testare ed eseguire il debug di un'espressione regolare su stringhe arbitrarie.

Nell'esempio seguente viene illustrato un override che si applica ai materiali con nomi come Material2, Material01 e Material999.

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

Questo esempio mostra un override applicato a tutti i materiali:

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

L'ordine in cui ogni materiale trova un override corrispondente è il seguente:

  1. Prima di tutto, verifica la corrispondenza esatta del nome, ovvero controlla tutte le sostituzioni in cui nameMatching è assente o uguale exacta .
  2. Se non viene trovato alcun override, verifica tutti gli override con regex la modalità di corrispondenza dei nomi e usa il primo override corrispondente.

Un singolo materiale non ottiene mai più di un override applicato, anche se più regex espressioni si applicano al nome del materiale.

Ottenere informazioni sulle voci applicate

Il file di informazioni scritto nel contenitore di output contiene informazioni sul numero di sostituzioni fornite e sul numero di materiali sottoposti a override. Per altre informazioni, vedere Informazioni su un modello convertito.

Schema JSON

Qui viene fornito lo schema JSON completo per i file di materiali. Ad eccezione di unlit e ignoreTextureMaps, le proprietà disponibili sono un subset delle proprietà descritte nelle sezioni sui modelli di materiale colore e materiale 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
    }
}

Passaggi successivi