A partir de agora, ao renderizar minha cena e ao percorrer o gráfico da cena, para cada nó, sua matriz de modelo é calculada a partir da matriz de modelo do pai e da pose do nó de cena. Isso é bastante simples e já reduz o número de multiplicações de matrizes para uma multiplicação por nó e quadro.
Mas todas essas multiplicações de matriz precisam ser feitas na CPU e em todos os quadros para poder executar (vários consecutivos) movimentos de nós de cena muito rapidamente. A GPU, no entanto, provavelmente é muito mais adequada para realizar muitas multiplicações de matrizes, então estou pensando em enviar várias matrizes parciais de modelo para o shader de vértice, em vez de calcular tudo na CPU.
O envio de todas as partes (de modo que a pose de cada nó) para a GPU provavelmente não faz muito sentido, pois nesse caso todos os cálculos são feitos para cada vértice, em vez de cada nó, o que realmente diminuiria o desempenho. Mas talvez os nós de cena com muitos filhos ou apenas filhos não em movimento (em relação ao pai) possam ser um local para dividir a matriz do modelo e mudar as multiplicações para o sombreador.
Então, quando é melhor enviar matrizes de modelo parciais para o shader e mover a multiplicação para a GPU? Ou é simplesmente uma má idéia para isso?
Raramente, se é que alguma vez. Você respondeu pela metade na sua própria pergunta: um shader de vértice é executado uma vez por vértice, um shader de fragmento uma vez por fragmento. Se você não estiver fazendo algo exclusivo desse vértice ou fragmento, estará literalmente fazendo exatamente a mesma coisa toda vez que invocar um sombreador. Isso não me parece mais eficiente.
fonte