Conception d’un modèle de feu 3D temps réel : Différence entre versions

De Ensiwiki
Aller à : navigation, rechercher
m
Ligne 1 : Ligne 1 :
 
[[Catégorie:Projets de spécialité]]
 
[[Catégorie:Projets de spécialité]]
 +
{| class="toccolours" style="float: right; margin: 0 0 1em 1em; width: 24em; font-size: 90%;" cellspacing="5"
 +
|-
 +
<!-- logo et nom -->
 +
! style="width: 100%; text-align: center; font-size: larger;" colspan="2" {{!}}
 +
{{{!}} align="center" style="background: none;"
 +
{{!}} style="padding-right: 1em;" {{!}}
 +
{{!}} Conception d'un modèle de feu 3D temps réel
 +
{{!}}}
 +
{{Infobox Logiciel/Ligne optionnelle
 +
| 1 = Projet
 +
| 2 = Projet de spécialité 2A
 +
}}
 +
{{Infobox Logiciel/Ligne optionnelle
 +
| 1 = Sous-projet
 +
| 2 = Image
 +
}}
 +
{{Infobox Logiciel/Ligne optionnelle
 +
| 1 = Étudiants
 +
| 2 = Benjamin AUPETIT (MMIS-IRVM), Julien CHAMPEAU (MMIS-IRVM), Arnaud EMILIEN (MMIS-IRVM)
 +
}}
 +
{{Infobox Logiciel/Ligne optionnelle
 +
| 1 = Promo
 +
| 2 = 2011
 +
}}
 +
{{Infobox Logiciel/Ligne optionnelle
 +
| 1 = Tuteur
 +
| 2 = Marie-Paule CANI Marie-Paule.Cani@grenoble-inp.fr
 +
}}
 +
|}
  
 
Ce projet fait parti des [[Projets de spécialité image]] de l'année 2010.<br>
 
Ce projet fait parti des [[Projets de spécialité image]] de l'année 2010.<br>

Version du 17 juin 2010 à 09:11

Conception d'un modèle de feu 3D temps réel
Projet Projet de spécialité 2A
Sous-projet Image
Étudiants Benjamin AUPETIT (MMIS-IRVM), Julien CHAMPEAU (MMIS-IRVM), Arnaud EMILIEN (MMIS-IRVM)
Promo 2011
Tuteur Marie-Paule CANI Marie-Paule.Cani@grenoble-inp.fr

Ce projet fait parti des Projets de spécialité image de l'année 2010.

Toutes les images de cette page ont été générées par notre programme

Même celle ci
FireMonkey

Auteurs

Ce sujet a été proposé et réalisé par :
Benjamin Aupetit  : [benjamin.aupetit@ensimag.imag.fr]
Julien Champeau  : [julien.champeau@ensimag.imag.fr]
Arnaud Emilien  : [arnaud.emilien@ensimag.imag.fr]

Encadrant:

Marie Paule Cani

Introduction

Il existe de nombreux travaux d'annimation de feu. Cependant, peu d'entre eux modélisent la totalité du processus de combustion. Nous avons trouvé interessant de répondre à la problématique : comment modéliser une combustion réaliste en 3D temps réel?

Le projet comprend plusieurs phases :
- une phase de recherche et d'analyse d'articles scientifiques, pour comprendre l'état de la recherche scientifique.
- une phase de conception de modèle, dans laquelle nous avons conçu un modèle de combustion répondant au mieux à nos objectifs.
- une phase d'implémentation du modèle en CPU ( c++ et OpenGL ).
- une phase d'implémentation du modèle en GPU (GLSL).

Description du projet

Objectifs

Concevoir un modèle de combustion complet, c'est à dire un modèle comprennant :
- un modèle de flamme convainquant.
- de la génération de fumée.
- la prise en compte des flux d'air. ( vent, action de la chaleur ... )
- des interactions avec des objets.
- la propagation réaliste des flammes sur l'objet.
- la destruction procédurale progressive d'un objet.

Moyens

Sachant que nous voulons réaliser une application temps réel, nous avons décider dans un premier temps de le réaliser sur CPU en utilisant OpenGL pour valider le modèle, puis de l'adapter en Shader GLSL. Les calculs réalisés étant hautement parallélisables, la programmation sur GPU est indispensable.


Aperçu du modèle

Nous nous sommes d'abord interressé à la modélisation de la flamme. Le moyen de décrire le plus simplement une flamme est de la considérée comme un fluide. Le gaz combustible représentant la flamme, avec en plus des informations sur la température et des "marqueurs" de fumée. Ce qui nous a ammené à considérer les modèles de fluides en informatique graphique.

Modèle de fluide

Le feu et la fumée sont gérés par un modèle de fluide. Ce modèle est inspiré du modèle de Jos Stam . Nous disposons de quatre grilles à pas constant, auxquels nous appliquons la résolution de l'équation de Navier-Stockes. Les quatres grilles sont : la quantité de gaz ( la flamme ), la quantité de fumée, la chaleur, et le champs de vitesse. Le rendu est effectué avec un découpage d'une texture volumique. Pour améliorer le rendu de la flamme nous avons rajouté un bruit de perlin 4D , et une coloration en fonction de la température d'après le principe du corps noir grâce à la formule de Planck.

Exemple de bruit de perlin 3D. Notre 4ème dimension est le temps
Flamme sans bruit de perlin
Flamme avec bruit de perlin 4D
Coloration de la flamme
Coloration de la flamme

Modèle d'objet

Les fichiers des objets .obj sont chargés et transformés en champs de voxels. Ils sont affichés graĉe à un marching cube adaptatif. Lorsqu'un objet est en contact avec le fluide, il échange des informations de températures. Si l'objet est assez chaud, il y a pyrolise.Les objets peuvent avoir des propriétés différentes, ce qui nous permet d'avoir des combustions lentes, des explosifs, des objets insensibles au feu. Les objets brulent petit à petit, et nous recalculons la forme de l'objet uniquement là o`u il a été déformé ( d'o`u le "adaptatif"). De plus, la chaleur se propage à l'intérieur des objets, selon l'équation de la chaleur. Enfin, la présence des objets affecte le champs de vitesse, ce qui permet de faire bouger la fumée en déplaçant une sphère, ou qu'une flamme contourne un objet.


Le champs de vitesse autour de l'objet dévie la flamme.
Pour l'affichage volumique, nous affichons des plans faces à la camera projetés dans la texture 3D à afficher.


Tore.png

Singe2.png

Combustion progessive des objets



Deplacement de la fumée après avoir bougé la sphere
Pyrolise de l'objet
Decomposition d'un objet pendant la pyrolise

Exemple d'objet explosif :

Explosion de la sphere
Explosion de la sphere
Explosion de la sphere

Résolution du modèle de fluide en GLSL

Nous avons adapté le modèle de fluide en GLSL pour voir si c'était possible et si le gain de performances était interessant. Pour cela nous avons utilisé les framebuffers et le principe du render to 3D texture. Nous avons programmé la résolution du système de fluide à l'aide de shaders GLSL. Le gain de performances est énorme.

Résultats

Modèle de fluide et d'objet CPU :
Pour une grille 20x20x20 : 20 fps
Pour une grille 30x30x30 : 10 fps
Pour une grille 50x50x50 : 1 fps

Modèle de fluide GPU :
Pour une grille 20x20x20 : 45 fps
Pour une grille 50x50x50 : 10 fps
Pour une grille 70x70x70 : 5 fps

Remerciements

Marie-Paule Cani pour son encadrement
Cyril Crassin pour ses conseils en GLSL
Nintendo pour Super Smash Bross Melee©

Téléchargements

Code source

Media:FireMonkey_Aupetit_Champeau_Emilien_Ensimag2010.zip
Src : contient le code pour la simulation de fluide simple
Src_GPU : contient le code de la simulation de fluide GPU
Src_Objets : contient le code de la simulation de combustion d'objets

Présentation du projet

Media:Presentation.pdf
Slides utilisés pour la soutenance du projet.

Rapport détaillé

Media:FireMonkeys.pdf
Ce compte rendu détaille la totalité des techniques employées pour réaliser le modèle de combustion. A lire !

Vidéo

Media:Types_objects2.avi
Objet rouge : type bois
Objet gris : type metal
Objet jaune : type explosif

Bibliographie

( cf. Rapport détaillé ci-dessus )