Introduction
Cours original: "Advanced Graphics Techniques Using OpenGL", Tom Mc
Reynolds, Gigapixel, inc.
Simuler, sans aller jusqu'à la modélisation physique:
- Pluie
- Fumée
- Traînées de vapeur
- Feu
- Nuages
- Eau
- Brouillard

Idées de base
- Modélisation physique trop lente
- Utiliser des combinaisons de texture mapping et de géométrie
- Les aspects dynamiques sont simulés par la variation des
attributs des sommets (Coord, TexCoord..)
- Deux problèmes: acquérir ou trouver les images de texture,
effectuer le rendu
- Réutiliser le plus possible de techniques
- "Cartons découpés" (Billboards) = remplacer une géométrie
complexe par de la texture
- Transparence
- Manipulation des coordonnées de texture
- Systèmes de particules
- Compromis qualité/vitesse
Pluie / précipitations
- Simuler le phénomène météo
- Neige
- Pluie
- Tempète de poussière
- Utiliser des combinaisons de systèmes de particules, textures avec
alpha, brouillard
- Les propriétés des particules dépendent de la nature du
phénomène

Systèmes de particules
- Simuler la complexité avec beaucoup d'objets simples : les
textures sont chères, utiliser des points OpenGL
- L'apparence et le mouvement sont adaptés à l'effet
- Le rendu et la mise à jour de chaque frame doivent être rapides:
- grouper les particules
- organiser les données en "vertex arrays"

Mise à jour des particules en parallèle
- Les particules nécessitent beaucoup de calculs en parallèle
- Utiliser le pipeline graphique comme processeur parallèle:
- Représenter les coordonnées xyz sous forme de triplets rgb de
Glubyte
- Copier le tableau ainsi formé dans le framebuffer avec
glDrawPixels
- Mettre à jour les xyz en utilisant les fonctions de
blending
- Lire le résultat sous forme de vertex array avec glReadPixels
- Effectuer le rendu du vertex array
Neige
- Particules se déplacant lentement
- Opaques, diffuses (ou non éclairées)
- Proche : particules. Loin : brouillard
- La parallaxe (déplacement image en fonction du déplacement
physique) indique la profondeur de la neige
- Ajouter du brouillard pour réduire la visibilité
- Éclairage : fort et diffus
Pluie
- Systèmes de particules se déplaçant rapidement
- Brillantes, partiellement transparentes
- Peuvent être représentées par des lignes
- Une texture peut représenter la pluie très proche, floue
- La pluie lointaine ressemble à du brouillard (moins que pour la
neige)
- Ajuster l'éclairage, objets sombres mais brillants (mouillés)
Fumée
- Utiliser une texture représentant une section d'un nuage de
fumée
- Nécessite les canaux luminance et alpha
- Afficher par la technique du carton découpé (billboard)
- utiliser GL_MODULATE pour contrôler la couleur et la transparence
de la fumée
- Faire varier la taille, position et opacité en fonction du temps :
carton qui s'agrandit en devenant transparent

Générer la fumée
- Méthodes procédurales : bruit avec turbulences, hypertextures,
fractales...
- Dessinez-la !
- Scannez-la !
Fumée volumétrique
- Utiliser des textures 3D et du volume-rendering
- Techniques procédurales pour générer la texture 3D
- Effets dynamiques intéressants : perturbation des coordonnées de
texture = déformation du volume
- Coûteux en temps de calcul
Traînées de vapeur
- Derrière les avions, missiles, etc.
- La taille et la densité varient avec le temps
- Différent de la fumée : laisse une trace
- Émuler la traînée par des "plumes" de fumée qui se
recouvrent
- Mémoriser la trajectoire et redessiner la trace à chaque
frame
- La contribution de chaque "plume" diminue avec le temps. Utiliser
la transparence avec précaution (ordre de dessin)
- Augmenter la largeur de la traînée avec le temps

Feu
- Utiliser une géométrie simple : OK si on est loin
- Générer les images par déformations stochastiques d'images de
feu
- Combiner les image en un film en boucle
- Ajouter de la fumée par combinaison des techniques de vapeur et de
fumée

Feu et Explosions
- Similaire à une bouffée de fumée, mais avec une texture d'explosion
- Se dilate avec le temps
- Devient transparent avec le temps
- Mélanger avec de la fumée
- Systèmes de particules pour les débris
- Éclair au moment de l'explosion
Nuages
- Créer une couche de nuage avec un polygone texturé
- Synthétiser les textures de nuages : Synthèse de Fourier (Gardner,
etc.) ou méthodes stochastiques (Perlin, Ebert, etc.)
- Mouvement des nuages par translation des coordonnées de textures :
Utiliser les textures "cycliques" (bord droit = bord gauche, bord
haut = bord bas).
- Au sol : utiliser texture luminance + alpha ou alpha = luminance


Fond du ciel
- Le ciel n'est pas uniforme : plus saturé (profond) au zénith,
moins saturé et décalage de couleur à l'horizon
- Dépend de l'heure du jour
- Simuler avec des polygones : Cylindre, sphère ou cercle, avec une
couleur par sommet.
Eau : au-dessus de la surface
- Utiliser un maillage polygonal
- Modulation sinusoïdale des positions des sommets
- Rendu : texture mapping simple ou réflexion mapping ou transparence

Eau : au-dessous de la surface
- Simuler les micro-algues et la rouille en modulant l'intensité
avec une texture
- Simuler mouvement de l'eau et effets optiques par perturbation des
sommets 3-D ou par déformation de l'images (sinusoïdes)
- Filtrer les couleurs pour donner une teinte verdâtre
- Bulles d'air avec une géométrie sphérique
Brouillard
- Utiliser fog OpenGL pour le brouillard et la brume
- Meilleure simulation avec EXPONENTIAL ou EXPONENTIAL_SQUARED
- Utiliser le brouillard pour "masquer" les défauts lointains (fin
du terrain...)
- Le vrai brouillard varie avec l'altitude, et comporte aussi des
structures 3-D
Références
Cours original: "Advanced Graphics Techniques Using OpenGL", Tom Mc
Reynolds, Gigapixel, inc.