Udostępnij za pośrednictwem


Zastępowanie materiałów podczas konwersji modelu

Ustawienia materiału w modelu źródłowym definiują materiały PBR używane przez program renderatora. Czasami konwersja domyślna nie daje żądanych wyników i musisz wprowadzić zmiany. Aby uzyskać więcej informacji, zobacz Mapowanie materiału dla formatów modelu.

Gdy trójkątna siatka jest konwertowana do użycia w usłudze Azure Remote Rendering, można udostępnić plik przesłonięcia materiału, aby dostosować sposób konwersji materiału na podstawie materiału. Jeśli plik o nazwie <modelName>. Plik MaterialOverrides.json znajduje się w kontenerze wejściowym z modelem wejściowym modelName<>.<ext>, jest używany jako plik przesłaniania materiału.

Przesłonięć plik używany podczas konwersji

W prostym przykładzie weźmy model box, który ma jeden materiał o nazwie Default. Kolor albedo należy dostosować do użycia w usłudze Remote Rendering. W tym przypadku pole. Plik MaterialOverrides.json można utworzyć w następujący sposób:

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

Pole . Plik MaterialOverrides.json jest umieszczany w kontenerze wejściowym za pomocą pliku box.fbx, który nakazuje usłudze konwersji zastosowanie nowych ustawień.

Materiały kolorów

Model materiału kolorowego opisuje stale zacieniną powierzchnię, która jest niezależna od oświetlenia. Materiały kolorowe są przydatne w przypadku zasobów wykonanych przez algorytmy Fotogrammetrii, na przykład. Aby uzyskać więcej informacji, zobacz Materiały kolorowe. W przypadku plików zastępowania materiału materiał można zadeklarować jako materiał kolorowy, ustawiając wartość unlit na true.

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

Ignoruj określone mapy tekstur

Czasami możesz chcieć, aby proces konwersji ignorował określone mapy tekstur. Taka sytuacja może wystąpić, gdy model został wygenerowany przez narzędzie, które generuje specjalne mapy niezrozumiane przez program renderujący. Na przykład "OpacityMap" może służyć do definiowania czegoś innego niż nieprzezroczyste lub "NormalMap" jest przechowywany jako "BumpMap". W drugim przypadku chcesz zignorować wartość "NormalMap", co powoduje, że konwerter używa wartości "BumpMap" jako "NormalMap".

Dodaj właściwość o nazwie ignoreTextureMaps i dodaj dowolną mapę tekstury, którą chcesz zignorować:

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

Aby uzyskać pełną listę map tekstur, które można zignorować, zobacz schemat JSON.

Stosowanie tych samych przesłonięć do wielu materiałów

Domyślnie wpis w pliku material zastępuje zastosowanie, gdy jego nazwa jest dokładnie zgodna z nazwą materiału. Ze względu na to, że to samo zastąpienie powinno mieć zastosowanie do wielu materiałów, opcjonalnie można podać wyrażenie regularne jako nazwę wpisu. Pole nameMatching ma wartość exactdomyślną , ale można ustawić na wartość , aby regex określić, że wpis powinien być stosowany do każdego pasującego materiału. Składnia wyrażenia regularnego jest tą samą składnią używaną dla języka JavaScript.

Napiwek

Dostępne są bezpłatne witryny internetowe testowania wyrażeń regularnych umożliwiające testowanie i debugowanie wyrażenia regularnego względem dowolnych ciągów.

W poniższym przykładzie pokazano przesłonięć, która ma zastosowanie do materiałów o nazwach takich jak Material2, Material01 i Material999.

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

W tym przykładzie pokazano przesłonięcia stosowane do wszystkich materiałów:

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

Kolejność, w jakiej każdy materiał znajduje pasujący przesłonięć, jest następująca:

  1. Najpierw testuje dokładne dopasowanie nazwy (oznacza to, że sprawdza wszystkie przesłonięcia, w których nameMatching jest nieobecny lub równa exact).
  2. Jeśli nie znaleziono przesłonięć, testuje wszystkie przesłonięcia z trybem regex dopasowywania nazw i używa pierwszego przesłonięcia zgodnego.

Pojedynczy materiał nigdy nie jest stosowany więcej niż jeden przesłonięcia, nawet jeśli wiele regex wyrażeń ma zastosowanie do nazwy materiału.

Uzyskiwanie informacji o tym, które wpisy zostały zastosowane

Plik informacyjny zapisany w kontenerze wyjściowym zawiera informacje o podanej liczbie przesłonięć oraz liczbie przesłonięć materiałów. Aby uzyskać więcej informacji, zobacz Informacje o przekonwertowanym modelu.

Schemat systemu JSON

Pełny schemat JSON dla plików materiałów znajduje się tutaj. Z wyjątkiem właściwości unlit i ignoreTextureMaps, dostępne właściwości są podzbiorem właściwości opisanych w sekcjach dotyczących materiału kolorowego i modeli materiału 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
    }
}

Następne kroki