Ce projet personnel a été réalisé en un délai relativement restreint (deux semaines environs) ; pour résumer son objectif, il est intéressant de cerner ses motivations. Deux implémentations de skinning multi-instance ont été proposées par Nvidia et ATI.
ATI propose un modèle où le skinning est réalisé sur le GPU, il n’y a pas de niveau de détails et les déplacements sont calculés sur le CPU. Nvidia propose relativement le même modèle mais avec des groupes de niveaux de détail (LOD) mais encore une fois choisis par le CPU.
Mon objectif était de ramener tout ces calculs relatifs à l’animation de foule sur le GPU par l’API DirectX 11 : les déplacements, le skinning mais aussi la création des groupes de LOD.
La première problématique est l’animation des déplacements d’une foule sur GPU. Ce sont les travaux de Takahiro Harada et notamment l’article « Sliced Data Structure for Particle-Based Simulations on GPUs » (Harada, 2007) qui ont guidé cette implémentation. En effet, Takahiro Harada s’est intéressé à la simulation de particules sous GPU. En quelque sorte, la simulation de foule est une simulation de particules : les agents d’une simulation de foule peuvent être assimilés à des particules interagissant entre elles.
Le second problème est le skinning, le format d’animation choisit a été le MD2 car très courant est assez facilement utilisable dans un vertex shader.
Enfin, la plupart des implémentations considérant des niveaux de LOD créer ces groupes de niveaux de détails sur le CPU, mon défi a donc été de ne pas ramener d’informations sur le CPU et de réaliser cette création de groupe de niveau de détails en parallèle sur le GPU. J’ai reussi cette opération en utilisant le geometry shader et les fonctions de DrawIndirect, je vous invite à consulter mon rapport pour plus d’informations.
Apercu de l'application finale
Si vous souhaitez plus d'informations, vous pouvez consulter mon rapport en suivant ce lien