共用方式為


在模型轉換期間覆寫材質

來源模型中的材質設定會定義 轉譯器所使用的 PBR 材質 。 有時候預設轉換不會提供所需的結果,而且您需要進行變更。 如需詳細資訊,請參閱 模型格式 的材質對應。

轉換三角形網格以用於 Azure 遠端轉譯時,您可以提供材質覆寫檔案,以自訂每個材質的材質轉換方式。 如果稱為 < modelName > 的檔案。MaterialOverrides.json 可在輸入模型 modelName > < 的輸入容器中找到。 <ext > ,它用來做為材料覆寫檔案。

轉換期間使用的覆寫檔案

簡單範例中,採用具有單一材質的方塊模型,稱為 Default 。 其 albedo 色彩必須調整,才能用於遠端轉譯。 在此案例中,有一個 方塊。MaterialOverrides.json 檔案可以建立如下:

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

塊。MaterialOverrides.json 檔案會放在輸入容器中,其中包含 box.fbx ,它會告知轉換服務套用新的設定。

色彩材質

色彩材質模型描述與光源無關的不斷著色表面。 例如,色彩材質適用于 Photogrammetry 演算法所製作的資產。 如需詳細資訊,請參閱 色彩材質 。 在材質覆寫檔案中,可以將材質宣告為色彩材質,方法是將 設定 unlittrue

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

忽略特定紋理對應

有時候,您可能想要轉換程式忽略特定的紋理對應。 當您的模型是由產生轉譯器無法理解的特殊地圖的工具所產生時,就可能發生這種情況。 例如,「OpacityMap」 可用來定義不透明度以外的專案,或 「NormalMap」 會儲存為 「BumpMap」。 在後者的情況下,您想要忽略 「NormalMap」,這會導致轉換器使用 「BumpMap」 作為 「NormalMap」。

新增名為 ignoreTextureMaps 的屬性,並新增您想要忽略的任何紋理對應:

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

如需您可以忽略之紋理對應的完整清單,請參閱 JSON 架構

將相同的覆寫套用至多個材質

根據預設,當材質的名稱完全符合材質名稱時,會套用材質覆寫檔案中的專案。 由於相同的覆寫應該套用至多個材質很常見,因此您可以選擇性地提供正則運算式做為專案名稱。 欄位 nameMatching 具有預設值 exact ,但可以設定為 , regex 表示專案應該套用至每個相符材質。 RegEx 的語法與 JavaScript 所使用的語法相同。

提示

有免費的 RegEx 測試網站可用來針對任一字元串測試和偵錯正則運算式。

下列範例示範套用至名稱為 、 Material01Material999Material2 材質的覆寫。

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

此範例顯示套用至 所有 材質的覆寫:

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

每個材質尋找相符覆寫的順序如下:

  1. 首先,它會測試完全相符的名稱(也就是說,它會檢查所有不存在或等於 的 exact 覆寫 nameMatching
  2. 如果找不到覆寫,它會以名稱比對模式測試所有覆 regex 寫,並使用 符合的第一個 覆寫。

即使多個 regex 運算式套用至材質名稱,單一材質永遠不會套用多個覆寫。

取得套用哪些專案的相關資訊

寫入至輸出容器的資訊檔案會攜帶所提供覆寫數目的相關資訊,以及覆寫的資料數目。 如需詳細資訊,請參閱 已轉換模型 的相關資訊。

JSON 結構描述

此處提供材料檔案的完整 JSON 架構。 unlit除了 和 ignoreTextureMaps 之外,可用的屬性是色彩材質 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
    }
}

下一步