- Notes et code source (GitHub) sur les mathématiques, les algorithmes et les méthodes liés à la simulation en temps réel de fluides comme le feu et la fumée
1. Simulation de fluides
- Avant de simuler le feu, il faut simuler les fluides
- Si l’on suppose que le fluide est incompressible et non visqueux, le problème se simplifie considérablement
1.1 Dynamique des fluides de base
- Un fluide remplit une région DDD de l’espace, et à l’instant ttt, la vitesse du fluide est u(x,t)
- On peut représenter un champ de vitesse 2D u avec une grille N×N
- Que se passe-t-il si l’on dépose une goutte de colorant dans le fluide ?
- On définit un champ scalaire ψ(x,t) représentant la densité du colorant, et son déplacement par la vitesse du fluide est appelé advection
- La méthode naïve pour calculer l’advection consiste à déplacer chaque point de grille et à mettre à jour le point de grille le plus proche, mais elle est difficile à paralléliser et instable
Équation aux dérivées partielles de l’advection
- Pour dériver l’advection de manière stable, il faut une expression explicite en EDP
- La masse totale de colorant dans une région spatiale fixe WWW est ∫WψdV, et sa variation au cours du temps est ddt∫Wψ(x,t)dV
- D’après la loi de conservation de la masse, on obtient ddt∫WψdV=−∫Sψu⋅ndA
- En appliquant le théorème de la divergence, on obtient ∫W[∂ψ∂t+∇⋅(ψu)]dV=0 et, pour un sous-volume unitaire W=dV, ∂ψ∂t+∇⋅(ψu)=0
- Cela fournit l’EDP explicite que nous devons résoudre
Méthode stable pour l’advection
- Si l’on examine l’éq. (1) de plus près, le terme de droite est une dérivée directionnelle dans la direction −u
- Cette méthode, appelée advection semi-lagrangienne, a été inventée en 1999 par Jos Stam
- Comme chaque point de grille n’est mis à jour qu’une seule fois, elle est très facile à paralléliser et inconditionnellement stable
1.2 Équation de Navier-Stokes
- Nous avons trouvé un modèle décrivant l’évolution temporelle des propriétés scalaires du fluide, mais qu’en est-il de l’écoulement lui-même ?
- L’équation de Navier-Stokes définit la manière dont le champ de vitesse u évolue au cours du temps en un point quelconque du fluide
- Comme nous supposons que le fluide est non visqueux, μ=0, et les forces externes peuvent aussi être ignorées dans un premier temps
- Il ne reste donc que deux termes : l’auto-advection (self-advection) et la pression (pressure)
- En calculant numériquement ces termes à chaque pas de temps puis en les additionnant, on peut simuler le fluide
Résolution de la pression
- On ne sait pas si le nouveau champ de vitesse respecte la contrainte d’incompressibilité, donc le terme de pression p doit le corriger
- Pour cela, il faut résoudre l’équation de Poisson
- Pour résoudre l’équation de Poisson, on peut utiliser des algorithmes itératifs comme la méthode de Jacobi
- La méthode de Jacobi peut être exécutée en parallèle sur GPU, ce qui rend son implémentation très simple
Résumé : simulation de Navier-Stokes
- Les mathématiques de Navier-Stokes peuvent être un peu complexes, mais la simulation d’un fluide en résolvant les équations se résume à quelques procédures majeures de mise à jour
1.3 Confinement de la vorticité (Vorticity Confinement)
- Utiliser une grille pour stocker le champ de vitesse est très pratique, mais l’interpolation des valeurs entre les points de grille provoque un lissage numérique indésirable
- En conséquence, les tourbillons turbulents de l’écoulement disparaissent, ce qui produit généralement un flux de fluide trop lisse et « ennuyeux »
- Le confinement de la vorticité est un processus qui amplifie cette vorticité perdue
- Le confinement de la vorticité a été conçu pour résoudre les champs d’écoulement extrêmement complexes autour des pales d’hélicoptère
- La vorticité est calculée en prenant le rotationnel de u à chaque point, puis on ajoute un écoulement circulaire en chaque point pour l’amplifier
Turbulence par bruit de rotationnel (Curl-Noise)
- Le curl noise est une méthode similaire au confinement de la vorticité, mais au lieu de mesurer et d’amplifier la vorticité du champ de vitesse, elle utilise une fonction de bruit pour créer dès le départ un champ scalaire de vorticité
- Les fluides très rapides et fortement turbulents tirent le plus grand bénéfice du confinement de la vorticité et du curl noise
2. Simulation du feu
- Pour simuler le feu et la fumée, il faut ajouter des canaux représentant le carburant et la température, puis modéliser la combustion du carburant pour générer de la chaleur
- Il faut aussi gérer la montée des parties les plus chaudes du fluide selon un modèle de poussée thermique, et rendre correctement les flammes
2.1 Modèle de combustion de base
- Chimiquement, le feu résulte d’une réaction d’oxydation d’un matériau combustible, qui libère de la chaleur et de la lumière
- On définit un champ scalaire ρ représentant la densité du carburant et un champ scalaire T représentant la température
- Le carburant brûle et ajoute de la température au système, tandis que la température se diffuse des zones chaudes vers les zones froides
- La convection thermique est définie comme la combinaison de ces deux processus, et nous disposons déjà du modèle mathématique pour la décrire : l’advection !
L’avis de GN⁺ :
- Cet article explique le processus complexe de simulation en temps réel de fluides comme le feu et la fumée, un sujet très important en infographie et en développement de jeux.
- Les progrès récents des GPU permettent désormais de traiter en temps réel des simulations de fluides complexes, ce qui contribue à créer des jeux visuellement séduisants et des effets spéciaux de cinéma.
- L’article aborde des concepts mathématiques avancés comme les équations de Navier-Stokes et le confinement de la vorticité, offrant des informations utiles aux ingénieurs logiciels débutants intéressés par ce domaine.
1 commentaires
Commentaires Hacker News