Timpa material selama konversi model
Pengaturan material dalam model sumber menentukan bahan PBR yang digunakan oleh perender. Terkadang konversi default tidak memberikan hasil yang diinginkan dan Anda harus membuat perubahan. Untuk informasi selengkapnya, lihat Pemetaan materi untuk format model.
Saat jala segitiga dikonversi untuk digunakan di Azure Remote Rendering, Anda dapat menyediakan file penimpaan materi untuk menyesuaikan bagaimana konversi materi dilakukan berdasarkan per materi. Jika file yang disebut <modelName>. MaterialOverrides.json ditemukan dalam kontainer input dengan model input modelName<>.<ext>, ini digunakan sebagai file penimpaan materi.
File penimpaan yang digunakan selama konversi
Sebagai contoh sederhana, ambil model kotak yang memiliki satu bahan, yang disebut Default
.
Warna albedo-nya perlu disesuaikan untuk digunakan dalam Remote Rendering.
Dalam hal ini, sebuah kotak. File MaterialOverrides.json dapat dibuat sebagai berikut:
[
{
"name": "Default",
"albedoColor": {
"r": 0.33,
"g": 0.33,
"b": 0.33,
"a": 1.0
}
}
]
Kotaknya . File MaterialOverrides.json ditempatkan dalam kontainer input dengan box.fbx, yang memberi tahu layanan konversi untuk menerapkan pengaturan baru.
Material warna
Model material warna menggambarkan permukaan yang terus berbayang yang terpisah dari pencahayaan.
Material warna berguna untuk aset yang dibuat oleh algoritma Photogrammetry, misalnya. Untuk informasi selengkapnya, lihat Bahan warna.
Dalam file penimpaan material, material dapat dinyatakan sebagai material warna dengan mengatur unlit
ke true
.
[
{
"name": "Photogrametry_mat1",
"unlit" : true
},
{
"name": "Photogrametry_mat2",
"unlit" : true
}
]
Mengabaikan peta tekstur tertentu
Terkadang Anda mungkin ingin proses konversi mengabaikan peta tekstur tertentu. Situasi ini mungkin terjadi ketika model Anda dihasilkan oleh alat yang menghasilkan peta khusus yang tidak dipahami oleh perender. Misalnya, "OpacityMap" dapat digunakan untuk menentukan sesuatu selain opasitas, atau "NormalMap" disimpan sebagai "BumpMap". Dalam kasus terakhir, Anda ingin mengabaikan "NormalMap", yang menyebabkan pengonversi menggunakan "BumpMap" sebagai "NormalMap".
Tambahkan properti yang disebut ignoreTextureMaps
dan tambahkan peta tekstur apa pun yang ingin Anda abaikan:
[
{
"name": "Default",
"ignoreTextureMaps": ["OpacityMap", "NormalMap"]
}
]
Untuk daftar lengkap peta tekstur yang dapat Anda abaikan, lihat skema JSON.
Menerapkan penimpaan yang sama ke beberapa material
Secara default, entri dalam file penimpaan material berlaku ketika namanya sama persis dengan nama material.
Karena umum bahwa penimpaan yang sama harus berlaku untuk beberapa bahan, Anda dapat secara opsional memberikan ekspresi reguler sebagai nama entri.
Bidang nameMatching
ini memiliki nilai default exact
, tetapi dapat diatur ke regex
untuk menyatakan bahwa entri harus diterapkan ke setiap materi yang cocok.
Sintaks regex adalah sintaks yang sama yang digunakan untuk JavaScript.
Tip
Ada situs web pengujian regex gratis yang tersedia untuk menguji dan men-debug ekspresi reguler terhadap string arbitrer.
Contoh berikut menunjukkan penimpaan yang berlaku untuk materi dengan nama seperti Material2
, Material01
dan Material999
.
[
{
"name": "Material[0-9]+",
"nameMatching": "regex",
"albedoColor": {
"r": 0.0,
"g": 0.0,
"b": 1.0,
"a": 1.0
}
}
]
Contoh ini menunjukkan penimpaan yang diterapkan ke semua materi:
[
{
"name": ".*",
"nameMatching": "regex",
"albedoColor": {
"r": 0.0,
"g": 0.0,
"b": 1.0,
"a": 1.0
}
}
]
Urutan setiap materi menemukan penggantian yang cocok adalah sebagai berikut:
- Pertama, ini menguji kecocokan nama yang tepat (yaitu, memeriksa semua penimpaan di mana
nameMatching
tidak ada atau sama denganexact
). - Jika tidak ada penimpaan yang ditemukan, ia menguji semua penimpaan dengan
regex
mode pencocokan nama dan menggunakan penimpaan pertama yang cocok.
Satu materi tidak pernah mendapatkan lebih dari satu penimpaan yang diterapkan, bahkan jika beberapa regex
ekspresi berlaku untuk nama materi.
Mendapatkan informasi tentang entri mana yang diterapkan
File info yang ditulis ke kontainer output membawa informasi tentang jumlah penimpaan yang disediakan, dan jumlah materi yang ditimpa. Untuk informasi selengkapnya, lihat Informasi tentang model yang dikonversi.
Skema JSON
Skema JSON lengkap untuk file material diberikan di sini. Kecuali untuk unlit
dan ignoreTextureMaps
, properti yang tersedia adalah subset dari properti yang dijelaskan di bagian pada bahan warna dan model bahan 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
}
}