Vers un mod`ele de flamme temps-réel - XLIM-SIC

Transcription

Vers un mod`ele de flamme temps-réel - XLIM-SIC
Vers un modèle de flamme temps-réel
F. Bridault, C. Renaud, F. Rousselle
Laboratoire d’Informatique du Littoral / Université du Littoral Côte d’Opale
bridault,renaud,[email protected]
F IG . 1 – Evolution d’une flamme de bougie
Résumé : Le modèle que nous développons permet de visualiser en temps-réel une flamme de type bougie de
manière convaincante, tant dans sa dynamique, dans son aspect visuel, que sur l’illumination qu’elle procure à
son environnement. Un solveur de fluides rapide nous permet de définir les échanges de flux qui conditionnent les
mouvements de la flamme. Une surface NURBS, construite à partir de squelettes de particules, permet de définir
le volume la décrivant. L’aspect final de la flamme est obtenue en plaquant une texture sur la surface NURBS
utilisée. Enfin, l’éclairage est simulé en plaçant plusieurs sources lumineuses ponctuelles à l’intérieur du volume
correspondant à la flamme, et l’ombrage est calculé à l’aide de la technique des volumes d’ombre. Au vu des
performances obtenues, un tel modèle pourrait être intégré dans des applications 3D interactives ( jeu vidéo,
réalité virtuelle,... ).
Mots-clés : Synthèse d’images, flamme, bougie, temps-réel.
1 Introduction
Le feu est une source de lumière très présente dans la réalité. Elle l’est encore plus dans le monde de la synthèse
d’images, en particulier si l’on souhaite représenter des scènes virtuelles ayant trait à notre passé. Jusqu’à il y a
moins d’un siècle, le feu était encore la source de lumière principale en intérieur ou la nuit.
La modélisation de flammes en synthèse d’images peut avoir différentes applications : génération de séquences
d’images, que ce soit pour des films d’animation ou pour insérer des effets spéciaux au cinéma, jeux vidéos et
autres applications interactives temps-réel. Ces différents types d’applications ont conduit à l’émergence de deux
grandes catégories de modèles :
– Les approches simplifiées ou empiriques : elles se basent généralement sur les systèmes de particules pour
représenter une flamme ou un feu dont les caractéristiques physiques sont basées sur des approximations ou des
observations. Ces méthodes se distinguent généralement par leur rapidité d’éxécution.
– Les approches physiques : ces modèles mettent l’accent sur le réalisme de la simulation et s’appuient donc sur
des modèles physiques inspirés de la mécanique des fluides. Ceci entraı̂ne l’utilisation d’équations différentielles
et donc a priori de méthodes de résolutions numériques plutôt lourdes, aussi bien en terme de mise en oeuvre
qu’en calcul.
Ces approches ne sont néanmoins pas mutuellement exclusives et parfois certains modèles mélangent les techniques, de sorte qu’il est difficile de les classer de manière aussi stricte. D’autre part, les avancées dans le
domaine de la résolution des équations de Navier-Stokes ([Sta99][Sta02]), conjointes avec l’augmentation de la
puissance de calcul des ordinateurs personnels, permettent d’obtenir des résultats physiquement réalistes pour
un coût moindre.
Wei et al. [WLMK02] ont développé un modèle temps-réel en se basant à la fois sur l’utilisation du Lattice
Boltzmann Model pour modéliser les échanges de flux et sur les splats texturés pour le rendu. Si les performances
sont effectivement très bonnes, l’aspect visuel et dynamique de la flamme est assez discutable et ressemble plutôt
à un amas gazeux enflammé. Beaudouin et al. [BPP01] ont introduit la technique des squelettes de flamme. Des
particules sont lâchées dans un champ de vélocité à partir d’un point d’origine sur la surface enflammée. Toutes
les particules issues d’une même origine forment un squelette. Une surface implicite est ensuite construite à
partir de chaque squelette pour former une flamme. Si ce modèle est satisfaisant pour une flamme seule, par
exemple une bougie, il est nettement moins convaincant pour des feux plus larges. Il est en effet possible de
distinguer chaque flamme individuellement dans le feu, alors qu’elles devraient se mélanger. De plus, il faut
souligner qu’il n’est pas temps-réel. Inakage [Ina90] a présenté un modèle de flamme de type bougie qui insiste
particulièrement sur la distinction entre flamme laminaire et turbulente.
Parmi les modèles plus réalistes en terme d’apparence, l’approche de Nguyen et al. [NFJ02] est certainement la
plus remarquable. L’utilisation d’un solveur basé sur les équations incompressibles d’Euler leur permet d’obtenir
une simulation très précise et d’aspect très convaincant. Il est également important de citer Lamorlette et al.
[LF02] qui, outre la qualité de l’aspect visuel, ont également réussi à proposer un contrôle précis de la simulation
à l’animateur. Cependant, ces deux modèles, et particulièrement le premier, sont lourds en terme de calcul
puisqu’ils utilisent un rendu en lancé de rayons ou tracé de chemins.
En revanche peu de modèles s’attachent à décrire de façon précise l’illumination en provenance d’une flamme.
Si Lamorlette et al. proposent tout de même de placer une sphère lumineuse au centre de la flamme, seul le
modèle singulier de Chalmers et al.[DC01, Cha02] propose une solution plus complète. Sa particularité provient
de l’utilisation de données réelles. Une flamme est filmée, puis insérée dans une scène virtuelle. L’illumination
de la flamme est quant à elle récupérée de façon très précise à l’aide de spectroradiomètres, puis restituée en
utilisant plusieurs sources lumineuses sphériques approchant la forme de la flamme. Le problème reste bien
entendu l’absence d’interactivité dans l’animation de la flamme.
Il apparaı̂t donc qu’aucun modèle ne puisse parvenir à proposer des performances temps-réel tout en assurant un
aspect et une dynamique visuelles convaincant. Et encore moins en offrant des solutions pour l’illumination. Nos
travaux cherchent donc à combler ce manque, afin de proposer un modèle pour les applications 3D interactives
temps-réel. À ce stade du développement, nous nous sommes pour l’instant limité à la simulation de petites
flammes telles celles d’une bougie ou d’une lampe à huile.
Nous allons maintenant présenter les différentes composantes de notre approche. Nous détaillerons en premier
lieu le solveur de fluides que nous avons employé. Nous exposerons ensuite plus en détail l’utilisation innovante des squelettes de flamme pour construire une surface NURBS. Nous donnerons également les solutions
que nous proposons pour l’illumination. Enfin, nous discuterons des résultats obtenus et des perspectives de
développement.
2 Le solveur de fluides
L’utilisation d’un modèle mathématique est indispensable pour décrire fidèlement la dynamique d’un fluide.
Les équations incompressibles de Navier-Stokes permettent de décrire par exemple les mouvements de l’air de
l’atmosphère, les courants océaniques, l’écoulement de l’eau dans un tuyau, et de nombreux autres phénomènes
d’écoulement de fluides. Dans le cadre de la modélisation d’une flamme, il est donc possible d’utiliser ces
équations pour décrire la dynamique de l’environnement de celle-ci, c’est-à-dire les déplacements d’air, mais
également les objets interagissant avec elle. Un fluide est décrit par un champ de vélocité u et un champ de pression p. Les équations incompressibles de Navier-Stokes permettent alors de décrire la variation de ces quantités,
en considérant que la vélocité et la pression sont fixées à l’instant t = 0 :
∂u
1
= −(u.∇)u − p + v∇2 u + f
∂t
ρ
∇.u = 0
(2.1)
(2.2)
où v est la viscosité du fluide, ρ sa densité et f les forces extérieures. L’opérateur ∇ désigne la divergence
∂
∂
∂
, ∂y
, ∂z
). À noter qu’il s’agit d’une forme condensée des équations de Navierspatiale, soit le vecteur ( ∂x
Stokes, car habituellement, deux équations sont données à la place de l’équation 2.1 : une pour la variation de la
vélocité et une autre pour la variation de la pression. Ces équations sont non linéaires, ce qui les rend difficiles à
résoudre. Le premier terme du membre de droite de l’équation 2.1 traduit l’advection et la convection, le second
la densité, le troisième la diffusion, et le dernier les forces extérieures. L’advection et la convection sont les
transferts de liquides (ou de gaz) respectivement horizontaux et verticaux engendrés par la vélocité elle-même,
F IG . 2 – Organisation de l’origine des squelettes,
vue de dessus
F IG . 3 – Les cinq squelettes de flamme
tandis que la diffusion transcrit en quelque sorte l’étalement du fluide et découle directement de ses propriétés
physiques.
Les solutions pour résoudre ces équations sont très nombreuses ; elles diffèrent notamment par les hypothèses
faites sur les propriétés du fluide, sur le but pour lequel elles sont employées et par voie de conséquence, sur leur
précision. En informatique graphique, l’apparence du fluide est primordiale. Foster et Metaxas [FM97, FM96]
ont présenté une méthode de différences finies en trois dimensions. Le problème de leur méthode est qu’elle ne
converge pas toujours si le pas de temps utilisé est trop grand. Cela oblige par conséquent à utiliser un pas de
temps assez court et entraı̂ne des calculs supplémentaires. Stam [Sta00, Sta02, Sta99] a proposé une solution
implicite semi-lagrangienne inconditionnellement stable pour éliminer cette contrainte. Elle converge quel que
soit le pas de temps utilisé, en étant de plus très rapide si la grille de résolution est d’une taille raisonnable.
Nous avons choisi d’utiliser cette méthode pour modéliser l’environnement de la flamme. Une force externe
constante verticale linéairement croissante est ajoutée dans chaque cellule de la grille afin de simuler l’élévation
thermique. Le vent est introduit en ajoutant également des forces externes dans la grille.
3 Modélisation
3.1 Squelettes de flamme
Les squelettes de flamme sont intéressants car ils permettent à la fois de situer spatialement la flamme et de
connaı̂tre l’influence du champ de vélocité pour un coût de calcul raisonnable. Dans la méthode de Beaudouin,
plusieurs surfaces implicites sont alors calculées autour de ce squelette. Le coût de calcul d’une surface implicite
n’est pas négligeable puisqu’il implique d’utiliser, outre la génération de la surface, un algorithme de construction de maillage polygonal tel que les Marching Cubes. D’autre part, il est également possible de critiquer le
fait que le champ de vélocité agisse seulement sur le squelette, puisque l’influence du champ de vélocité sur la
surface de la flamme, même à faible distance, du squelette n’est pas prise en compte.
Partant de ces constatations, nous avons essayé d’exploiter au maximum les données du solveur de fluides.
Dans le cas d’une flamme de bougie, nous employons désormais non plus un squelette de flamme unique, mais
cinq, organisés en croix (figure 2). Un squelette central, appelé guide, donne le sommet et la base de la flamme
simple, tandis que les quatre squelettes périphériques permettent de fixer les limites de la flamme (figure 3). Les
particules de ces squelettes servent ensuite de points de contrôle pour la création d’une surface NURBS.
F IG . 4 – Construction d’une surface NURBS à partir des squelettes
Pour générer les squelettes, nous avons adopté la solution de Lamorlette et al. Des particules sont lâchées à
partir d’un point générateur, qui est l’origine du squelette. Elles sont déplacées suivant une intégration d’Euler,
c’est-à-dire, s étant la position d’une particule :
s(t + ∆t) = s(t) + (∆t)s0 (t)
(3.1)
La rapidité est donc privilégiée face à la précision, mais une méthode telle que Runge-Kutta pourrait bien sûr
être utilisée s’il fallait être plus exact.
Un test est ensuite effectué à chaque itération du solveur pour déterminer si la distance entre la dernière particule
lâchée et l’origine est supérieure à un seuil donné. Si c’est le cas, une nouvelle particule est alors lâchée. Chaque
squelette a une longueur maximale, que nous avons fixée à 8 particules. Celle-ci a été jugé suffisante pour
approcher la forme d’une flamme de bougie. Un test supplémentaire est effectué pour supprimer d’éventuelles
particules trop proches, qui occasionneraient des aberrations dans le maillage de la NURBS. Chaque particule
possède par ailleurs une durée de vie exprimée en nombre d’itérations, ce qui fixe la hauteur des squelettes.
Enfin, un dernier test est bien évidemment réalisé afin d’assurer que la particule reste à l’intérieur de la grille du
solveur ; dans le cas contraire elle est simplement détruite.
3.2 Surface NURBS
Les particules des squelettes que nous avons créées servent ensuite à constituer une matrice de points de contrôle
pour une surface NURBS (figure 4). La définition proprement dite de cette surface a été réalisée à l’aide des
fonctions des librairies GLU (OpenGL Utility Library ). Il suffit alors de fournir les points de contrôle selon
chaque direction u et v. Nous avons choisi de prendre la direction u pour passer d’un squelette périphérique à
un autre, et v pour passer d’une particule à une autre au sein d’un squelette. Le dernier point dans la direction v
est le sommet du guide. Pour donner une forme bombée au bas de la flamme, le premier point est l’origine du
guide, et le deuxième est l’origine du squelette périphérique. Seules les extrémités du squelette guide sont donc
nécessaires pour la modélisation.
La tâche la plus complexe dans notre cas est d’assurer que tous les squelettes périphériques ont la même longueur. En effet, les particules des squelettes sont définies dans la direction v, et il est indispensable pour une
définition correcte de la NURBS qu’il y ait le même nombre de points de contrôle dans chaque direction v. Cependant, il est très probable au cours de la simulation, surtout si le champ de vélocité est agité, que les squelettes
n’aient pas le même nombre de particules. Une longueur maximale est définie, mais ce n’est pas suffisant.
La première idée aurait donc été de fixer la taille des squelettes. Néanmoins, ceci aurait remis en cause notre
politique de génération des squelettes ; la forme de la flamme aurait été moins libre, alors que nous cherchons
justement à mettre le moins de contraintes possibles et laisser le solveur agir. Notre solution consiste donc à
ajouter des points de contrôle pour les squelettes trop petits. Ceci permet de ne pas modifier la géométrie des
squelettes tout en assurant la cohérence de la NURBS.
Enfin, tandis que l’origine du squelette guide est fixe, celles des squelettes périphériques sont mobiles afin de
donner une dynamique plus souple à la base de la flamme. Elles se déplacent donc, mais différemment des autres
particules. A chaque pas de temps, la vélocité instantanée est ajoutée à la position initiale, de manière à ce que
l’origine du squelette reste toujours autour de sa position d’origine, autrement dit :
s(t + ∆t) = s(0) + (∆t)s0 (t)
(3.2)
F IG . 5 – Plaquage de texture sur la surface NURBS
F IG . 6 – Illustration du problème du plaquage de
texture si le point de vue change de 90 ˚
F IG . 7 – Un premier rendu de la flamme
F IG . 8 – Le rendu final avec translation de la texture
4 Rendu
4.1 Texture
Nous ne pouvons pas nous permettre des calculs complexes pour donner une couleur à la flamme dans le cadre
du temps-réel. L’idée la plus simple et la plus évidente pour obtenir un aspect correct à peu de frais est de
plaquer une texture 2D sur la surface NURBS, en ajoutant un peu de transparence. La texture est faite d’un
dégradé de couleur qui couvre les différentes composantes de la flamme. L’une des principales caractéristiques
visuelles d’une flamme de bougie est la présence du noyau bleu. Dans une première approche, nous avons
utilisé une texture 1D simple sur l’intégralité de la flamme (figure 7). Mais elle ne permettait pas de représenter
correctement la forme bombée singulière de cette zone de réaction chimique. Pour retrouver la forme correcte
du noyau bleu, nous avons donc utilisé un mapping cylindrique sur une moitié de la flamme (figure 5). La texture
est dans ce cas appliquée comme si la surface NURBS était « déroulée» à plat. Cependant, le rendu n’est alors
valable que dans un seul point de vue (figure 6).
La solution finale consiste donc à translater la texture dans l’espace de la texture de manière à ce que le noyau
bleu reste toujours en face de l’observateur. L’aspect visuel est alors bien plus satisfaisant (figure 8).
4.2 Illumination
Les librairies OpenGL étant très limitées en terme de réalisme d’éclairage puisqu’elles ne proposent qu’une
illumination locale, nous n’avons réalisé à ce jour qu’une solution approximative. Nous nous sommes reposés
sur l’utilisation de nos squelettes de flamme. En effet, le guide central, qui ne servait qu’à définir le sommet
et la base de la flamme, peut également nous servir dans son intégralité pour effectuer l’éclairage. Chaque particule du squelette central est alors considérée comme une source ponctuelle. Les particules ont une intensité
linéairement décroissante selon leur rang dans le squelette, de manière à ne pas obtenir les saccades qu’occasionne une intensité égale pour toutes les particules. Comme ces particules sont constamment en mouvement, la
dynamique de l’éclairage de la flamme, caractérisée par de petites oscillations, est conservée et bien que ce ne
F IG . 9 – Le modèle temps-réel de
Wei et al.
F IG . 10 – Flamme de bougie
réalisée par Beaudouin et al.
F IG . 11 – La bougie de Inakage
soit scientifiquement pas exact, l’effet final est plus qu’acceptable.
Par ailleurs, OpenGL ne propose pas de générer les ombres et il faut donc recourir à des techniques spécifiques
en la matière. Une des solutions couramment utilisée s’appelle le shadow mapping [Kil01]. Il s’agit normalement
de la technique la plus rapide, cependant elle pose de sérieux problèmes dans notre cas. Pour une source lumineuse, la scène doit en effet être dessinée une fois supplémentaire dans la direction de projection des ombres ;
comme nous utilisons huit lumières, il nous faudrait donc dessiner neuf fois la scène. De plus, les sources ponctuelles éclairant dans toutes les directions, il faudrait dessiner la scène selon plusieurs directions. Cette méthode
paraissait donc difficilement utilisable dans ce cadre.
La deuxième technique est celle des shadow volumes [EK02]. L’approche consiste à définir des volumes d’ombres
en définissant des plans infinis à partir de chaque arête vue de chaque source. Ensuite pour chaque pixel de
l’image, le nombre de plans « entrants » et « sortants » sont comptabilisés afin de déterminer s’il y a ou non
une ombre. Si le compte est positif, il y a une ombre, s’il est nul, la zone est éclairée. Cette méthode est réputée
plus complexe à implémenter que la précédente, mais elle est plus robuste et plus précise. Elle permet en outre de
prendre en compte les ombres d’un objet dûes à lui-même (self-shadowing). Nous avons choisi cette méthode,
en utilisant une implémentation sur GPU pour la génération des volumes d’ombres, ce qui nous permet de
conserver un taux de rafraı̂chissement correct.
5 Résultats
La plupart des expérimentations ont été effectuées avec une grille de résolution relativement faible pour le
solveur : 15x15x15 et un pas de temps de 2/5 de seconde. L’apparence est donc une fois de plus privilégiée
face à l’exactitude physique, puisqu’un pas de résolution prend beaucoup moins de temps à calculer que 2/5 de
seconde. Nous gérons donc en réalité deux échelles de temps distinctes : celle du solveur et celle de l’affichage,
qui correspond à l’échelle du temps réel. La viscosité cinématique du fluide est fixée à 15.10 −6 , soit celle de
l’air.
Pour la construction de la flamme en elle-même, tous les squelettes ont une taille maximale de 8 particules et
la durée de vie d’une particule est fixée à 6 itérations. La surface NURBS est choisie bicubique afin de garder
de bonnes performances. Dans une scène de petite taille avec une résolution de 800x800 pixels, le modèle est
actuellement capable d’assurer l’affichage de 30 images par seconde sur un AthlonXP3200+ équipée d’une
GeForceFX5200 et de 512 mo de RAM.
En comparaison avec le seul modèle temps-réel existant de Wei et al. (figure 9), force est de constater que
notre bougie présente un meilleur aspect. Néanmoins, nous ne sommes actuellement pas capable de décrire
un feu plus large comme cette méthode. Etant donné les compromis que nous avons faits afin de conserver
ces performances, notre modèle devrait être moins réaliste que des modèles plus lourds en calcul. Pourtant,
les flammes de Beaudouin (figure 10) paraissent moins convaincantes en ce qui concerne l’animation. Ceci
peut s’expliquer assez facilement par l’utilisation de fonctions choisies de façon empririque pour modéliser
les flux d’air, là où nous nous reposons sur les équations de Navier-Stokes. Le rendu semble également moins
réussi, notamment à cause de la couleur. Nous nous rapprochons finalement plus du rendu de la flamme de
Inakage(figure 11), même si cette dernière n’est pas animée.
La figure 1 montre la dynamique de notre bougie sous l’influence du vent. La figure 12 met en valeur l’éclairage
de la flamme sur la scène, sans ombrage (a), avec des ombres (b), puis en mouvement avec des ombres (c)(d).
L’illumination de la scène est entièrement fournie par la flamme, et la variation de la forme de la flamme se
répercute bien sur l’éclairage des sphères.
Un problème subsiste cependant dans la définition des ombres. Prendre en compte plusieurs souces ponctuelles
pour tracer les volumes d’ombres créé des discontinuités. Il est parfois possible de distinguer les ombres dûes à
chacune des particules du squelette guide, alors qu’il serait préférable qu’elles soient indissociables et qu’elles
se mélangent.
6 Conclusion et perspectives
Nous avons présenté un modèle temps-réel de flamme de type bougie. Il permet d’obtenir un rendu, une animation et une illumination plus réalistes que les modèles temps-réel actuels, mais certains problèmes restent
néanmoins à régler.
Un des premiers objectifs sera de parvenir à adoucir les ombres. Nous étudions actuellement les méthodes tempsréel existantes pour y parvenir. Les performances du modèle sont pour l’instant plutôt bonnes, elles risqueraient
toutefois de se dégrader si les scènes deviennent plus complexes ou si plusieurs flammes sont introduites. Dans
cette optique, nous chercherons éventuellement à optimiser certaines étapes de résolution du solveur. Enfin nous
allons essayer d’étendre le modèle afin d’être capable de définir différents types de feux. Les flammes plus
étalées comme celles des lampes à huile de type Firmalampe ne devraient pas poser problème ; en revanche les
feux plus turbulents comme les feux de cheminée ou les feux de camp risquent d’être plus difficile à représenter.
Références
[BPP01]
Philippe Beaudoin, Sébastien Paquet, and Pierre Poulin. Realistic and controllable fire simulation.
In B. Watson and J. W. Buchanan, editors, Proceedings of Graphics Interface 2001, pages 159–166,
2001.
[Cha02]
Alan Chalmers. Very realistic graphics for visualising archaeological site reconstructions. In
Proceedings of the 18th spring conference on Computer graphics, pages 43–48. ACM Press, Avril
2002.
[DC01]
Kate Devlin and Alan Chalmers. Realistic visualisation of the pompeii frescoes. In Proceedings
of the 1st international conference on Computer graphics, virtual reality and visualisation, pages
43–48. ACM Press, 2001.
[EK02]
C. Everitt and M. Kilgard. Practical and robust stenciled shadow volumes for hardware-accelerated
rendering, 2002.
[FM96]
Nick Foster and Dimitri Metaxas. Realistic animation of liquids. Graph. Models Image Process.,
58(5) :471–483, 1996.
[FM97]
N. Foster and D. Metaxas. Modeling the motion of a hot, turbulent gas. Computer Graphics
(SIGGRAPH 97 Conference Proceedings), 31(3A) :181–188, August 1997.
[Ina90]
M. Inakage. A simple model of flames. In Proceedings of the eighth international conference of
the Computer Graphics Society on CG International ’90 : computer graphics around the world,
pages 71–81, Institute of Systems Science, Singapore, july 1990.
[Kil01]
M. Kilgard. Shadow mapping with today’s opengl hardware, 2001.
[LF02]
Arnauld Lamorlette and Nick Foster. Structural modeling of flames for a production environment.
In Proceedings of the 29th annual conference on Computer graphics and interactive techniques,
pages 729–735. ACM Press, 2002.
[NFJ02]
Duc Quang Nguyen, Ronald Fedkiw, and Henrik Wann Jensen. Physically based modeling and animation of fire. In Proceedings of the 29th annual conference on Computer graphics and interactive
techniques, pages 721–728. ACM Press, 2002.
[Sta99]
Jos Stam. Stable fluids. In Alyn Rockwood, editor, Siggraph 1999, Computer Graphics Proceedings, pages 121–128, Los Angeles, 1999. Addison Wesley Longman.
[Sta00]
J. Stam. Interacting with smoke and fire in real time. Communications of the ACM, 43(7) :76–83,
July 2000.
[Sta02]
Jos Stam. Real-time fluid dynamics for games, 2002.
[WLMK02] X. Wei, W. Li, K. Mueller, and A. Kaufman. Simulating fire with texture splats, 2002.
(a)
(b)
(c)
(d)
F IG . 12 – Images extraites de notre modèle de flamme temps-réel