Jawabannya adalah, itu agak tergantung.
Pada dasarnya ada dua aliran pemikiran; shader kecil, optimal untuk semuanya dan kamp uber-shader.
Shader kecil hanya itu; lakukan satu hal, dan lakukan dengan baik. Uber-shaders mengontrol fungsi mereka pada saat runtime melalui seragam, atau mengkompilasi ke dalam sekelompok shader yang berbeda melalui macro preprocessor (dan / atau sumber shader yang dihasilkan).
Solusi optimal mungkin bukan keduanya, tetapi semacam hibrida. Mungkin beberapa uber-shader atau uber-shader dikombinasikan dengan shader khusus untuk beberapa kasus.
Shader kecil
Pro:
- Kemungkinan lebih cepat / lebih optimal
- Lakukan apa yang Anda inginkan
- Dapat melakukan hal-hal aneh dan custom dengan mudah
Cons:
- Mudah lepas kendali, terutama ketika jumlah fitur bertambah
- Mungkin lebih banyak pekerjaan, kecuali jika Anda memiliki sedikit shader
Uber-shader
Pro:
- Semuanya ada di satu tempat
- Lebih ramah artis (menggunakan fitur A dengan fitur X untuk pertama kalinya tidak harus memerlukan waktu coder)
Cons:
- Waktu kompilasi shader lebih lama
- Hasil yang kurang optimal (terutama jika seragam digunakan untuk menghidupkan / mematikan fitur)
- Mungkin lebih sulit untuk di-debug / dioptimalkan