Shader kompilasi
Cabang, varian, dan kata kunci

Kompilasi naungan asinkron

kompilasi Asynchronous shaderProgram yang berjalan di GPU. More info
Lihat di Glossary
adalah fitur Editor-only yang dapat meningkatkan alur kerja Anda ketika Anda memiliki kompleks Shader objectsContoh kelas Shader, objek Shader adalah wadah untuk program naungan dan instruksi GPU, dan informasi yang memberi tahu Unity bagaimana menggunakannya. Gunakan mereka dengan bahan untuk menentukan penampilan adegan Anda. More info
Lihat di Glossary
dengan banyak varian naungan.

Halaman ini berisi informasi berikut:

Overview

Objek shader dapat mengandung ratusan atau ribuan varian warnaSebuah verion dari program naungan yang Unity menghasilkan sesuai dengan kombinasi khusus kata kunci naungan dan status mereka. Objek Shader dapat mengandung beberapa varian naungan. More info
Lihat di Glossary
. Jika Editor disusun semua varian saat memuat objek Shader, proses impor akan sangat lambat. Alih-alih, Editor menyusun varian naungan atas permintaan, pertama kali itu bertemu mereka.

Mengkombinasikan varian naungan ini dapat menyebabkan editor untuk bergergaul atau bahkan detik, tergantung pada API grafis dan kompleksitas objek Shader. Untuk menghindari kios-kios ini, Anda dapat menggunakan kompilasi naungan asinkron untuk mengkompilasi varian naungan di latar belakang, dan menggunakan benda-benda Shader placeholder dalam waktu maksud.

Bagaimana kompilasi naungan asinkron bekerja

kompilasi naungan asinkron bekerja seperti ini:

  1. Ketika editor pertama kali menemukan varian naungan yang tak tertandingi, menambahkan varian naungan ke antrian kompilasi pada benang kerja. Bar kemajuan di sudut kanan bawah Editor menunjukkan status antrian kompilasi.
  2. Sementara varian naungan memuat, Editor render geometri dengan naungan placeholder, yang muncul sebagai warna cyan polos.
  3. Ketika editor selesai membandingkan varian naungan, itu membuat geometri menggunakan varian naungan.
Unity renders shader variants that are still compiling with a cyan dummy Shader until compilation has finished. The bottom right progress bar indicates the compilation queue progress.
Satuan renders varian naungan yang masih sesuai dengan cyan dummy Shader sampai kompilasi selesai. bar kemajuan kanan bawah menunjukkan kemajuan antrian kompilasi.

Exceptions

Pengecualian berikut berlaku:

  • Jika Anda menggambar geometri menggunakan DrawProcedural atau CommandBuffer.DrawProcedural, Editor tidak menggunakan naungan placeholder. Sebagai gantinya, editor hanya melewatkan rendering geometri ini sampai telah menyusun varian warna.
  • Editor Unity tidak menggunakan kompilasi naungan asinkron dengan operasi BlitJangka waktu singkat untuk transfer blok "bit". Pengoperasian yang mudah adalah proses mentransfer blok data dari satu tempat dalam memori ke yang lain.
    Lihat di Glossary
    . Ini adalah untuk menjamin output yang benar dalam kasus penggunaan yang paling umum.

Mengaktifkan dan menonaktifkan kompilasi naungan asinkron untuk proyek Anda

kompilasi naungan asinkron diaktifkan secara default.

Untuk mengaktifkan atau menonaktifkan kompilasi naungan asinkron:

  1. Go to Edit > Project Settings > Editor.
  2. Di bagian bawah pengaturan Editor, di bawah Shader Compilation, periksa atau hapus kotak cemen.Asynchronous Shader Compilation checkbox.
You can find the check box for Asynchronous Shader Compilation under the Project Settings > Editor > Shader Compilation.
Anda dapat menemukan kotak cek untuk Asynchronous Shader Compilation di bawah Project Settings > Editor > Shader Compilation.

Sitemap Mengaktifkan dan menonaktifkan kompilasi naungan asinkron dengan cara ini hanya mempengaruhi pandangan Note: dan Game secara default. Jika Anda ingin menggunakannya di bagian lain dari Editor, lihat 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
.Alat Editor Kustom dan kompilasi naungan asinkron.

Mengaktifkan dan menonaktifkan kompilasi naungan asinkron untuk panggilan rendering tertentu

Anda dapat mengaktifkan atau menonaktifkan kompilasi naungan asinkron untuk perintah rendering tertentu di C # scriptsSepotong kode yang memungkinkan Anda untuk membuat Komponen Anda sendiri, memicu peristiwa permainan, memodifikasi sifat komponen dari waktu ke waktu dan menanggapi input pengguna dengan cara apa pun yang Anda sukai. More info
Lihat di Glossary
Anda.

Instruksi berikut menunjukkan cara mengaktifkan atau menonaktifkan fitur di ruang lingkup langsung, dan ruang lingkup CommandBuffer.

Di ruang lingkup langsung

Di ruang lingkup langsung, Anda dapat menggunakan ShaderUtil.allowAsyncCompilation.

Untuk melakukan ini:

  1. Simpan keadaan saat ini ShaderUtil.allowAsyncCompilation dalam variabel.
  2. Sebelum Anda memanggil perintah rendering, set ShaderUtil.allowAsyncCompilation ke false.
  3. Hubungi perintah rendering.
  4. Setelah memanggil perintah rendering, mengembalikan ShaderUtil.allowAsyncCompilation kembali ke state sebelumnya.

Berikut adalah contoh kode pseudo:

// Store the current state
bool oldState = ShaderUtil.allowAsyncCompilation;

// Disable async compilation
ShaderUtil.allowAsyncCompilation = false;

// Enter your rendering code that should never use the placeholder shader
Graphics.DrawMesh(...);

// Restore the old state
ShaderUtil.allowAsyncCompilation = oldState;

Dalam lingkup CommandBuffer

Dalam lingkup CommandBuffer, Anda dapat menggunakan ShaderUtil.SetAsyncCompilation dan ShaderUtil.RestoreAsyncCompilation.

  1. Segera sebelum Anda memanggil perintah rendering, hubungi ShaderUtil.SetAsyncCompilation, dan atur ke false. Subsequent perintah di CommandBuffer tidak akan memungkinkan kompilasi asinkron.
  2. Tambahkan perintah rendering ke CommandBuffer.
  3. Setelah perintah rendering, panggilan Shader.Util.RestoreAsyncCompilation untuk mengembalikan keadaan kompilasi naungan asinkron.

Berikut ini adalah contoh:

// Create the CommandBuffer
CommandBuffer cmd = new CommandBuffer();

// Disable async compilation for subsequent commands
ShaderUtil.SetAsyncCompilation(cmd, false);

/// Enter your rendering commands that should never use the placeholder shader
cmd.DrawMesh(...);

// Restore the old state
ShaderUtil.RestoreAsyncCompilation(cmd);

Menonaktifkan kompilasi asinkron untuk objek Shader tertentu

Anda dapat menonaktifkan kompilasi naungan asinkron untuk objek Shader tertentu dengan memaksakan Editor untuk selalu mengkompilasi mereka secara serentak. Ini adalah pilihan yang baik untuk menghasilkan objek Shader yang selalu hadir pada awal rendering Anda, dan yang relatif cepat untuk dikompilasi. Anda kemungkinan besar perlu ini jika Anda melakukan rendering canggih.

Untuk memaksa kompilasi sinkron untuk objek Shader, tambahkan #pragma editor_sync_compilation directive ke kode sumber naungan Anda.

Sitemap Anda tidak boleh memaksa kompilasi sinkron untuk benda-benda Shader kompleks yang menemukan varian naungan baru selama rendering; ini dapat kios rendering di Editor.Note: You should not force synchronous compilation for complex Shader objects that encounter new shader variants during rendering; this can stall rendering in the Editor.

Mendeteksi kompilasi naungan asinkron

Anda dapat menggunakan C# API untuk memantau keadaan kompilasi naungan asinkron, dan melakukan operasi ketika perubahan keadaan ini.

Ini paling mungkin berguna dalam rendering canggih; jika placeholder shader mencemari data yang dihasilkan Anda, Anda dapat menunggu sampai kompilasi selesai, membuang data yang tercemar, dan menggenerasi set baru dengan varian warna yang benar.

Jika Anda sudah tahu bahan mana yang Anda minati, Anda dapat menggunakan ShaderUtil.IsPassCompiled untuk memeriksa status kompilasi dari varian naungan. Ketika status berubah Uncompiled ke Compiled, kompilasi selesai.

Jika Anda tidak tahu bahan mana yang Anda minati, atau jika Anda tertarik dengan lebih dari satu materi, Anda dapat menggunakan ShaderUtil.anythingCompiling untuk mendeteksi apakah Unity membandingkan varian naungan secara asinkron. Ketika perubahan ini dari true hingga false, semua kompilasi saat ini selesai.

rendering lanjutan dalam editor dan kompilasi naungan asinkron

Solusi rendering canggih mengandalkan menghasilkan data sekali dan menggunakannya dalam bingkai nanti. Jika Editor menggunakan naungan placeholder selama proses ini, mungkin mencemari data yang dihasilkan. Jika ini terjadi, Anda dapat melihat warna cyan atau artefak rendering lainnya di tempat kejadian Anda, bahkan setelah varian naungan telah menyelesaikan compiling.

Untuk menghindari ini, Anda dapat:

Alat Editor Kustom dan kompilasi naungan asinkron

Secara default, kompilasi Shader asinkron bekerja di Game dan Scene viewsTampilan interaktif ke dunia yang Anda buat. Anda menggunakan Adegan Lihat untuk memilih dan posisi pemandangan, karakter, kamera, lampu, dan semua jenis lain dari Game Object. More info
Lihat di Glossary
. Jika Anda ingin menggunakannya dalam alat Editor kustom, Anda dapat mengaktifkannya melalui C# untuk alat kustom Anda.

Untuk melakukan ini, Anda dapat mengaktifkan kompilasi naungan asinkron untuk panggilan rendering tertentu.

Kustomisasi menyusun waktu rendering

Anda dapat membuat alat kustom Anda menarik sesuatu selain naungan placeholder untuk setiap bahan. Cara ini, Anda dapat menghindari rendering di cyan polos, dan bukan menggambar sesuatu yang lain sementara varian warna kompilasi.

Untuk memeriksa apakah varian naungan tertentu telah dikompilasi, lihat Mendeteksi kompilasi naungan asinkron.

Untuk memicu kompilasi secara manual, Anda dapat menggunakan ShaderUtil.CompilePass. Cara ini, Anda dapat menghindari rendering dengan placeholder cyan, dan menarik sesuatu yang lain sementara varian naungan kompilasi.

Shader kompilasi
Cabang, varian, dan kata kunci