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