[ [ [ Simulation de foule - Yannis Lehuédé

 

Cette scène a été développée dans le cadre du projet de jeu vidéo médiéval sur DVD, comme le précédent article. Cette fois-ci, le système de particules a été poussé un peu pllus loin pour se focaliser sur la génération de foule, avec une scène de charge de soldats précédent une bataille. On étudiera ici les outils 3D permettant de créer l’impression de multitude de soldats dans l’environnement.
La scène se déroule sur un terrain désertique rocailleux avec un peu d’herbe et des montagnes au lointain. Comme la caméra ne bouge pas dans les deux pllans qui composent cette séquence, les éléments dedécor (le terrain, l’herbe les montagnes et le ciel) on été calculés une fois, en tant qu’éléments non-animés (images fixes).
Rappelons que les éléments animés nécessitent autant de calcul de rendu qu’il y a d’images, ce qui est assez long lorsqu’il y a beaucoup d’éléments. Sur ces pllans, il y a énormément de soldats à l’image, donc tout ce qui peut être économisé en temps de calcul est salvateur.
Les différents éléments qui composent l’image, rendus sur des calques semi-transparents seront ensuite rassemblés sur la composition finale (images fixes et animées).
Penchons-nous maintenant sur le système de génération de foule. On réutilisera le système de particules comme dans l’article précédent sur les nuées de flèches, mais en l’améliorant un peu. Il faut d’abord analyser ce dont on a besoin : de nombreux soldats qui courent. Pour recréer l’illusion de multitude, il faut absolument que les soldats soient différents (couleurs des tuniques, armes,, boucliers...) et qu’ils ne courent pas tous de manière synchronisée, comme "marche au pas". On limite la difficultée en ne prévoyant pas de combats au corps-à-corps, uniquement des charges.
Commençons par créer le terrain. Une simple planche horizontale suffira, si elle est suffisament étendue. Elle servira de sol, sur lequel les particules glisseront. Il peut être bosselé de collines.
Ensuite, on peut créer des émetteurs de particules, placés au dessus du terrain. Configurons ceux-ci pour qu’ils émettent un certain nombre de particules pendant un certain temps.

Si on ajoute un champ de gravité, les particules "tomberont" sur le terrain, qui doit être un objet de collision, permettant qu’elles s’y posent.

Un autre champ peut être adjoint au système de particules : une force de vent. Les particules glisseront dans dans la direction définie par ce champ.

On peut également ajouter une turbulence pour que le mouvement des particules se fasse en zig-zag.

Evidemment, toutes ces forces physiques doivent être paramétrées finement pour que l’effet de déplacement des particules soit réaliste. On pourra ré-ajuster les valeurs de ces paramètres une fois qu’un soldat sera assigné pour chaque particule...

Une dernière chose à faire pour ces particules est de définir une autre force : ajouter un repoussoir entre chaque particule si elles s’approchent trop les unes des autres. Ainsi, il n’y aura pas de soldat qui entre en collision avec un autre.

L’étape suivante est d’attribuer un soldat pour chaque particule. Comme il y peut y avoir beaucoup de particules (et donc de soldats) dans la scène, il faut que chaque modèle ait une géométrie assez simple. Ceci dépend du niveau de détail souhaité (selon la distance des soldats de premier plan par rapport à la caméra).

Dans ce plan, les personnages sont animés, il faut donc créer un cycle d’animation (qui se répète sans coupures) de marche ou de course pour le soldat.

Pour créer la multitude, il est nécessaire de faire des variantes du soldat (avec des habits ou des couleurs différentes, des armes et boucliers avec des variations...) et aussi, créer des décalages dans le cycle d’animation pour chaque personnage. Si ce dernier point n’était pas pris en compte, tous les soldats du système de particules bougeraient de la même manière ! Ce pourrait être intéressant pour une parade militaire, mais n’est pas l’effet désiré ici.

Dans la séquence animée, il y a 22 soldats différents, comme sur l’illustration du haut de l’image ci-dessous :

Notons que sur l’illustration du bas, tous les soldats marchent de la même manière (la position de leurs jambes semblent identiques).

Donc, il suffit ensuite d’attribuer à chaque particule un personnage choisi aléatoirement (sous Maya, à l’aide d’un petit script d’une ligne). Il suffit de régler l’orientation de la géométrie (un soldat) pour qu’elle s’aligne automatiquement dans le sens du mouvement, comme pour la nuée de flèches de l’article précédent.

La génération de foule est ainsi achevée.

Pour aller plus loin, on peut compliquer le système en ajoutant des éléments de collision, ou des objets repoussoirs comme sur la vidéo suivante.

On peut fluidifier les changemennts de direction ou définir un cycle d’animation pour"faire faire un vrage" au personnage concerné. De la même manière, il estt possible d’attribuer une animation de combat à un personnage dont la particule s’approche d’une autre particule (d’un système "ennemi").

Pour augmenter l’effet de multitude, on peut attribuer une texture de couleur unie à chaque personnage (définie aléatoirement pour chaque particule) et lancer le calcull de rendu des soldats. On obtient une multitude de nuances de gris qui serviront pour augmenter les différences de personnages, au moment du compositing des calques de l’image.

A la phase de compositing, il faut rassembler les différentes couches (images fixes de décor par exemple) et les éléments animés (les soldats, leurs ombres, les flèches...).

En calculant les "rideaux" de fumée et de brume, il est possible d’utiliser le calque des nuances de gris différenciant les personnages pour masquer par endroit la brume sur les personnnages et augmenter de cette façon l’effet de multitude de l’armée.

Voilà une description basique de la génération de foules animées (crowd simulation en anglais), mais les possibilités d’extension de cette technique sont inépuisables, à voir ce qui est nécessaire...

Et avec un château, mélangé avec beaucoup d’autres éléments semi-transparents.