Bagikan melalui


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:

  1. Pertama, ini menguji kecocokan nama yang tepat (yaitu, memeriksa semua penimpaan di mana nameMatching tidak ada atau sama dengan exact).
  2. 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
    }
}

Langkah berikutnya