Teilen über


Überschreiben von Materialien während der Modellkonvertierung

In den Materialeinstellungen im Quellmodell sind die PBR-Materialien definiert, die vom Renderer verwendet werden. Manchmal gibt die Standardkonvertierung nicht die gewünschten Ergebnisse aus, und Sie müssen Änderungen vornehmen. Weitere Informationen finden Sie unter Materialzuordnung für Modellformate.

Wenn ein Dreiecksnetz für die Verwendung in Azure Remote Rendering konvertiert wird, können Sie eine Materialüberschreibungsdatei bereitstellen, um anzupassen, wie die Materialkonvertierung pro Material durchgeführt wird. Wenn eine Datei mit dem Namen <modelName>.MaterialOverrides.json im Eingabecontainer mit dem Eingabemodell <modelName>.<ext> gefunden wird, wird sie als Datei für die Materialüberschreibung verwendet.

Die während der Konvertierung verwendete Überschreibungsdatei

Angenommen, ein Boxmodell verfügt über ein einzelnes Material mit dem Namen Default. Seine Rückstrahlfarbe muss für die Verwendung im Remote Rendering angepasst werden. In diesem Fall kann folgendermaßen eine Datei box.MaterialOverrides.json erstellt werden:

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

Die Datei box.MaterialOverrides.json wird im Eingabecontainer mit box.fbx platziert, wodurch der Konvertierungsdienst angewiesen wird, die neuen Einstellungen anzuwenden.

Farbmaterialien

Das Farbmaterialmodell beschreibt eine ständig beschattete Oberfläche, die unabhängig von der Beleuchtung ist. Farbmaterialien sind z. B. nützlich für Medienobjekte, die von Fotogrammmetriealgorithmen erstellt werden. Weitere Informationen finden Sie unter Farbmaterialien. In Materialüberschreibungsdateien kann ein Material als Farbmaterial deklariert werden, indem unlit auf true festgelegt wird.

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

Ignorieren bestimmter Texturzuordnungen

Manchmal wünschen Sie möglicherweise, dass der Konvertierungsprozess bestimmte Texturzuordnungen ignoriert. Diese Situation kann eintreten, wenn das Modell von einem Tool generiert wurde, das spezielle Zuordnungen generiert, die vom Renderer nicht verstanden werden. Beispielsweise könnte eine „OpacityMap“ verwendet werden, um etwas anderes als Deckkraft zu definieren, oder ein Modell, in dem die „NormalMap“ als „BumpMap“ gespeichert wird. In letzterem Fall möchten Sie „NormalMap“ ignorieren, was bewirkt, dass der Konverter „BumpMap“ als „NormalMap“ verwendet.

Fügen Sie einfach eine Eigenschaft namens ignoreTextureMaps hinzu, und fügen Sie eine beliebige Texturzuordnung hinzu, die Sie ignorieren möchten:

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

Die vollständige Liste der Texturzuordnungen, die Sie ignorieren können, finden Sie im JSON-Schema.

Anwenden derselben Überschreibungen auf mehrere Materialien

Standardmäßig gilt ein Eintrag in der Materialüberschreibungsdatei, wenn sein Name genau mit dem Materialnamen übereinstimmt. Da eine Überschreibung üblicherweise für mehrere Materialien gilt, können Sie optional einen regulären Ausdruck als Eintragsnamen angeben. Das Feld nameMatching hat einen Standardwert von exact, kann jedoch auf regex festgelegt werden, um anzugeben, dass der Eintrag auf jedes übereinstimmende Material angewendet werden soll. Die Syntax des regulären Ausdrucks ist identisch mit der von JavaScript.

Tipp

Es gibt kostenlose Websites zum Testen regulärer Ausdrücke, um einen regulären Ausdruck mit beliebigen Zeichenfolgen zu testen und zu debuggen.

Das folgende Beispiel zeigt eine Überschreibung, die für Materialien mit Namen wie Material2, Material01 und Material999 gilt.

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

Dieses Beispiel zeigt eine Überschreibung, die für alle Materialien gilt:

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

Die Reihenfolge, in der jedes Material eine übereinstimmende Überschreibung findet, lautet wie folgt:

  1. Zunächst wird auf genaue Namensüberstimmung getestet (d. h., es werden alle Überschreibungen überprüft, bei denen nameMatching nicht vorhanden oder gleich exact ist).
  2. Wenn keine Überschreibung gefunden wird, werden alle Überschreibungen mit dem Namensübereinstimmungsmodus von regex getestet, und die erste übereinstimmende Überschreibung wird verwendet.

Für ein einzelnes Material gilt immer nur eine Überschreibung, auch wenn mehrere regex-Ausdrücke auf den Materialnamen zutreffen.

Abrufen von Informationen zu den angewendeten Einträgen

Die in den Ausgabecontainer geschriebene Infodatei enthält Informationen über die Anzahl der bereitgestellten Überschreibungen und die Anzahl der überschriebenen Materialien. Weitere Informationen finden Sie unter Informationen zu einem konvertierten Modell.

JSON-Schema

Das vollständige JSON-Schema für Materialdateien finden Sie hier. Mit Ausnahme von unlit und ignoreTextureMaps handelt es sich bei den verfügbaren Eigenschaften um eine Teilmenge der Eigenschaften, die in den Abschnitten zu den Farbmaterial- und PBR-Materialmodellen beschrieben werden.

{
    "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
    }
}

Nächste Schritte