Materi PBR
Bahan PBR adalah salah satu jenis bahan yang didukung di Azure Remote Rendering. Mereka digunakan untuk jala segitiga yang harus menerima pencahayaan realistis. Cloud titik di sisi lain tidak terpengaruh oleh pencahayaan dinamis.
PBR adalah singkatan dari Physically Based Rendering dan berarti bahwa bahan menggambarkan sifat visual permukaan dengan cara yang masuk akal secara fisik, sehingga hasil yang realistis dimungkinkan dalam semua kondisi pencahayaan. Sebagian besar mesin game modern dan alat pembuatan konten mendukung materi PBR karena dianggap sebagai perkiraan terbaik dari skenario dunia nyata untuk penyajian real time.
Ide inti dari penyajian berbasis fisik adalah menggunakan properti BaseColor, Metalness, dan Roughness untuk meniru berbagai bahan dunia nyata. Deskripsi terperinci tentang PBR berada di luar cakupan artikel ini. Untuk informasi selengkapnya tentang PBR, lihat sumber lain.
Namun, bahan PBR bukan solusi universal. Ada bahan yang memantulkan warna secara berbeda tergantung pada sudut pandang. Misalnya, beberapa kain atau cat mobil. Jenis bahan ini tidak ditangani oleh model PBR standar, dan saat ini tidak didukung oleh Azure Remote Rendering. Batasan ini mencakup ekstensi PBR, seperti Thin-Film (permukaan berlapis-lapis) dan Clear-Coat (untuk cat mobil).
Properti bahan PBR
Properti material berikut diekspos dalam API runtime, misalnya pada kelas C# PbrMaterial atau kelas C++ PbrMaterial.
PbrFlags
: Bendera fitur misc dapat digabungkan dalam masker bit ini untuk mengaktifkan fitur berikut:TransparentMaterial
: Untuk bahan PBR, hanya ada satu pengaturan transparansi: diaktifkan atau tidak. Tingkat keburaman ditentukan oleh saluran alfa warna albedo. Saat diaktifkan, metode penyajian yang lebih kompleks dipanggil untuk menggambar permukaan semi transparan. Azure Remote Rendering menerapkan transparansi independen urutan (OIT) yang benar. Geometri transparan mahal untuk dirender. Jika Anda hanya perlu lubang di permukaan, misalnya untuk daun pohon, lebih baik menggunakan kliping alfa sebagai gantinya.
Perhatikan pada gambar di atas, bagaimana bola paling kanan sepenuhnya transparan, tetapi pantulannya masih terlihat.
Penting
Jika ada bahan yang seharusnya dialihkan dari buram ke transparan saat runtime bahasa umum, perender harus menggunakan mode penyajian TileBasedComposition. Batasan ini tidak berlaku untuk bahan yang awalnya diubah menjadi bahan transparan.
UseVertexColor
: Jika jala berisi vertex warna dan opsi ini diaktifkan, warna jala vertex dikalikan menjadiAlbedoColor
danAlbedoMap
. Secara defaultUseVertexColor
dinonaktifkan.DoubleSided
: Jika dua sisi diatur ke true, segitiga dengan bahan ini dirender bahkan jika kamera melihat wajah belakang mereka. Untuk penerangan bahan PBR juga dihitung dengan baik untuk wajah belakang. Secara default, opsi ini dinonaktifkan. Lihat juga Single-sided rendering.SpecularHighlights
: Mengaktifkan sorotan spekular untuk materi ini. Secara default,SpecularHighlights
bendera diaktifkan.AlphaClipped
: Mengaktifkan hard cut-out berdasarkan per piksel, berdasarkan nilai alfa berada di bawah nilaiAlphaClipThreshold
(lihat di bawah). Ini juga berfungsi untuk bahan buram.FresnelEffect
: Bendera bahan ini memungkinkan efek fresnel aditif pada bahan masing-masing. Tampilan efek diatur oleh parameterFresnelEffectColor
fresnel lainnya danFresnelEffectExponent
dijelaskan di bawah ini.TransparencyWritesDepth
: JikaTransparencyWritesDepth
bendera diatur pada bahan dan bahannya transparan, objek yang menggunakan bahan ini juga akan berkontribusi pada buffer kedalaman akhir. Lihat bendera bahan PBR transparan di bagian berikutnya. Mengaktifkan fitur ini disarankan jika kasus penggunaan Anda membutuhkan proyeksi ulang tahap akhir yang lebih masuk akal dari scene yang sepenuhnya transparan. Untuk scene campuran buram/transparan, pengaturan ini mungkin memperkenalkan perilaku proyeksi ulang yang tidak masuk akal atau artefak proyeksi ulang. Karena alasan ini, pengaturan default dan yang disarankan untuk kasus penggunaan umum adalah menonaktifkan bendera ini. Nilai kedalaman tertulis diambil dari lapisan kedalaman per piksel objek yang paling dekat dengan kamera.
AlbedoColor
: Warna ini dikalikan dengan warna lain, sepertiAlbedoMap
warna atau vertex . Jika transparansi diaktifkan pada bahan, saluran alfa digunakan untuk menyesuaikan tingkat keburaman, dengan1
berarti sepenuhnya buram dan0
berarti sepenuhnya transparan. Warna albedo default adalah putih buram.Catatan
Ketika bahan PBR sepenuhnya transparan, seperti permukaan kaca yang sangat bersih, itu masih mencerminkan lingkungan. Spot terang seperti matahari masih terlihat di pantulan. Ini berbeda untuk bahan warna.
AlphaClipThreshold
: JikaAlphaClipped
bendera diatur padaPbrFlags
properti, semua piksel di mana nilai alfa albedo lebih rendah dariAlphaClipThreshold
yang tidak akan digambar. Kliping alfa dapat digunakan bahkan tanpa mengaktifkan transparansi dan jauh lebih cepat untuk dirender. Bahan yang diklip alfa masih lebih lambat untuk dirender daripada bahan yang sepenuhnya buram. Secara default, kliping alfa dinonaktifkan.TexCoordScale
danTexCoordOffset
: Skala dikalikan ke dalam koordinat tekstur UV, offset ditambahkan ke dalamnya. Dapat digunakan untuk merentangkan dan menggeser tekstur. Skala default adalah (1, 1) dan offset adalah (0, 0).FresnelEffectColor
: Warna fresnel yang digunakan untuk bahan ini. Hanya penting ketika bendera efek fresnel telah diatur pada materi ini (lihat di atas). Properti ini mengontrol warna dasar kilau fresnel (lihat efek fresnel untuk penjelasan lengkap). Saat ini hanya nilai saluran RGB yang penting dan nilai alfa akan diabaikan.FresnelEffectExponent
: Eksponen fresnel yang digunakan untuk bahan ini. Hanya penting ketika bendera efek fresnel telah diatur pada materi ini (lihat di atas). Properti ini mengontrol penyebaran kilau fresnel. Nilai minimum 0,01 menyebabkan penyebaran di seluruh objek. Nilai maksimum 10.0 membatasi kilau hanya ke tepi yang paling merumput yang terlihat.PbrVertexAlphaMode
: Menentukan bagaimana saluran alfa warna vertex digunakan. Mode berikut disediakan:Occlusion
: Nilai alfa mewakili nilai oklusi sekitar dan oleh karena itu hanya memengaruhi pencahayaan tidak langsung dari kotak langit.LightMask
: Nilai alfa berfungsi sebagai faktor skala untuk jumlah keseluruhan pencahayaan yang diterapkan, yang berarti alfa dapat digunakan untuk menggelapkan area. Ini mempengaruhi pencahayaan tidak langsung dan langsung.Opacity
: Alfa mewakili seberapa buram (1,0) atau transparan (0,0) bahan.
NormalMap
: Untuk mensimulasikan detail mendetail, peta normal dapat disediakan.NormalMapScale
: Nilai skalar yang menskalakan kekuatan peta normal. Nilai 1,0 mengambil peta normal apa adanya, nilai 0 membuat permukaan tampak datar. Nilai yang lebih besar dari 1,0 membesar-besarkan perturbasi peta normal.Roughness
danRoughnessMap
: Kekasaran mendefinisikan seberapa kasar atau halus permukaannya. Permukaan kasar menyebarkan cahaya ke lebih banyak arah daripada permukaan halus, yang membuat pantulan buram dan bukan tajam. Rentang nilainya dari0.0
ke1.0
. SaatRoughness
sama dengan0.0
, pantulan akan tajam. SaatRoughness
sama dengan0.5
, pantulan akan menjadi buram. Jika kedua nilai roughness dan roughness map diberikan, nilai akhir akan menjadi produk dari keduanya.Metalness
danMetalnessMap
: Dalam fisika, properti ini sesuai dengan apakah permukaan konduktif atau dielektrik. Bahan konduktif memiliki sifat reflektif yang berbeda, dan cenderung reflektif tanpa warna albedo. Dalam bahan PBR, properti ini memengaruhi seberapa banyak permukaan mencerminkan lingkungan sekitarnya. Rentang nilai dari0.0
hingga1.0
. Ketika metalness adalah0.0
, warna albedo sepenuhnya terlihat, dan bahannya terlihat seperti plastik atau keramik. Saat metalness0.5
, itu terlihat seperti logam yang dicat. Ketika logam adalah1.0
, permukaan hampir sepenuhnya kehilangan warna albedonya, dan hanya mencerminkan lingkungan sekitarnya. Misalnya, jikametalness
adalah1.0
danroughness
adalah0.0
kemudian permukaan terlihat seperti cermin dunia nyata. Jika kedua nilai metalness dan metalness map diberikan, nilai akhir akan menjadi produk dari keduanya.Pada gambar di atas, bola di sudut kanan bawah terlihat seperti bahan logam nyata, kiri bawah terlihat seperti keramik atau plastik. Warna albedo juga berubah sesuai dengan sifat fisiknya. Dengan meningkatnya roughness, bahan kehilangan ketajaman pantulan.
AOMap
danAOScale
: Oklusi sekitar membuat objek dengan celah terlihat lebih realistis dengan menambahkan bayangan ke area terakludasi. Nilai oklusi berkisar dari0.0
hingga1.0
, di mana0.0
berarti kegelapan (oklusi) dan1.0
berarti tidak ada oklusi. Jika tekstur 2D disediakan sebagai peta oklusi, efeknya diaktifkan danAOScale
bertindak sebagai pengali.
Penggantian material warna selama konversi
Subset properti bahan warna dapat ditimpa selama konversi model melalui file penimpaan materi. Tabel berikut ini memperlihatkan pemetaan antara properti runtime yang didokumenkan di atas dan nama properti terkait dalam file penimpaan:
Nama properti material | Nama properti dalam file penggantian |
---|---|
PbrFlags.TransparentMaterial |
transparent |
PbrFlags.AlphaClipped |
alphaClipEnabled |
PbrFlags.UseVertexColor |
useVertexColor |
PbrFlags.DoubleSided |
isDoubleSided |
PbrFlags.TransparencyWritesDepth |
transparencyWritesDepth |
AlbedoColor |
albedoColor |
TexCoordScale |
textureCoordinateScale |
TexCoordOffset |
textureCoordinateOffset |
NormalmapScale |
normalMapScale |
Metalness |
metalness |
Roughness |
roughness |
AlphaClipThreshold |
alphaClipThreshold |
Detail teknis
Azure Remote Rendering menggunakan BRDF aspek mikro Cook-Torrance dengan GGX NDF, Schlick Fresnel, dan istilah visibilitas berkorelasi GGX Smith dengan istilah difus Lambert. Model ini adalah standar industri de facto saat ini. Untuk detail lebih mendalam, lihat artikel ini: Penyajian berbasis fisik - Cook Torrance
Alternatif untuk model PBR Metalness-Roughness yang digunakan di Azure Remote Rendering adalah model PBR Spekular-Glossiness. Model ini dapat mewakili berbagai bahan yang lebih luas. Namun, harganya lebih mahal, dan biasanya tidak berfungsi dengan baik untuk kasus real time. Tidak selalu mungkin untuk mengonversi dari Specular-Glossiness ke Metalness-Roughness karena ada pasangan nilai (Diffuse, Specular) yang tidak dapat dikonversi ke (BaseColor, Metalness). Konversi ke arah lain lebih sederhana dan lebih tepat, karena semua pasangan (BaseColor, Metalness) sesuai dengan pasangan yang ditentukan dengan baik (Diffuse, Specular).
Dokumentasi API
- Kelas C# PbrMaterial
- C# RenderingConnection.CreateMaterial()
- C++ kelas PbrMaterial
- C++ RenderingConnection::CreateMaterial()