Minha cena tem vários objetos nela. (Digamos 3 cubos, 1 cilindro, 8 esferas). Suponho que devo criar um sombreador de vértice para cada um. Quantos programas devo ter?
Alternativas:
- Um programa por objeto
- Um programa para todos os cubos e outro para todas as esferas (supondo que eles usem os mesmos shaders)
- Um grande programa para tudo
Qual é a abordagem correta?
opengl
shaders
architecture
Jacks_Gulch
fonte
fonte
Respostas:
Você deve considerar os programas de sombreador como parte similar do estado das texturas. Alterar o estado é caro, então você poderá combinar várias texturas para uma para evitar alterações de textura; o mesmo se aplica aos shaders - você pode combinar vários shaders para evitar alterações de estado.
Da mesma forma que a combinação de texturas, a combinação de shaders vem com uma sobrecarga - se você renderizar apenas 16x16 pixels de área com uma textura de 4096x4096, não estará usando o hardware com eficiência. Da mesma forma, se o objeto que você renderiza usar apenas 10% do código no seu sombreador, é possível (e até provável) que a placa de vídeo esteja computando muitas coisas desnecessariamente.
Em suma, "depende".
fonte
É melhor manter as coisas o mais simples possível. Duplicar o mesmo sombreador para cada objeto é desnecessário e ficará inchado rapidamente. Você também não deseja um shader gigante que cubra todos os casos de uso possíveis, pois isso causa sobrecarga desnecessária.
Existem várias opiniões sobre gerenciamento de sombreadores e nenhuma maneira "ideal" de abordar isso. Eu já vi algumas implementações de shader em que cada shader é gerado com base em parâmetros off-the-fly (por exemplo, no mecanismo Unreal ).
Para alguém que está começando nessa área, talvez seja bom escrever primeiro os shaders básicos. Por exemplo, tenho um sombreador para objetos sem textura, um sombreador com textura básica e suporte para iluminação por pixel, etc ... Cada vez que eu quero um efeito diferente que não pode ser feito usando um sombreador anterior, então eu ' Criaremos um novo para o novo efeito.
O objetivo desse sistema é manter as coisas simples. Somente. Manter. Isto. Simples.
fonte