Ü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:
- Zunächst wird auf genaue Namensüberstimmung getestet (d. h., es werden alle Überschreibungen überprüft, bei denen
nameMatching
nicht vorhanden oder gleichexact
ist). - 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
}
}