Bagikan melalui


Pemetaan materi untuk format model

Saat aset sumber dikonversi sebagai model, konverter membuat materi untuk setiap jala. Cara materi dibuat dapat ditimpa. Namun, secara default konversi akan membuat materi PBR. Karena setiap format file sumber, seperti FBX, menggunakan konvensinya sendiri untuk menentukan materi, konvensi tersebut harus dipetakan ke parameter materi PBR Azure Remote Rendering.

Artikel ini mencantumkan pemetaan tepat yang digunakan untuk mengonversi materi dari aset sumber ke materi runtime.

glTF

Hampir semuanya dari spesifikasi glTF 2.0 didukung di Azure Remote Rendering, kecuali EmissiveFactor dan EmissiveTexture.

Tabel berikut menunjukkan pemetaan:

glTF Azure Remote Rendering
baseColorFactor albedoColor
baseColorTexture albedoMap
metallicFactor metalness
metallicTexture metalnessMap
roughnessFactor roughness
roughnessTexture roughnessMap
occlusionFactor occlusion
occlusionTexture occlusionMap
normalTexture normalMap
normalTextureInfo.scale normalMapScale
alphaCutoff alphaClipThreshold
alphaMode.OPAQUE alphaClipEnabled = false, isTransparent = false
alphaMode.MASK alphaClipEnabled = true, isTransparent = false
alphaMode.BLEND isTransparent = true
doubleSided isDoubleSided
emissiveFactor -
emissiveTexture -

Setiap tekstur dalam glTF dapat memiliki nilai texCoord, yang juga didukung dalam materi Azure Remote Rendering.

Tekstur yang disematkan

Tekstur yang disematkan dalam file *.bin atau *.glb didukung.

Ekstensi glTF yang didukung

Selain kumpulan fitur dasar, Azure Remote Rendering mendukung ekstensi glTF berikut:

FBX

Format FBX adalah sumber tertutup dan bahan FBX tidak kompatibel dengan bahan PBR secara umum. FBX menggunakan deskripsi permukaan yang kompleks dengan banyak parameter dan properti unik serta tidak semuanya digunakan oleh alur Azure Remote Rendering.

Penting

Alur konversi model Azure Remote Rendering hanya mendukung FBX 2011 dan yang lebih tinggi.

Format FBX mendefinisikan pendekatan konservatif untuk materi, hanya ada dua jenis dalam spesifikasi FBX resmi:

  • Lambert - Belum umum digunakan untuk beberapa waktu, tetapi masih didukung dengan mengonversi ke Phong pada waktu konversi.
  • Phong - Hampir semua materi dan sebagian besar alat konten menggunakan jenis ini.

Model Phong lebih akurat dan digunakan sebagai satu-satunya model untuk bahan FBX. Di bawahnya akan disebut sebagai Materi FBX.

Maya menggunakan dua ekstensi khusus untuk FBX dengan mendefinisikan properti khusus untuk jenis PBR dan Stingray dari sebuah materi. Detail ini tidak disertakan dalam spesifikasi FBX, sehingga saat ini tidak didukung oleh Azure Remote Rendering.

Materi FBX menggunakan konsep Diffuse-Specular-SpecularLevel, jadi untuk mengonversi dari tekstur difus ke peta albedo, kami perlu menghitung parameter lain untuk menguranginya dari difus.

Semua warna dan tekstur di FBX berada di ruang sRGB (juga disebut sebagai ruang Gamma), tetapi Azure Remote Rendering berfungsi dengan ruang linier selama visualisasi dan di akhir bingkai mengonversi semuanya kembali ke ruang sRGB. Alur aset Azure Remote Rendering mengonversi semuanya ke ruang linier untuk mengirimnya sebagai data yang disiapkan ke perender.

Tabel ini menunjukkan cara tekstur dipetakan dari Materi FBX ke materi Azure Remote Rendering. Beberapa di antaranya tidak digunakan secara langsung tetapi dalam kombinasi dengan tekstur lain yang berpartisipasi dalam rumus (misalnya tekstur difus):

FBX Azure Remote Rendering
AmbientColor Peta Oklusi
DiffuseColor digunakan untuk Albedo, Metalness
TransparentColor digunakan untuk saluran alfa Albedo
TransparencyFactor digunakan untuk saluran alfa Albedo
Opacity digunakan untuk saluran alfa Albedo
SpecularColor digunakan untuk Albedo, Metalness, Roughness
SpecularFactor digunakan untuk Albedo, Metalness, Roughness
ShininessExponent digunakan untuk Albedo, Metalness, Roughness
NormalMap NormalMap
Bump dikonversi ke NormalMap
EmissiveColor -
EmissiveFactor -
ReflectionColor -
DisplacementColor -

Pemetaan di atas adalah bagian paling kompleks dari konversi material, karena banyak asumsi yang harus dibuat. Kami membahas asumsi ini di bawah.

Beberapa definisi yang digunakan di bawah:

  • Specular = SpecularColor * SpecularFactor
  • SpecularIntensity = Specular.Merah ∗ 0,2125 + Specular.Hijau ∗ 0,7154 + Specular.Biru ∗ 0,0721
  • DiffuseBrightness = 0,299 * Diffuse.Merah2 + 0,587 * Diffuse.Hijau2 + 0,114 * Diffuse.Biru2
  • SpecularBrightness = 0,299 * Specular.Merah2 + 0,587 * Specular.Hijau2 + 0,114 * Specular.Biru2
  • SpecularStrength = maks(Specular.Merah, Specular.Hijau, Specular.Biru)

Formula SpekularIntensity diperoleh dari sini. Rumus kecerahan dijelaskan dalam spesifikasi ini.

Roughness

Roughness dihitung dari Specular dan ShininessExponent menggunakan rumus ini. Rumusnya adalah perkiraan roughness dari eksponen spekular Phong:

Roughness = sqrt(2 / (ShininessExponent * SpecularIntensity + 2))

Metalness

Metalness dihitung dari Diffuse dan Specular menggunakan rumus ini dari spesifikasi glTF.

Idenya di sini adalah, bahwa kita memecahkan persamaan: Ax2 + Bx + C = 0. Pada dasarnya, permukaan dielektrik mencerminkan sekitar 4% cahaya dengan cara spekular, dan sisanya difus. Permukaan logam tidak memantulkan cahaya dengan cara yang berbeda, tetapi semua dengan cara yang spektakuler. Rumus ini memiliki beberapa kelemahan, karena tidak ada cara untuk membedakan antara plastik glossy dan permukaan logam glossy. Kami berasumsi sebagian besar waktu permukaan memiliki sifat logam, sehingga permukaan plastik/karet mengkilap mungkin tidak terlihat seperti yang diharapkan.

dielectricSpecularReflectance = 0.04
oneMinusSpecularStrength = 1 - SpecularStrength

A = dielectricSpecularReflectance
B = (DiffuseBrightness * (oneMinusSpecularStrength / (1 - A)) + SpecularBrightness) - 2 * A
C = A - SpecularBrightness
squareRoot = sqrt(max(0.0, B * B - 4 * A * C))
value = (-B + squareRoot) / (2 * A)
Metalness = clamp(value, 0.0, 1.0);

Albedo

Albedo dihitung dari Diffuse, Specular, dan Metalness.

Seperti yang dijelaskan di bagian Metalness, permukaan dialektrik mencerminkan sekitar 4% cahaya.
Idenya di sini adalah untuk secara linier menginterpolasi antara warna Dielectric danMetal menggunakan nilai Metalness sebagai faktor. Jika metalness adalah 0.0, maka tergantung pada spekular, itu akan menjadi warna gelap (jika spekular tinggi) atau difus tidak akan berubah (jika tidak ada spekular). Jika metalness adalah nilai besar, warna difus akan hilang mendukung warna spekular.

dielectricSpecularReflectance = 0.04
oneMinusSpecularStrength = 1 - SpecularStrength

dielectricColor = diffuseColor * (oneMinusSpecularStrength / (1.0f - dielectricSpecularReflectance) / max(1e-4, 1.0 - metalness))
metalColor = (Specular - dielectricSpecularReflectance * (1.0 - metalness)) * (1.0 / max(1e-4, metalness))
albedoRawColor = lerpColors(dielectricColor, metalColor, metalness * metalness)
AlbedoRGB = clamp(albedoRawColor, 0.0, 1.0);

AlbedoRGB telah dihitung oleh rumus di atas, tetapi saluran alfa membutuhkan lebih banyak komputasi. Format FBX samar-samar tentang transparansi dan memiliki banyak cara untuk mendefinisikannya. Alat konten yang berbeda menggunakan metode yang berbeda. Idenya di sini adalah untuk menyatukannya menjadi satu formula. Ini membuat beberapa aset salah dirender sebagai transparan, meskipun, jika tidak dibuat dengan cara yang sama.

Ini dihitung dari TransparentColor, TransparencyFactor, Opacity:

jika Opacity didefinisikan, gunakan secara langsung: AlbedoAlpha = Opacity lainnya
jika TransparencyColor ditentukan, maka AlbedoAlpha = 1.0 - ((TransparentColor.BlueTransparentColor.Red + TransparentColor.Green + ) / 3.0) lainnya
jika TransparencyFactor, AlbedoAlpha = 1.0 - TransparencyFactor

Warna Albedo akhir memiliki empat saluran, menggabungkan AlbedoRGB dengan AlbedoAlpha.

Ringkasan

Untuk meringkas di sini, Albedo akan sangat dekat dengan Diffuse aslinya, jika Specular mendekati nol. Jika tidak, permukaan akan terlihat seperti permukaan logam dan kehilangan warna difus. Permukaan akan terlihat lebih dipoles dan reflektif jika ShininessExponent cukup besar dan Specular cerah. Jika tidak, permukaan akan terlihat kasar dan hampir tidak mencerminkan lingkungan.

Masalah yang diketahui

  • Rumus saat ini tidak berfungsi dengan baik untuk geometri berwarna sederhana. Jika Specular cukup terang, semua geometri menjadi permukaan logam reflektif tanpa warna apa pun. Solusi dalam hal ini adalah menurunkan Specular hingga 30% dari aslinya atau menggunakan pengaturan konversi fbxAssumeMetallic.
  • Materi PBR baru-baru ini ditambahkan ke alat pembuatan konten Maya dan 3DS Max. Materi menggunakan properti kotak hitam khusus yang ditentukan pengguna untuk meneruskannya ke FBX. Azure Remote Rendering tidak membaca properti tersebut karena tidak didokumenkan dan formatnya adalah sumber tertutup.

Langkah berikutnya