Simulation de fluides dans les jeux vidéos

Introduction à la dynamique des fluides

Les jeux vidéo font appel à notre besoin d'explorer notre environnement et d'interagir avec lui, et le recours à des phénomènes du réel, comme des fluides en mouvement, permet aux développeurs de créer des mondes virtuels immersifs et passionnants. Récemment, si les simulations physiques sont devenues plus réalistes, elles se limitent néanmoins en grande partie aux corps rigides. Les simulations de supports continus comme le tissu et les fluides restent en effet assez rares, en grande partie parce que la dynamique des fluides implique des enjeux conceptuels et de calcul qui les rend difficiles à reproduire. Cet article entame une série en trois parties et explique la dynamique des fluides et les techniques de simulation correspondantes. Il se conclut par un exemple d'algorithme de simulation de fluides qui convient pour un jeu vidéo.

Pour entamer les simulations de fluide, il faut d'abord comprendre les bases de la dynamique des fluides, dont nous allons en exposer certaines.


Qu'est-ce qu'un fluide ?



Un fluide est une substance qui s'écoule (en d'autres termes, qui prend la forme de son contenant) et qui ne résiste pas à la déformation (c'est-à-dire qui glisse quand on le déplace). On utilise souvent les termes fluide et liquide de manière interchangeable, mais, techniquement le terme fluide peut aussi bien renvoyer à un liquide qu'à un gaz. Un gaz remplit complètement son contenant, tandis qu'un liquide comporte une « surface libre » dont la texture ne dépend pas de ce contenant. (Souvent lorsqu'on cherche à visualiser un liquide en infographie, on ne rend que sa surface, par exemple des ondulations de l'eau sur une mare ou le flux de l'eau.) La distinction entre liquides et gaz peut influer sur la manière dont on modélise le fluide, mais tous deux obéissent aux mêmes formules de base pour les fluides et ont des propriétés comparables.

Et la fumée ? direz-vous. Elle semble se comporter comme un gaz, mais apparaît aussi dotée d'une certaine surface, même si elle n'est pas aussi distincte que celle d'un liquide. La réponse est que la fumée est en fait le mélange d'un gaz et de particules minuscules en suspension, l'ensemble de ces particules s'appelant un aérosol. Ces particules suivent le mouvement du gaz (et rendent ce mouvement perceptible par les joueurs), sans nécessairement influer sur lui. On peut généralement traiter la fumée comme une sorte de gaz dont l'une des propriétés varie, par exemple la densité ou la composition.


Types de simulations physiques



Si la majorité des programmeurs de jeux vidéo ne sont pas encore familiers de la dynamique des fluides, certaines formes de simulations physiques sont aujourd'hui courantes. Pour fournir un contexte, examinons dans quelle mesure les simulations de fluides s'intègrent au spectre des phénomènes physiques :

Les particules sont des points dotés d'une position, d'une masse et d'une vitesse, mais - en principe - elles n'ont pas de taille ni de forme, comme le montre la figure 1(a). La relation entre les forces et le mouvement est linéaire. Les particules sont faciles à simuler, mais sont peu intéressantes par ailleurs.

En plus d'une position, d'une masse et d'une vitesse, les corps rigides, par exemple des blocs et des balles, disposent d'une forme et d'une orientation. Si on ajoute la notion de forme à une particule, c'est un corps rigide que l'on obtient, comme le montre la figure 1(b). Ces corps rigides sont faciles à simuler : la majeure partie de la difficulté provient de la détection et de la réaction aux collisions. Les corps empilés sont en général les plus difficiles à résoudre parce que tous les éléments de la pile sont en collision permanente avec le reste, même si rien ne bouge.

Les corps articulés que l'on voit dans la figure 1(c) sont des réseaux de corps rigides, par exemple un personnage de jeu. Ces corps se comportent de manière identique aux corps rigides qui participent continuellement à une forme de collision, où les points de contact sont limités dans leurs déplacements (contraintes).



Figure 1. Phénomènes physiques simples : (a) particules, (b) corps rigides et (c) corps articulés.




Les corps déformables peuvent changer de forme, mais leurs différents points restent connectés et adjacents. On peut y penser comme à un modèle dont les bords entre les vertex ne modifient jamais les vertex auxquels ils sont reliés, mais où l'emplacement des vertex peut bouger. Leur type dépend du nombre de dimensions :

•• 1D. Fil, corde, chaîne, cheveux, etc., représentés en figure 2(a).

•• 2D. Tissu, représenté en figure 2(b).

•• 3D. Corps mous, comme les parties qui bougent d'un personnage, représentés en figure 2(c).





Figure 2. Corps déformables : (a) fil, (b) tissu et (c) corps mous.




Les fluides bénéficient d'une grande liberté de mouvement. Ce mouvement est non linéaire (nous y reviendrons) et leur forme comme leur topologie peut évoluer, comme le montre la figure 3. Les fluides nécessitent des techniques de simulation particulières. Comme ils adoptent la forme de leur contenant, ils sont en collision permanente ave tout ce qui les entoure, y compris eux-mêmes. Une collision avec une partie d'un fluide signifie dans les faits que l'ensemble du fluide doit réagir.




Figure 3. Fluides : (a) liquide et (b) fumée.





Représentations et systèmes de coordonnées

On peut modéliser les fluides d'au moins deux manières : sous forme de champ ou bien d'ensemble de particules en interaction. Les deux points de vue ont chacun leur intérêt et on passe souvent de l'un à l'autre, quand il ne s'agit pas de les associer.

Systèmes de champ



A chaque point d'une région contenant un fluide, on peut attribuer un ensemble de propriétés : vitesse, densité, température et pression. La position des points ne change jamais. Ce traitement des fluides sous forme de champ s'appelle le point de vue d'Euler. La figure 4(a) en montre un exemple simple : une boîte remplie d'un gaz.



Figure 4. Vues de champ et de particules d'un fluide. (a) En grille : Chaque point a les propriétés d'un fluide, comme la vitesse (flèches), la densité (remplissage des cases), la pression (couleurs des flèches) et la température (bordure des cases), et les points de la grille ne bougent pas. (b) Système de particules : Chaque particule a les propriétés d'un fluide ainsi qu'une position et chaque particule peut se déplacer.



Systèmes de particules



On peut aussi penser à un fluide comme à un vaste ensemble de particules (paquets) qui se déplacent. Chaque paquet a des propriétés telles que position, vitesse, densité et température. On notera l'ajout de la position par rapport au point de vue d'Euler, celle-ci étant fixe par rapport à la grille. Ce traitement des fluides s'appelle le point de vue de Lagrange. La figure 4(b) montre un fluide sous la forme d'un ensemble de particules en déplacement.

Propriétés des fluides

Au niveau microscopique, les fluides se composent d'un grand nombre de molécules dont le principe d'interaction est la collision. En revanche, le nombre de molécules est tel qu'on ne peut pas, en pratique, les gérer en tant que telles. Il faut au contraire les appréhender statistiquement, autrement dit faire comme site des groupes de particules intervenaient comme une substance spéciale qui se comporte différemment d'un simple ensemble de particules. Ce traitement particulier implique, entre autres, l'attribution de « propriétés globales » au fluide, qui caractérise la manière dont il interagit avec lui-même.

Les propriétés les plus courantes et les plus importantes d'un fluide sont notamment les suivantes :

- Pression. La pression renvoie aux forces normales qui s'appliquent aux paquets de fluides ainsi que celles que le fluide applique à son contenant et à d'autres objets solides qui y sont plongés, comme le montre la figure 5(a).

- Viscosité. Les fluides sont aussi soumis à des cisaillements, qui interviennent sur son ensemble pour le distordre. La viscosité représente dans quelle mesure le fluide résiste à cette distortion, comme le montre la figure 5(b). Les fluides épais (comme le sirop) ont une forte viscosité ; les fluides plus liquides (comme l'eau) ont une faible viscosité.

- Densité. La densité renvoie à la quantité de matière que renferme chaque petit volume d'espace du fluide.

- Température. La température renvoie à la quantité de chaleur dans un paquet de fluide. Elle n'affecte pas directement la manière dont le fluide bouge, mais elle peut avoir une incidence sur la pression et la densité, qui, elles, affectent le mouvement.



Figure 5. Composants de la contrainte : (a) normal (pression) et (b) cisaillement.



Les fluides peuvent avoir d'autres propriétés plus élaborées, comme une viscosité (le mastic, le sang et le mucus, par exemple) ou une composition (carburant, oxygène ou gaz d'échappement, par exemple) plus complexes, dont on peut vouloir tenir compte pour des simulations de fluides plus spécialisées (gaz en combustion, par exemple).

Equations directrices

Comme avec d'autres phénomènes comme ceux affectant les corps rigides, des systèmes d'équations décrivent comment un fluide évolue dans le temps. Il s'agit d'équations directrices. Pour un corps rigide, les équations directrices sont notamment la deuxième loi du mouvement de Newton, qui s'exprime sous la forme , où est la force agissant sur le corps, m sa masse et a sont accélération, c'est-à-dire la manière dont la vitesse change de direction et d'intensité. Les fluides sont en revanche plus compliqués et sont associés à plusieurs jeux d'équations directrices. En outre, chaque jeu d'équation à plusieurs formes, qui varient en fonction du type de fluide à modéliser. L'une des étapes préalable à la modélisation du mouvement d'un fluide consiste à choisir un jeu d'équations directrices. On notera que cet article se limite à des formes relativement simples.

La modélisation d'un fluide implique d'autres facteurs que son simple mouvement : on peut aussi modéliser sont état interne (pression, densité et température), les échanges de chaleurs, etc. Cet article et les suivants partent du principe que la température et la densité restent constantes dans tout le fluide, mais on se souviendra que si l'on souhaite modéliser des flux de fluides plus complexes, il convient d'étudier des notions comme l'équation d'état (loi des gaz parfaits, par exemple) et la diffusion thermique (conduction de la chaleur selon la loi de Fourier, par exemple).

____________________________________________________________________________________________

Point sur les différentielles partielles

Cette section est un point succinct sur le calcul différentiel.

D'abord, un peu de terminologie : une valeur scalaire n'a qu'une seule composante, par exemple la hauteur. A l'inverse, une valeur vectorielle a plusieurs composantes. Par exemple, un vecteur 2 a deux composantes (x et y, par exemple) tandis qu'un vecteur 3 a trois composantes. Une notion similaire mais distincte est celle de la dimensionnalité de la fonction, qui représente le nombre de variables dont celle-ci dépend. Donc une fonction 1D est une fonction à variable unique, par exemple f(u), et une fonction 2D a deux variables, par exemple f(u,v). On peut néanmoins associer ces deux notions. On connaît bien la fonction scalaire à une variable, souvent notée f(x). En revanche, on peut aussi avoir des fonctions scalaires à plusieurs variables (par exemple, une valeur unique est définie à chaque point d'une surface 2D, comme un champ de hauteur) et des fonctions vectorielles à plusieurs variables (par exemple, plusieurs valeurs définies pour chaque point d'un volume 3D, tels que les composantes de la vitesse dans un champ de flux).

On se souviendra sans doute qu'une dérivée est la pente d'une tangente linéaire à une courbe. On peut étendre cette notion d'une dérivée aux fonctions scalaires et vectorielles de plus grande dimension. Les opérateurs résultants sont le gradient, la divergence et le rotationnel.
____________________________________________________________________________________________



Gradient



Rappelons-nous que la dérivée d'une fonction scalaire 1D (c'est-à-dire une fonction à une seule variable et une seule valeur) est la pente de la tangente linéaire à la fonction en un point donné, comme le montre la fig. X(a). De même, le gradient d'une fonction scalaire avec un plus grand nombre de variables est une combinaison de dérivées partielles (une pour chaque variable), associés pour créer un vecteur qui pointe le long de la pente de cette fonction, comme l'illustre la fig. X(b).



Figure X. Dérivées de fonctions scalaires. (a) Ordinairement, la dérivée d'une fonction scalaire 1D est la pente de la tangente linéaire à la courbe. (b) Le gradient d'une fonction scalaire 2d (élévation de terrain, par exemple) pointe vers la pente du « terrain ».



Divergence



La divergence d'une fonction vectorielle indique quelle partie du champ s'écoule à l'extérieur à partir d'un point donné. La figure Y(a) montre une fonction qui a une divergence. On notera que la divergence d'un champ vectoriel est en soi un scalaire. Si le champ vectoriel est un champ de vitesse, alors une divergence positive implique que la masse diminue au point considéré. On pensera à un réservoir de gaz compressé qui se vide, le volume du contenant restant constant, mais la quantité de gaz à l'intérieur du réservoir diminuant au fur et à mesure que le gaz s'échappe.



Figure Y. Dérivées de fonctions vectorielles. (a) Un champ vectoriel irrotationnel n'a qu'une divergence (pas de rotationnel). (a) Un champ vectoriel solénoïdal n'a qu'un rotationnel (pas de divergence).



Rotationnel



Le rotationnel d'un champ vectoriel quantifie la circulation autour de chaque point. La figure Y(b) montre un champ vectoriel doté d'un rotationnel. Le rotationnel d'un champ de vitesse s'appelle la vorticité. On notera que si le rotationnel est lui-même un vecteur, on se sert de la « règle de la main droite » pour déterminer sa direction : En faisant pivoter les doigts de la main droite dans la direction des vecteurs, le pouce pointe alors dans la direction du rotationnel. Dans la fig. Y(b), le rotationnel pointe en dehors de la page.

Décomposition de Helmholtz



Le théorème fondamental du calcul vectoriel indique que l'on peut représenter un champ vectoriel comme la somme d'une partie irrotationnelle (sans rotationnel) et une partie solénoïdale (sans divergence).


Moment



Considérons la deuxième loi de Newton, , pour un bloc. En se souvenant que l'accélération est le rythme de changement de la vitesse, c'est-à-dire , et en divisant côté par la masse, on peut écrire . A présent, imaginons que ce bloc est en contact ave un autre, comme l'illustre la figure 6(b), et que les deux bougent l'un par rapport à l'autre, comme le montre la figure 6(c). Chaque bloc est à présent soumis à plusieurs forces : une force normale, une force de friction et une force corporelle (gravité). En développant, le terme de la force , on obtient :




Figure 6. Diagramme des forces pour un bloc : (a) sans contact, (b) en contact fixe et (c) en contact glissant.



De même que la loi du mouvement de Newton, l'équation de Navier-Stokes exprime comment la vitesse change sous l'action des forces.



Ici, est la vitesse en un point du temps et de l'espace, t est le temps, p la pression en un point, ρ est la densité du fluide en un point, µ la viscosité et les forces externes, telles que la gravité, qui s'exercent sur le fluide.

On notera les similitudes et les différences avec l'équation pour le bloc. Toutes deux expriment comment la vitesse change en fonction du temps. Toutes deux incluent des forces résultant du contact ainsi que des forces externes. En revanche, l'équation du fluide possède un terme de plus à gauche, , qui demande un peu de réflexion pour être compréhensible.

Les termes de gauche expriment l'accélération et ont une signification particulière. On peut les réécrire sous la forme d'un nouvel opérateur, :



Cette formule a de nombreux noms, parmi lesquels dérivée substantive, dérivée advective, dérivée de Lagrange et dérivée particulaire. Ces noms donnent un indice sur sa signification inhabituelle et c'est là, dans un certain sens, le cœur du mouvement des fluides. Alors décomposons-la parce que, pour comprendre ce mouvement, il faut comprendre sa dérivée.

Le terme exprime comment évolue la vitesse du fluide en un endroit fixe. On notera le complément « en un endroit fixe », qui nous ramène au point de vue d'Euler (cf. figure 7), où l'on représente un fluide sous la forme d'un champ et où l'on s'interroge sur la manière dont les propriétés du fluide évoluent en des points fixes de ce champ. Ce terme exprime donc simple l'évolution de la vitesse en fonction du temps (c'est-à-dire l'accélération) d'un point dans le champ d'un fluide.



Figure 7. Accélération d'Euler : la vitesse en un point fixe change en fonction du temps.



Le terme est compliqué : il s'appelle le terme advectif (cf. figure 8 ) et exprime la manière dont la vitesse d'un paquet de fluide change tandis que ce paquet se déplace - fondamentalement, la vitesse change parce que paquet se déplace dans un champ de vitesse. Là encore, imaginons qu'un fluide soit un champ dont chaque point a une vitesse. Ce serait comme marché dans un aéroport en empruntant partout des tapis roulants. De plus, ces tapis sont inhabituels en ce qu'ils se déplacent dans différentes directions et à différentes vitesses selon l'endroit, mais la direction et la vitesse restent les même à chaque endroit. Imaginez que vous vous promeniez dans cet aéroport loufoque : selon l'endroit où vous vous tenez, les tapis roulants vous dirigent dans des directions et à des vitesses différente. En se tenant debout sans marcher sur ce réseau de tapis, c'est nous-mêmes qui changeons de vitesse et de direction. On accélérerait pour la simple raison que l'on suit le champ de flux.



Figure 8. Acélération advective : la vitesse en chaque point reste constante, mais un traceur qui suit le champ fait s'accélérer le traceur.



Remarquons que le terme advectif comporte deux fois la vitesse. Cette répétition rend le mouvement non linéaire. Ainsi, lorsque l'on parle du mouvement non linéaire des fluides, c'est à cette accélération advective que cela renvoie. Ce terme est la principale raison pour laquelle les fluides ont un mouvement aussi complexe et, lorsqu'on écrit une simulation, une grande partie du travail consiste à gérer ce terme.

Lorsque l'on associe ces deux termes, on se demande comment un paquet de fluide s'accélère à la fois en suivant le champ de flux et parce que le champ de flux change lui-même en fonction du temps. Lorsqu'on se pose les deux questions ensemble, on adopte le point de vue de Lagrange, c'est-à-dire que l'on envisage le fluide comme un ensemble de particules. La différence entre les points de vue d'Euler et de Lagrange se résume dans les faits à l'endroit où l'on place le terme advectif : soit à droite, soit à gauche de l'équation de moment.

Masse



Lorsqu'une pression s'exerce sur un paquet de fluide, ce fluide peut se compresser ou s'étendre. Cette compression ou expansion s'expriment de manière mathématique simplement en indiquant qu'un influx de fluide en modifie la quantité à cet endroit :



Pour les effets visuels, on peut en général laisser de côté la compressibilité et donc simplifier cette équation en . Dans ce cas, la pression se couple à la vitesse et l'on peut abandonner de l'équation de moment le terme correspondant à la pression (mais, comme nous le verrons dans le deuxième article, cette pression réapparaît sous une autre forme). Tout champ vectoriel à divergence nulle est qualifié de « solénoïdal ». Cette condition se solde par une certaine complication dans les simulations de fluides, à laquelle le deuxième article sera en partie consacré.

La masse elle aussi peut « advecter » et diffuser, auquel cas la forme de ces équations directrices ressemble à l'équation de moment indiquée plus haut, si ce n'est qu'il y manque le terme correspondant à la pression. En d'autres termes, la densité suit le flux et le diffuse.

Vorticité



On peut facilement imaginer un ou plusieurs vortex, parce qu'il s'agit d'une notion intuitive. Quiconque a déjà vu une tornade, de l'eau qui s'écoule dans un siphon ou du lait qu'on tourne dans du café a déjà vu des vortex. Les ronds de fumées sont eux aussi de simples anneaux de vortex, des vortex qui forment une boucle sur eux-mêmes. En dynamique des fluides, on appelle ces boucles des structures cohérentes, parce qu'elles semblent dotées d'une vie propre et persistante. L'équation de « vorticité » décrit l'évolution de ces structures.

La vorticité (le rotationnel de la vitesse) décrit comment le fluide pivote. En prenant le rotationnel de l'équation de moment, on en dérive l'équation de vorticité :



En résolvant cette équation, on obtient une description complète du mouvement du fluide. C'est la vorticité qui donne au fluide son mouvement de tourbillon si caractéristique. La figure 9 montre des exemples de flux de vortex simples.



Figure 9. Vortex et leurs flux : (a) vortex linéaire (ligne violette en pointillés) et le flux circulaire qui l'entoure (ligne noire pleine) ; (b) vortex annulaire et le flux en « jet » qui le traverse.



Le terme de contrainte décrit l'étirement (stretching) et l'inclinaison (tilting) des vortex, comme le montre la figure 10. L'étirement des vortex est un processus important pour la turbulente cascade d'énergie de grande à petite échelle dans le flux et ne se produit que pour les flux en 3D.



Figure 10. Etirement d'un vortex. (a) Un vortex en tube avec une bosse, la vitesse s'écoulant vers l'extérieur de la bosse, fait rétrécir la bosse. (b) La bosse éjectée, le tube a rétréci : la masse ici en rotation a décru. Donc, pour conserver le moment angulaire, la vorticité a augmenté. En d'autres termes, le tube pivote plus vite à l'endroit où il pivotait à l'origine plus lentement.



Le terme visqueux décrit la diffusion de la vorticité, c'est-à-dire comment la vorticité s'étend en raison de la friction.

Le dernier terme exprime la poussée (buoyancy) qui (comme le montre la figure 11) crée des régions de renversement, où les fluides dont la densité est déséquilibrée (un fluide lourd au-dessus d'un fluide plus léger, par exemple) forment des courants en rouleaux qui tendent à rétablir l'équilibre du fluide (c'est-à-dire en replaçant le fluide lourd sous le fluide léger).



Figure 11. Maintien des fluides dans le bon sens. Là ou le gradient de pression et celui de densité ne sont pas parallèles, une vorticité se crée pour rétablir l'équilibre entre les couches de fluides. Le fluide tente de pivoter pour aplatir la bosse.



L'équation de mouvement utilise la pression, aussi appelle-t-on parfois « formulation pression-vitesse » ou « formulation à primitive variable » cette approche à la résolution des équations de dynamique des fluides. A l'inverse, l'équation de vorticité ne demande pas de pression, mais elle exige une vitesse, aussi cette approche à la résolution des équations de dynamique des fluides est parfois appelée la « formulation vitesse-vorticité ».

L'équation de vorticité fait double emploi avec celle de moment : comme elles sont équivalentes, il suffit de résoudre l'une ou l'autre. Lorsque l'on s'habitue à la notion de vorticité, celle-ci est plus facile à gérer que celle du moment, surtout parce qu'on peut repérer facilement et intuitivement un vortex et suivre son mouvement.

Conditions de limites

Les fluides interagissent avec leurs contenants, avec les objets qui y sont plongés et avec d'autres fluides distincts qui ne se mélangent pas à eux (air et eau, par exemple). Ces interactions s'expriment par des conditions de limites, qui ont deux composantes :

Sans traversée. Le fluide ne peut pas couler dans ni hors d'un corps.

Sans glissement. Le fluide ne peut pas de déplacer à la surface d'un corps (ou alors on peut utiliser des limites à glissement libre, qui ne sont pas parfaitement réalistes, mais qui s'appliquent aux fluides sans viscosité).

Les conditions de limites expriment la manière dont un corps influe sur un liquide ainsi que la façon dont le flux du fluide influe sur le mouvement d'un corps. Ce problème a de multiples solutions. Par exemple, on peut s'interroger sur le champ de pression à la limite ou faire appel aux lois de conservation (comme le moment linéaire et angulaire) pour échanger des impulsions entre le fluide et le corps.

Résumé

Agrémenter des jeux vidéo de simulations de fluides peut les rendre plus immersifs et plus intéressants. En préparation d'une description des algorithmes utilisés pour simuler le mouvement des fluides, cet article présente les propriétés et équations de la dynamique des fluides. Comme elle comporte davantage de degrés de liberté et un mouvement non linéaire, la dynamique des fluides est plus complexe que d'autres formes de phénomènes physiques plus familiers, comme la dynamique des corps rigides. La dynamique des fluides emploie des équations différentielles partielles (par opposition à des équations différentielles ordinaires) et s'assortit de conditions de limites (outre des conditions initiales). Les techniques de simulation convenables aux fluides sont délicates et complexes et ce sont cette subtilité et cette complexité que les articles suivants de cette série aborderont. Le prochain article s'intéressera aux techniques de simulation des fluides, dont les méthodes avec grille, sans grille et hybrides. Le troisième et dernier article fournira une simulation de fluide à vortex de particules, que l'on pourra utiliser pour agrémenter un système de particules existant d'un jeu.
Para obter mais informações sobre otimizações de compiladores, consulte Aviso sobre otimizações.