Cabang, varian, dan kata kunci
Kondisi dalam naungan
Kadang-kadang, Anda ingin shaderProgram yang berjalan di GPU. More info
Lihat di Glossary yang sama untuk melakukan hal-hal yang berbeda dalam keadaan yang berbeda. Misalnya, Anda mungkin ingin mengkonfigurasi pengaturan yang berbeda untuk bahan yang berbeda, mendefinisikan fungsi untuk perangkat keras yang berbeda, atau secara dinamis mengubah perilaku naungan pada runtime. Anda mungkin juga ingin menghindari executing kode mahal komputasi ketika tidak diperlukan, seperti tekstur membaca, input simpul, interpolator, atau loop.
Anda dapat menggunakan kondisi untuk menentukan perilaku yang hanya dilakukan GPU dalam kondisi tertentu.
Berbagai jenis kondisi
Untuk menggunakan kondisi di naungan Anda, Anda dapat menggunakan pendekatan berikut:
- Cabang statis: kompiler naungan mengevaluasi kode kondisi pada waktu kompilasi.
- Cabang dinamis: GPU mengevaluasi kode kondisional pada runtime.
- Varietas ShaderSebuah 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: Unity uses static branching to compile the shader source code into multiple shader programs. Unity then uses the shader program that matches the conditions at runtime.
Ketika menggunakan jenis kondisional
Tidak ada pendekatan "satu ukuran cocok untuk semua" untuk kondisional dalam naungan, dan Anda harus mempertimbangkan kelebihan dan kerugian dari setiap pendekatan untuk naungan yang diberikan, dalam proyek yang diberikan.
Ingat informasi berikut:
- Jika Anda tahu kondisi pada waktu kompilasi (misalnya, jika Anda tahu bahwa Anda membangun untuk perangkat keras tertentu), maka percabangan statis kemungkinan pilihan terbaik. Kode percabangan statis sederhana untuk menulis dan memelihara, dan itu tidak dampak negatif membangun kali, ukuran file, atau kinerja runtime. Namun, Anda tidak dapat menggunakannya untuk mengeksekusi kode untuk kondisi yang berbeda pada runtime.
- Jika Anda perlu mengeksekusi kode untuk kondisi yang berbeda pada runtime, Anda harus mempertimbangkan opsi berikut:
- Varietas Shader tidak mengulangi hukuman kinerja GPU. Namun, sejumlah besar varian naungan dalam proyek dapat menyebabkan masalah yang signifikan: peningkatan waktu build, ukuran file, penggunaan memori runtime, dan waktu pemuatan. Varietas Shader juga memperkenalkan kompleksitas kode tambahan ketika secara manual preloading (“prewarming”) warna.
- Cabang dinamis mengeluarkan penalti kinerja GPU, yang mungkin kecil atau besar tergantung pada kode naungan dan perangkat keras. Namun, ini memungkinkan Anda untuk menggunakan kondisi pada runtime tanpa meningkatkan jumlah varian warna dalam proyek Anda.
- Mungkin untuk memberi penulis kode naungan Anda sehingga menghindari percabangan atau varian, dan bukan menggunakan operasi matematika yang kembali 0 atau 1 untuk mengeksekusi kode kondisional. Ini dapat menyebabkan kode kompleks yang sulit dirawat. Tergantung pada keadaan, itu mungkin mengakibatkan hanya peningkatan kinerja yang sangat kecil melalui percabangan dinamis, atau tidak ada keuntungan sama sekali.
Secara umum, pendekatan terbaik adalah untuk meningkatkan kinerja aplikasi Anda dan dengan hati-hati mempertimbangkan kasus keputusan Anda. Misalnya, jika Anda mampu sedikit meningkatkan biaya GPU, mungkin yang terbaik untuk menggunakan percabangan dinamis untuk mencapai kinerja GPU yang baik dan mengurangi risiko memperkenalkan lebih banyak varian. Namun, jika kinerja GPU adalah perhatian utama bagi naungan ini dan Anda telah menyumbang biaya varian tambahan, Anda mungkin memilih untuk menggunakan varian.
Cabang, varian, dan kata kunci