Delen via


Materialen overschrijven tijden modelconversie

De materiaalinstellingen in het bronmodel definiëren de PBR-materialen die door de renderer worden gebruikt. Soms geeft de standaardconversie niet de gewenste resultaten en moet u wijzigingen aanbrengen. Zie Materiaaltoewijzing voor modelindelingen voor meer informatie.

Wanneer een driehoekige mesh wordt geconverteerd voor gebruik in Azure Remote Rendering, kunt u een materiaaloverschrijvingsbestand opgeven om aan te passen hoe materiaalconversie per materiaal wordt uitgevoerd. Als een bestand met de naam <modelName>. MaterialOverrides.json vindt u in de invoercontainer met de modelnaam> van het invoermodel<.<ext>, het wordt gebruikt als het materiaal onderdrukkingsbestand.

Het onderdrukkingsbestand dat tijdens de conversie wordt gebruikt

Neem als eenvoudig voorbeeld een vakmodel met één materiaal, genaamd Default. De albedo-kleur moet worden aangepast voor gebruik in Remote Rendering. In dit geval een doos. MaterialOverrides.json-bestand kan als volgt worden gemaakt:

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

De doos. MaterialOverrides.json-bestand wordt in de invoercontainer geplaatst met box.fbx, waarmee de conversieservice de nieuwe instellingen moet toepassen.

Kleurmaterialen

Het kleurenmateriaalmodel beschrijft een voortdurend gearceerd oppervlak dat onafhankelijk is van verlichting. Kleurmaterialen zijn bijvoorbeeld handig voor assets die zijn gemaakt door Photogrammetry-algoritmen. Zie Kleurmaterialen voor meer informatie. In materiaaloverschrijven bestanden kan een materiaal worden gedeclareerd als een kleurmateriaal door in te stellen unlit op true.

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

Specifieke patroontoewijzingen negeren

Soms wilt u dat het conversieproces specifieke patroontoewijzingen negeert. Deze situatie kan optreden wanneer uw model is gegenereerd door een hulpprogramma dat speciale kaarten genereert die niet worden begrepen door de renderer. Een 'OpacityMap' kan bijvoorbeeld worden gebruikt om iets anders te definiëren dan dekking, of de 'NormalMap' wordt opgeslagen als 'BumpMap'. In het laatste geval wilt u 'NormalMap' negeren, waardoor het conversieprogramma 'BumpMap' als 'NormalMap' gebruikt.

Voeg een eigenschap toe met de naam ignoreTextureMaps en voeg een patroonkaart toe die u wilt negeren:

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

Zie het JSON-schema voor de volledige lijst met patroontoewijzingen die u kunt negeren.

Dezelfde onderdrukkingen toepassen op meerdere materialen

Standaard is een vermelding in het materiaaloverschrijvingsbestand van toepassing wanneer de naam exact overeenkomt met de materiaalnaam. Aangezien het gebruikelijk is dat dezelfde onderdrukking moet worden toegepast op meerdere materialen, kunt u desgewenst een reguliere expressie opgeven als de naam van het item. Het veld nameMatching heeft een standaardwaarde exact, maar kan worden ingesteld op regex de status dat de vermelding moet worden toegepast op elk overeenkomend materiaal. De syntaxis van de regex is dezelfde syntaxis die wordt gebruikt voor JavaScript.

Fooi

Er zijn gratis regex-testwebsites beschikbaar om een reguliere expressie te testen en fouten op te sporen op basis van willekeurige tekenreeksen.

In het volgende voorbeeld ziet u een onderdrukking die van toepassing is op materialen met namen zoals Material2, Material01 en Material999.

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

In dit voorbeeld ziet u een onderdrukking die wordt toegepast op alle materialen:

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

De volgorde waarin elk materiaal een overeenkomende onderdrukking vindt, is als volgt:

  1. Eerst wordt getest op exacte naamovereenkomst (dat wil zeggen, het controleert alle onderdrukkingen waar nameMatching afwezig of gelijk is aan).exact
  2. Als er geen onderdrukking wordt gevonden, worden alle onderdrukkingen getest met regex de naamkoppelingsmodus en wordt de eerste onderdrukking gebruikt die overeenkomt.

Eén materiaal wordt nooit meer dan één onderdrukking toegepast, zelfs als meerdere regex expressies van toepassing zijn op de materiaalnaam.

Informatie ophalen over welke vermeldingen zijn toegepast

Het informatiebestand dat naar de uitvoercontainer wordt geschreven, bevat informatie over het aantal opgegeven onderdrukkingen en het aantal materialen dat is overschreven. Zie Informatie over een geconverteerd model voor meer informatie.

JSON-schema

Het volledige JSON-schema voor materiaalbestanden wordt hier gegeven. unlit Behalve en ignoreTextureMapszijn de beschikbare eigenschappen een subset van de eigenschappen die worden beschreven in de secties over het kleurenmateriaal en PBR-materiaalmodellen.

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

Volgende stappen