Câu trả lời là, nó hơi phụ thuộc.
Về cơ bản có hai trường phái tư tưởng; các shader nhỏ, tối ưu cho mọi thứ và trại uber-shader.
Các shader nhỏ chỉ có vậy; làm một việc, và làm tốt Uber shader kiểm soát chức năng của họ khi chạy thông qua đồng phục hoặc biên dịch thành một loạt các shader khác nhau thông qua các macro tiền xử lý (và / hoặc các nguồn shader được tạo).
Giải pháp tối ưu có lẽ là không, nhưng một số loại lai. Có lẽ một vài shuber-shader hoặc uber-shader kết hợp với shader chuyên dụng cho một số trường hợp.
Shader nhỏ
Ưu điểm:
- Có khả năng nhanh hơn / tối ưu hơn
- Có phải những gì bạn muốn nó làm
- Có thể làm những điều kỳ lạ, tùy chỉnh dễ dàng
Nhược điểm:
- Dễ dàng vượt khỏi tầm tay, đặc biệt là khi số lượng tính năng tăng lên
- Có lẽ nhiều công việc hơn, trừ khi bạn có một số lượng rất ít shader
Uber-shader
Ưu điểm:
- Mọi thứ ở một nơi
- Thân thiện với nghệ sĩ hơn (lần đầu tiên sử dụng tính năng A với tính năng X không nhất thiết phải có thời gian mã hóa)
Nhược điểm:
- Thời gian biên dịch shader dài hơn
- Kết quả kém tối ưu hơn (đặc biệt nếu đồng phục được sử dụng để bật / tắt tính năng)
- Có thể khó gỡ lỗi / tối ưu hóa hơn