Un graphe de transformation hiérarchique doit forcément être résolu à un moment donné.
La façon de le faire dépend du type de jeux et du besoin ; as-tu vraiment besoin de X niveaux de hiérarchie sur l’entièreté des objets de ta scène ?
Le logiciel Maya stock deux matrices par nœud (une transformation locale et une transformation monde) et un système de propagation d’un flag de dirty. Quand un parent bouge, le flag est propagé sur la hiérarchie qui recalcule la transformation monde de chaque nœud.
Cette méthode n’est pas adaptée au jeu vidéo.
Pour les mouvements sur des personnages, un skinning GPU, mais sans interpolation (une seule matrice par point) permet de gérer une hiérarchie, façon « jouet transformer ».
Tu peux ajouter, au-dessus de ce skin GPU, une hiérarchie de transformations qui feront donc partie du skinning. C’est à double tranchant, car ces opérations (qui donneront le même résultat) seront donc générées autant de fois que d’objets. Tu peux minimiser ça par des concepts avancés comme le Tansform feedback, pour calculer la hiérarchie globale en une fois et réutiliser les transformations monde résultantes sur les objets.
Si cette hiérarchie de joints est déterminé à l’avance (leur nombre et l’ordre), ton vextex shader hard codera l’ordre de résolution des transformations et devrait être en mesure de déterminer la position finale de chaque transformation (et donc, points).
Tu remarqueras que laisser ça au GPU rend la problématique orthogonale aux considérations ECS.
[^] # Re: Entity Component System
Posté par Narann (site web personnel) . En réponse à la dépêche Les graphes de scène. Évalué à 3. Dernière modification le 06 décembre 2022 à 12:24.
Un graphe de transformation hiérarchique doit forcément être résolu à un moment donné.
La façon de le faire dépend du type de jeux et du besoin ; as-tu vraiment besoin de X niveaux de hiérarchie sur l’entièreté des objets de ta scène ?
Le logiciel Maya stock deux matrices par nœud (une transformation locale et une transformation monde) et un système de propagation d’un flag de dirty. Quand un parent bouge, le flag est propagé sur la hiérarchie qui recalcule la transformation monde de chaque nœud.
Cette méthode n’est pas adaptée au jeu vidéo.
Pour les mouvements sur des personnages, un skinning GPU, mais sans interpolation (une seule matrice par point) permet de gérer une hiérarchie, façon « jouet transformer ».
Tu peux ajouter, au-dessus de ce skin GPU, une hiérarchie de transformations qui feront donc partie du skinning. C’est à double tranchant, car ces opérations (qui donneront le même résultat) seront donc générées autant de fois que d’objets. Tu peux minimiser ça par des concepts avancés comme le Tansform feedback, pour calculer la hiérarchie globale en une fois et réutiliser les transformations monde résultantes sur les objets.
Si cette hiérarchie de joints est déterminé à l’avance (leur nombre et l’ordre), ton vextex shader hard codera l’ordre de résolution des transformations et devrait être en mesure de déterminer la position finale de chaque transformation (et donc, points).
Tu remarqueras que laisser ça au GPU rend la problématique orthogonale aux considérations ECS.
C’est comme ça que je ferais.