Cabang di naungan
Kata kunci Shader

Varietas Shader

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 dan kerugian dari varian naungan

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.

Jumlah varian 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.

Grafik API

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.

Jumlah program naungan

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:

  • Sebuah aset naungan compute mendefinisikan program naungan tunggal.
  • Dalam naungan berkode tangan, jumlah program naungan tergantung pada kode Anda. Total terdiri dari:
    • Semua tahap naungan di semua Passes di file sumber itu sendiri. Misalnya, setiap tahap simpul mendefinisikan satu program naungan; setiap tahap fragmen mendefinisikan satu program naungan; dan sebagainya.
    • Semua tahap naungan di semua Passes dalam ketergantungan file sumber. Ini terdiri dari semua fallback shaders, dan semua Pass yang disertakan menggunakan UsePass command.
  • Dalam naungan Shader Graph, jumlah program naungan tergantung pada kode yang dihasilkan Unity dari grafik Anda. Untuk melihat kode naungan yang menghasilkan Unity, klik konteks aset Shader Graph dan pilih See generated code. Anda kemudian dapat menentukan jumlah total program naungan dengan cara yang sama bahwa Anda akan untuk naungan yang dikodekan tangan.

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.

Kata kunci yang mempengaruhi program naungan

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:

  • WARNA_RED
  • WARNA_GREEN
  • WARNA_BLUE

Set ini mengandung empat kata kunci varian naungan:

  • QUALITY_LOW
  • KUALITAS_MEDIUM
  • QUALITY_HIGH
  • KUALITAS_ULTRA

Program naungan yang dipengaruhi oleh kata kunci varian naungan mereka akan menghasilkan dua belas varian berikut:

  • WARNA_RED dan KUALITAS_LOW
  • WARNA_RED dan KUALITAS_MEDIUM
  • WARNA_RED dan KUALITAS_HIGH
  • WARNA_RED dan KUALITAS_ULTRA
  • COLOR_GREEN dan KUALITAS_LOW
  • COLOR_GREEN dan KUALITAS_MEDIUM
  • COLOR_GREEN dan KUALITAS_HIGH
  • COLOR_GREEN dan KUALITAS_ULTRA
  • WARNA_BLUE dan KUALITAS_LOW
  • WARNA_BLUE dan KUALITAS_MEDIUM
  • WARNA_BLUE dan KUALITAS_HIGH
  • WARNA_BLUE dan KUALITAS_ULTRA

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.

Deduplikasi varian naungan

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.

Cabang di naungan
Kata kunci Shader