À partir de maintenant, lors du rendu de ma scène et lors de l'itération dans le graphique de la scène, pour chaque nœud, sa matrice de modèle est calculée à partir de la matrice de modèle du parent et de la pose du nœud de scène. Ceci est assez simple et réduit déjà le nombre de multiplications matricielles à une multiplication par nœud et trame.
Mais toutes ces multiplications matricielles doivent être effectuées sur le CPU et dans chaque image pour pouvoir effectuer des mouvements (multiples consécutifs) de nœuds de scène très rapidement. Le GPU, cependant, est probablement beaucoup mieux adapté pour effectuer de nombreuses multiplications matricielles, donc je pense à envoyer plusieurs matrices de modèles partiels au vertex shader au lieu de tout calculer sur le CPU.
L'envoi de chaque partie (donc la pose de chaque nœud) au GPU n'a probablement pas beaucoup de sens, car dans ce cas, tous les calculs sont effectués pour chaque sommet au lieu de chaque nœud, ce qui diminuerait en fait les performances. Mais peut-être que les nœuds de scène avec beaucoup d'enfants ou seulement des enfants immobiles (par rapport à son parent) pourraient être un endroit pour diviser la matrice du modèle et déplacer les multiplications vers le shader.
Alors, quand est-il préférable d'envoyer des matrices de modèle partielles au shader et de déplacer la multiplication vers le GPU? Ou est-ce simplement une mauvaise idée?
Rarement, sinon jamais. Vous y avez répondu à moitié dans votre propre question: un vertex shader s'exécute une fois par vertex, un fragment shader une fois par fragment. Si vous ne faites pas quelque chose d'unique à ce sommet ou à ce fragment, vous faites exactement la même chose chaque fois que vous invoquez un shader. Cela ne me semble pas plus efficace.
la source