在模型轉換期間覆寫材質
來源模型中的材質設定會定義 轉譯器所使用的 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 演算法所製作的資產。 如需詳細資訊,請參閱 色彩材質 。
在材質覆寫檔案中,可以將材質宣告為色彩材質,方法是將 設定 unlit
為 true
。
[
{
"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 測試網站可用來針對任一字元串測試和偵錯正則運算式。
下列範例示範套用至名稱為 、 Material01
和 Material999
等 Material2
材質的覆寫。
[
{
"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
}
}
]
每個材質尋找相符覆寫的順序如下:
- 首先,它會測試完全相符的名稱(也就是說,它會檢查所有不存在或等於 的
exact
覆寫nameMatching
。 - 如果找不到覆寫,它會以名稱比對模式測試所有覆
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
}
}