Shader standar MRTK2

Standard shader examples

Sistem bayangan STANDAR MRTK2 menggunakan satu shader fleksibel yang dapat mencapai visual yang mirip dengan Unity Standard Shader, menerapkan prinsip Sistem Fluent Design, dan tetap berkinerja pada perangkat realitas campuran.

Contoh adegan

Anda dapat menemukan contoh bahan shader di adegan MaterialGallery di bawah MRTK/Examples/Demos/StandardShader/Scenes/. Semua bahan dalam adegan ini menggunakan shader MRTK/Standard.

Material Gallery

Anda dapat menemukan adegan perbandingan untuk membandingkan dan menguji shader MRTK/Standard terhadap contoh shader Unity/Standard di adegan StandardMaterialComparison di bawah MRTK/Examples/Demos/StandardShader/Scenes/.

Material Comparison

Arsitektur

Sistem bayangan MRTK/Standard adalah "uber shader" yang menggunakan fitur varian program shader Unity untuk menghasilkan kode shader optimal secara otomatis berdasarkan properti material. Saat pengguna memilih properti material di pemeriksa materi, mereka hanya dikenakan biaya performa untuk fitur yang telah diaktifkan.

Pemeriksa bahan

Pemeriksa bahan kustom ada untuk shader MRTK/Standard yang disebut MixedRealityStandardShaderGUI.cs. Inspektur secara otomatis mengaktifkan/menonaktifkan fitur shader, berdasarkan pilihan pengguna dan ajudan dalam menyiapkan status render. Untuk informasi lebih lanjut tentang setiap fitur , silakan arahkan mouse ke atas setiap properti di Unity Editor untuk tipsalat.

Material Inspector

Bagian pertama dari inspektur mengontrol status render bahan. Mode Penyajian menentukan kapan dan bagaimana materi akan dirender. Tujuan dari shader MRTK/Standard adalah untuk mencerminkan mode penyajian yang ditemukan di shader Unity/Standard. Shader MRTK/Standard juga menyertakan mode penyajian Aditif dan Mode penyajian kustom untuk kontrol pengguna yang lengkap.

Mode Penyajian Deskripsi
Buram (Default) Cocok untuk objek padat normal tanpa area transparan.
Potongan Memungkinkan pembuatan efek transparan yang memiliki tepi keras antara area buram dan transparan. Dalam mode ini, tidak ada area semi transparan, teksturnya 100% buram, atau tidak terlihat. Ini berguna saat menggunakan transparansi untuk membuat bentuk bahan, seperti vegetasi.
Memudar Memungkinkan nilai transparansi untuk sepenuhnya memudarkan objek, termasuk sorotan atau pantulan spekular apa pun yang mungkin dimilikinya. Mode ini berguna jika Anda ingin menganimasikan objek yang memudar masuk atau keluar. Tidak cocok untuk merender bahan transparan yang realistis seperti plastik bening atau kaca karena pantulan dan sorotan juga akan memudar.
Transparan Cocok untuk merender bahan transparan yang realistis seperti plastik bening atau kaca. Dalam mode ini, bahan itu sendiri akan mengambil nilai transparansi (berdasarkan saluran alfa tekstur dan alfa warna warna warna). Namun, pantulan dan sorotan pencahayaan akan tetap terlihat pada kejelasan penuh seperti halnya dengan bahan transparan nyata.
Penambahan Mengaktifkan mode penpaduan aditif, yang menjumlahkan warna piksel sebelumnya dengan warna piksel saat ini. Ini adalah mode transparansi yang disukai untuk menghindari masalah pengurutan transparansi.
Kustom Memungkinkan setiap aspek mode penyajian dikontrol secara manual. Hanya untuk penggunaan tingkat lanjut.

Rendering Modes

Cull Mode Deskripsi
Nonaktif Menonaktifkan pemisahan wajah. Pemisahan hanya boleh diatur ke Nonaktif ketika jala dua sisi diperlukan.
Front Memungkinkan pemisahan wajah depan.
Kembali (Default) Mengaktifkan penahan wajah belakang. Pemecahan wajah belakang harus diaktifkan sesering mungkin untuk meningkatkan performa penyajian.

Performa

Salah satu keuntungan utama menggunakan shader MRTK Standard dibandingkan shader standar Unity adalah performa. MRTK Standard Shader dapat diperluas untuk hanya menggunakan fitur yang diaktifkan. Namun, shader MRTK Standard juga telah ditulis untuk memberikan hasil estetika yang sebanding sebagai shader Unity Standard, tetapi dengan biaya yang jauh lebih rendah. Salah satu cara sederhana untuk membandingkan performa shader adalah melalui jumlah operasi yang perlu dilakukan pada GPU. Tentu saja, besarnya perhitungan dapat berfluktuasi oleh fitur yang diaktifkan dan konfigurasi penyajian lainnya. Namun, secara umum, shader MRTK Standard melakukan komputasi yang jauh lebih sedikit daripada shader Unity Standard.

Contoh statistik shader Standar Unity

Unity Standard Shader Statistics

Contoh statistik shader MRTK Standard

MRTK Standard Shader Statistics

Catatan

Hasil ini dapat dihasilkan dengan memilih dan melihat aset shader di inspektur Unity, lalu mengklik tombol Kompilasi dan tampilkan kode .

Pencahayaan

MRTK/Standard menggunakan perkiraan sederhana untuk pencahayaan. Karena shader ini tidak menghitung kebenaran fisik dan konservasi energi, shader ini merender dengan cepat dan efisien. Blinn-Phong adalah teknik pencahayaan utama yang dipadukan dengan Fresnel dan pencahayaan berbasis gambar ke perkiraan pencahayaan berbasis fisik. Shader mendukung teknik pencahayaan berikut:

Lampu arah

Shader akan menghormati arah, warna, dan intensitas Unity Directional Light pertama di adegan (jika diaktifkan). Lampu titik dinamis, lampu spot, atau cahaya Unity lainnya tidak akan dipertimbangkan dalam pencahayaan real time.

Harmonik bola

Shader akan menggunakan Light Probes untuk mempertanyakan lampu di adegan menggunakan Spherical Harmonics, jika diaktifkan. Perhitungan harmonik bulat dilakukan per vertex untuk mengurangi biaya perhitungan.

Lightmapping

Untuk pencahayaan statis, shader akan menghormati lightmap yang dibangun oleh sistem Lightmapping Unity. Cukup tandai perender sebagai statis (atau lightmap statis) untuk menggunakan lightmap.

Lampu hover

Cahaya kedekatan

Dukungan Alur Render yang Dapat Ditulis Ringan

MRTK berisi jalur peningkatan untuk memungkinkan pengembang memanfaatkan Lightweight Scriptable Render Pipeline (LWRP) Unity dengan shader MRTK. Diuji dalam paket Unity 2019.1.1f1 dan Lightweight RP 5.7.2. atau instruksi tentang memulai dengan LWRP, lihat halaman ini.

Untuk melakukan peningkatan MRTK, pilih: Mixed Reality Toolkit -> Utilitas -> Tingkatkan MrTK Standard Shader untuk Lightweight Render Pipeline

lwrp upgrade

Setelah peningkatan terjadi, shader MRTK/Standard akan diubah dan bahan magenta (kesalahan shader) harus diperbaiki. Untuk memverifikasi peningkatan berhasil terjadi, periksa konsol untuk: Upgraded Assets/MixedRealityToolkit/StandardAssets/Shaders/MixedRealityStandard.shader untuk digunakan dengan Lightweight Render Pipeline.

Dukungan UGUI

Sistem bayangan MRTK Standard bekerja dengan sistem UI bawaan Unity. Pada komponen UI Unity, matriks unity_ObjectToWorld bukan matriks transformasi dari transformasi lokal yang hidup komponen Grafis tetapi kanvas induknya. Banyak efek shader MRTK/Standar memerlukan skala objek untuk diketahui. Untuk mengatasi masalah ini, ScaleMeshEffect.cs akan menyimpan informasi penskalaan ke dalam atribut saluran UV selama konstruksi jala UI.

Perhatikan, saat menggunakan komponen Unity Image, disarankan untuk menentukan "None (Sprite)" untuk Gambar Sumber untuk mencegah Unity UI menghasilkan simpul tambahan.

Kanvas dalam MRTK akan meminta penambahan ScaleMeshEffect.cs ketika diperlukan:

scale mesh effect

Penggabung tekstur

Untuk meningkatkan paritas dengan nilai unity Standard shader per pixel metallic, smoothness, emissive, dan oklusi semuanya dapat dikontrol melalui pengemasan saluran. Contohnya:

channel map example

Saat Anda menggunakan pengemasan saluran, Anda hanya perlu mengambil sampel dan memuat satu tekstur ke dalam memori, bukan empat tekstur terpisah. Ketika Anda menulis peta tekstur Anda dalam program seperti Substance atau Photoshop, Anda dapat mengemasnya seperti berikut:

Saluran Properti
Merah Logam
Hijau Halangan
Biru Emisi (Greyscale)
Alpha Kelancaran

Atau, Anda dapat menggunakan MRTK Texture Combiner Tool. Untuk membuka alat, pilih: Mixed Reality Toolkit -> Utilitas -> Texture Combiner yang akan membuka jendela di bawah ini:

texture combiner example

Jendela ini dapat diisi secara otomatis dengan memilih shader Unity Standard dan mengklik "Autopopulate from Standard Material." Atau, Anda dapat menentukan tekstur (atau nilai konstanta) secara manual per saluran merah, hijau, biru, atau alfa. Kombinasi tekstur dipercepat GPU dan tidak memerlukan tekstur input agar dapat diakses CPU.

Dokumentasi fitur tambahan

Di bawah ini adalah detail tambahan tentang beberapa detail fitur yang tersedia dengan shader MRTK/Standard.

Kliping primitif

primitive clipping

kerangka Mesh

Banyak teknik kerangka jala dilakukan menggunakan teknik pasca pemrosesan . Pasca pemrosesan memberikan kerangka kualitas yang bagus, tetapi bisa sangat mahal di banyak perangkat Mixed Reality. Anda dapat menemukan adegan yang menunjukkan penggunaan kerangka jala di adegan OutlineExamples di bawah MRTK/Examples/Demos/StandardShader/Scenes/.

Mesh Outline

MeshOutline.cs dan MeshOutlineHierarchy.cs dapat digunakan untuk merender kerangka di sekitar perender jala. Mengaktifkan komponen ini memperkenalkan pass render tambahan dari objek yang diuraikan, tetapi dirancang untuk berjalan dengan baik pada perangkat Mixed Reality seluler dan tidak menggunakan proses posting apa pun. Batasan efek ini termasuk tidak bekerja dengan baik pada objek yang tidak kedap air (atau diperlukan dua sisi) dan masalah pengurutan kedalaman dapat terjadi pada objek yang tumpang tindih.

Perilaku kerangka dirancang untuk digunakan bersama dengan shader MRTK/Standard. Bahan kerangka biasanya berwarna terang padat, tetapi dapat dikonfigurasi untuk mencapai berbagai efek. Konfigurasi default bahan kerangka adalah sebagai berikut:

Mesh Outline Material
  1. Tulis Kedalaman - harus dinonaktifkan untuk bahan kerangka untuk memastikan kerangka tidak mencegah penyajian objek lain.
  2. Vertex Extrusion - perlu diaktifkan untuk merender kerangka.
  3. Gunakan Smooth Normals - pengaturan ini bersifat opsional untuk beberapa jala. Ekstrusi terjadi dengan memindahkan puncak di sepanjang puncak normal, pada beberapa jala yang menonjol di sepanjang normal default akan menyebabkan penghentian dalam kerangka. Untuk memperbaiki penghentian ini, Anda dapat mencentang kotak ini untuk menggunakan sekumpulan normal yang dihaluskan lain yang dihasilkan oleh MeshSmoother.cs

MeshSmoother.cs adalah komponen yang dapat digunakan untuk secara otomatis menghasilkan normal yang dihaluskan pada jala. Metode ini mengelompokkan simpul dalam jala yang berbagi lokasi yang sama di ruang kemudian rata-rata normal simpul tersebut. Proses ini membuat salinan jala yang mendasar dan harus digunakan hanya jika diperlukan.

Smooth Normals Outline
  1. Normal halus yang dihasilkan melalui MeshSmoother.cs.
  2. Normal default yang digunakan, perhatikan artefak di sekitar sudut kubus.

Pengujian stensil

Dukungan pengujian stensil bawaan yang dapat dikonfigurasi untuk mencapai berbagai efek. Seperti portal:

stencil test

Dukungan warna instans

Dukungan warna instans untuk memberikan ribuan jala instans GPU properti material unik:

instanced properties

Pemetaan Triplanar

Pemetaan Triplanar adalah teknik untuk secara terprogram tekstur jala. Sering digunakan dalam medan, jala tanpa UV, atau sulit untuk membongkar bentuk. Implementasi ini mendukung proyeksi ruang dunia atau lokal, spesifikasi blending smoothness, dan dukungan peta normal. Perhatikan, setiap tekstur yang digunakan memerlukan 3 sampel tekstur, jadi gunakan dengan hemat dalam situasi kritis performa.

triplanar

Ekstrusi puncak

Ekstrusi puncak di ruang dunia. Berguna untuk memvisualisasikan volume pembatas yang diekstrusi atau transisi jala masuk/keluar.

normal map scale 1

Lain-lain

Kotak centang untuk mengontrol pengoptimalan albedo. Karena operasi albedo pengoptimalan dinonaktifkan ketika tidak ada tekstur albedo yang ditentukan. Ini berguna untuk mengontrol pemuatan tekstur jarak jauh.

Cukup centang kotak ini:

albedo assignment

Tekstur kliping per piksel, alias anti berbasis tepi lokal, dan penskalaan peta normal didukung.

normal map scale 2

Lihat juga