Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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:
- MSFT_packing_occlusionRoughnessMetallic
- KHR_materials_unlit: Sesuai dengan materi warna. Untuk materi emissive, disarankan untuk menggunakan ekstensi ini.
- KHR_materials_pbrSpecularGlossiness: Alih-alih menyediakan tekstur metallic-roughness, Anda dapat menyediakan tekstur diffuse-specular-glossiness. Implementasi Azure Remote Rendering secara langsung mengikuti rumus konversi dari ekstensi.
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,0721DiffuseBrightness
= 0,299 *Diffuse
.Merah2 + 0,587 *Diffuse
.Hijau2 + 0,114 *Diffuse
.Biru2SpecularBrightness
= 0,299 *Specular
.Merah2 + 0,587 *Specular
.Hijau2 + 0,114 *Specular
.Biru2SpecularStrength
= 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.Blue
TransparentColor.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 menurunkanSpecular
hingga 30% dari aslinya atau menggunakan pengaturan konversi fbxAssumeMetallic. - Materi PBR baru-baru ini ditambahkan ke alat pembuatan konten
Maya
dan3DS 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.