Varietas shader, juga kadang-kadang disebut permutasi shaderProgram yang berjalan di GPU. More info
Lihat di Glossary, adalah salah satu cara memperkenalkan perilaku kondisional ke kode naungan.
Unity mengkompilasi file sumber naungan ke program naungan. Setiap program naungan yang disusun memiliki satu atau lebih variants: berbagai versi program naungan untuk kondisi yang berbeda. Pada runtime, Unity menggunakan varian yang sesuai dengan persyaratan saat ini. Anda mengkonfigurasi varian menggunakan kata kunci warna.
Untuk gambaran umum dari kondisional dalam kode naungan dan ketika menggunakan teknik mana, lihat Kondisi dalam kode naungan. Untuk informasi lebih lanjut tentang bagaimana varian naungan beban Unity, lihat Shader loading.
Shaders dengan sejumlah besar varian disebut “mega shaders” atau “uber shaders”. Standar Unity adalah contoh dari naungan tersebut.
Keuntungan utama dari varian naungan adalah bahwa mereka memungkinkan Anda untuk menggunakan kondisi jangka waktu dalam program naungan Anda, tanpa dampak kinerja GPU dari dynamic branching. Kerugian utama dari varian naungan adalah bahwa sejumlah besar dari mereka dapat menyebabkan kedua membangun waktu dan menjalankan masalah kinerja.
Ketika Unity menciptakan varian naungan, itu menggunakan static branching untuk membuat beberapa program warna kecil, khusus. Pada runtime, Unity menggunakan program naungan yang sesuai dengan kondisi. Ini berarti bahwa Anda dapat menggunakan varian naungan untuk kode yang kemungkinan akan menghasilkan kinerja GPU yang berkurang di cabang dinamis, tanpa menderita penalti kinerja GPU.
Namun, sejumlah besar varian dapat mengakibatkan peningkatan waktu build, ukuran file, penggunaan memori runtime, dan waktu pemuatan. Hal ini juga mengarah pada kompleksitas yang lebih besar ketika praloading manual ("prewarming"). Ketika sebuah proyek mengandung sejumlah varian warna yang sangat besar, masalah ini dapat menyebabkan masalah yang signifikan dengan kinerja dan alur kerja.
Sitemap Sangat mudah untuk secara tidak sengaja menciptakan sejumlah besar varian naungan, yang dapat menyebabkan masalah kinerja yang signifikan. Oleh karena itu sangat penting untuk memahami Warning:, bagaimana Unity menentukan jumlah varian naungan, dan bagaimana untuk mengecualikan ("strip") varian yang tidak diinginkan dari kompilasi.ketika menggunakan jenis kondisional lain di naungan.
Pada waktu build, Unity mengkompilasi satu set varian naungan untuk setiap API grafis untuk target build saat ini. Jumlah varian untuk setiap kombinasi API grafis dan membangun target tergantung pada file sumber naungan Anda, dan penggunaan kata kunci naungan Anda.
Unity mengkompilasi satu set varian naungan untuk setiap API grafis dalam daftar untuk target build saat ini. Naungan berbeda untuk setiap kombinasi membangun target dan API grafis; misalnya, Unity mengkompilasi warna yang berbeda untuk Logam pada iOS daripada untuk Logam pada macOS.
Beberapa program naungan atau kata kunci mungkin hanya menargetkan API grafis yang diberikan atau target build yang diberikan, sehingga jumlah total varian untuk setiap kombinasi API grafis dan target build dapat berbeda; namun, proses untuk membandingkan varian ini sama.
Untuk melihat dan mengedit daftar API grafis untuk target build Anda saat ini, gunakan jendela Pengaturan PemainPengaturan yang memungkinkan Anda mengatur berbagai pilihan khusus pemain untuk permainan akhir yang dibangun oleh Unity. More info
Lihat di Glossary, atau API PlayerSettings.
Unity harus menentukan berapa banyak program naungan untuk mengkompilasi untuk kombinasi saat ini membangun target dan API grafis.
Untuk setiap file sumber naungan yang disertakan dalam build Anda, Unity menentukan berapa banyak program naungan unik yang mendefinisikan:
Sitemap File sumber naungan disertakan dalam build jika direferensikan dalam Note: dalam membangun, direferensikan oleh sesuatu dalam folder sceneAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
Lihat di Glossary, atau termasuk dalam bagian Resources dari jendela Always-included shaders.Pengaturan Grafik window.
Ketika Unity telah menentukan berapa banyak program naungan itu harus mengkompilasi untuk target build saat ini dan API grafis, kemudian menentukan berapa banyak varian naungan itu harus mengkompilasi untuk setiap program naungan.
Untuk setiap program naungan, Unity menentukan kombinasi kata kunci naungan yang menghasilkan varian yang berbeda. Ini terdiri dari:
Jumlah varian naungan yang Unity kompilasi untuk program naungan adalah produk dari set kata kunci; yang dikatakan, Unity menyusun satu varian untuk setiap kombinasi yang mencakup satu elemen dari setiap set.
Misalnya, set ini berisi tiga kata kunci varian naungan:
Set ini mengandung empat kata kunci varian naungan:
Program naungan yang dipengaruhi oleh kata kunci varian naungan mereka akan menghasilkan dua belas varian berikut:
Jumlah varian yang disatukan kompilasi dapat tumbuh dengan sangat cepat saat Anda menambahkan lebih banyak set kata kunci varian naungan. Istilah untuk pertumbuhan yang sangat cepat ini adalah ledakan combinatorial.
Misalnya, pertimbangkan kasus penggunaan yang cukup khas, di mana naungan memiliki sejumlah set kata kunci varian naungan yang mengandung dua kata kunci masing-masing (<feature name>_ON
dan <feature name>_OFF
). Jika naungan memiliki dua set kata kunci seperti itu, hasil ini dalam empat varian. Jika naungan memiliki sepuluh set kata kunci tersebut, hasil ini dalam varian 1024.
Setelah kompilasi, Unity secara otomatis mengidentifikasi varian identik dalam Pass yang sama, dan memastikan bahwa varian identik ini menunjuk ke bytecode yang sama. Ini disebut deduplication.
Deduplikasi mencegah varian identik di Pass yang sama dari meningkatnya ukuran file; namun, varian identik masih menghasilkan pekerjaan yang terbuang selama kompilasi, dan meningkatkan penggunaan memori dan waktu pemuatan naungan pada runtime. Dengan pikiran ini, selalu terbaik untuk garis varian yang tidak diinginkan.