Mi escena tiene múltiples objetos en ella. (Digamos 3 cubos, 1 cilindro, 8 esferas). Supongo que debería crear un sombreador de vértices para cada uno. ¿Cuántos programas debo tener?
Alternativas:
- Un programa por objeto
- Un programa para todos los cubos y otro para todas las esferas (suponiendo que usen los mismos sombreadores)
- Un gran programa para todo
¿Cuál es el enfoque correcto?
opengl
shaders
architecture
Jacks_Gulch
fuente
fuente
Respuestas:
Debería considerar los programas de sombreado como una parte del estado similar a las texturas. Cambiar el estado es costoso, por lo que puede evitar combinar varias texturas en una para evitar cambios de textura; Lo mismo se aplica a los sombreadores: puede combinar varios sombreadores para evitar cambios de estado.
De manera similar a la combinación de texturas, la combinación de sombreadores viene con una sobrecarga: si solo renderiza un área de 16x16 píxeles de una textura de 4096x4096, no está utilizando el hardware de manera eficiente. Del mismo modo, si el objeto que renderiza solo usa el 10% del código en su sombreador, es posible (e incluso probable) que la tarjeta gráfica esté calculando muchas cosas innecesariamente.
En resumen, "depende".
fuente
Es mejor mantener las cosas lo más simples posible. Duplicar el mismo sombreador para cada objeto es innecesario y se hinchará rápidamente. Tampoco desea un sombreador gigante que cubra todos los casos de uso posibles, ya que esto causa una sobrecarga innecesaria.
Hay varias opiniones sobre la gestión de sombreadores y no hay una forma "óptima" de abordar esto. Incluso he visto algunas implementaciones de sombreadores en las que cada sombreador se genera sobre la marcha sobre la base de parámetros (por ejemplo, en el motor Unreal ).
Para alguien que recién comienza en esta área, puede ser bueno dibujar primero los sombreadores básicos. Por ejemplo, tengo un sombreador para objetos sin textura, un sombreador con textura básica y soporte de iluminación por píxel, etc. Entonces, cada vez que quiero un efecto diferente que no se puede hacer usando un sombreador anterior, entonces ' crearé uno nuevo para el nuevo efecto.
El propósito de tal sistema es mantener las cosas simples. Sólo. Mantener. Eso. Simple.
fuente