La respuesta es que depende un poco.
Básicamente hay dos escuelas de pensamiento; sombreadores pequeños y óptimos para todo y para el campamento de súper sombreadores.
Los sombreadores pequeños son solo eso; Haz una cosa y hazla bien. Los Uber-shaders controlan su funcionalidad en tiempo de ejecución a través de uniformes, o compilan en un montón de diferentes sombreadores a través de macros de preprocesador (y / o fuentes de sombreador generadas).
La solución óptima probablemente no sea ninguna, sino algún tipo de híbrido. Quizás algunos uber-shaders o uber-shaders combinados con shaders especializados en algunos casos.
Sombreador pequeño
Pros:
- Probablemente sea más rápido / más óptimo
- Hace exactamente lo que quieres que haga
- Puede hacer cosas raras y personalizadas fácilmente
Contras:
- Se sale de control fácilmente, especialmente cuando aumenta la cantidad de funciones
- Probablemente más trabajo, a menos que tenga un número muy pequeño de sombreadores
Uber-shader
Pros:
- Todo en un mismo lugar
- Más amigable para el artista (usar la función A con la función X por primera vez no necesariamente requiere tiempo de codificador)
Contras:
- Tiempos de compilación más largos del sombreador
- Resultados menos óptimos (especialmente si se usan uniformes para activar / desactivar funciones)
- Puede ser más difícil de depurar / optimizar