Cet article propose une approche de simulation numérique des nuages pour des applications de synthèse d’images. Les originalités de la méthode proposée par les auteurs par rapport aux méthodes précédentes sont d’une part la rapidité relative du rendu (grâce à l’utilisation d’OpenGL) et la modélisation de l’advection par le vent, de la disparition des nuages et des rayons de lumière traversant la couche nuageuse. Enfin, la méthode de modélisation ne s’appuie pas sur les lois physiques de la mécanique des fluides, mais l’objectif est ici le résultat visuel.
Nous nous attacherons d’abord à présenter en détail le modèle utilisé par les auteurs, puis les solutions mise en oeuvre pour le rendu rapide, enfin nous expliquerons les points particuliers auxquels nous avons fait face pour notre propre implantation de cet algorithme.
Le modèle utilisé par l’équipe est un automate cellulaire. Chaque cellule correspond à un voxel de la subdivision de l’espace, et à ces cellules sont assignées trois variables :
- hum, représente le degré d’humidité de l’air
- cld, la présence de nuage
- act, le facteur de changement de phase entre l’état gazeux et liquide
Chacune de ces trois variables est à valeur dans {0,1}.
hum(i,j,k,t) = 1 : il y a assez d’humidité en (i,j,k) pour former un nuage
act(i,j,k,t) = 1 : la transition de gaz en liquide peut s’effectuer en (i,j,k)
cld(i,j,k,t) = 1 : il y a un nuage en (i,j,k) ) l’instant t.
L’évolution des nuages s’obtient donc par application de simples règles de transitions (formation, extinction, advection par le vent).
Les nuages sont semblables à des bulles d’air qui se réchauffent lors du survol de terrains chauds. Rendues moins denses, elles s’élèvent dans les régions à faibles pressions puis se dilatent. Cette expansion refroidit ces bulles d’air, provoquant à l’intérieur une relative humidité. Ensuite, un phénomène de transition de vapeur en eau liquide intervient.
Les règles de transitions sont donc les suivantes :
hum(i,j,k,ti+1) = hum(i,j,k,ti) ET NON(act(i,j,k,ti))
cld(i,j,k,ti+1) = cld(i,j,k,ti) OU act(i,j,k,ti)
act(i,j,k,ti+1) = NON(act(i,j,k,ti)) ET hum(i,j,k,ti) ET fact(i,j,k)
où fact est fonction de act autour de la cellule concernée :
fact(i,j,k) = act(i-2,j,k,ti) OU act(i-1,j,k,ti) OU act(i+1,j,k,ti) OU act(i+2,j,k,ti) OU act(i,j-1,k,ti) OU act(i,j+1,k,ti) OU act(i,j+2,k,ti) OU act(i,j,k-2,ti) OU act(i,j,k-2,ti) OU act(i,j,k-1,ti) OU act(i,j,k+1,ti)
Evidemment, hum, cld et act valent 0 à l’extérieur de la zone nuageuse.
Initialement, hum et act sont tirés aléatoirement, et cld = 0.
Dans le modèle de Nagel, il n’y a jamais d’extinction de nuage. Cela est dû au fait qu’une fois cld à 1, aucune règle ne peut le mettre à 0.
Dans le modèle présenté ici, un champ de probabilité pext a été ajouté pour contrôler la probabilité d’extinction d’un nuage dans une zone.
Ainsi, la règle concernant cld devient (rnd étant un nombre aléatoire) :
si cld(i,j,k,ti) = 1 alors cld(i,j,k,ti+1) = 0 si rnd < pext
1 sinon
pext peut être différent pour chaque cellule afin de simuler des régions de plus ou moins forte densité nuageuse.
Mais ici, les nuages ne sont jamais régénérés une fois leur extinction. Pour remédier à ce problème, il suffit d’introduire phum et pact, respectivement la probabilité d’humidité et la probabilité d’activation, dans les règles précédentes. Les règles sont donc :
si hum(i,j,k,ti) = 0 alors hum(i,j,k,ti+1) = 1 si rnd < phum
0 sinon
si act(i,j,k,ti) = 0 alors act(i,j,k,ti+1) = 1 si rnd < pact
L’évolution des nuages est ainsi contrôlée par les trois paramètres pext, phum et pact propres à chaque cellule.
Finalement :
cld(i,j,k,ti+1) = cld(i,j,k,ti) ET (rnd > pext(i,j,k,ti))
hum(i,j,k,ti+1) = hum(i,j,k,ti) OU (rnd < phum(i,j,k,ti))
act(i,j,k,ti+1) = act(i,j,k,ti) OU (rnd < pact(i,j,k,ti))
Les nuages bougent dans une seule direction (l’axe des x). La vitesse du vent augmente avec l’altitude, c’est donc une fonction de z (v(z)).
Pour tenir compte du vent, il suffit d’inclure les règles suivantes :
f(i,j,k,ti+1) = f(i-v(k),j,k,ti) si i-v(k) > 0
avec f є{hum, cld, act}, et v est une fonction linéaire de z.
Des ellipsoïdes sont utilisés pour contrôler pext, phum et pact. Ce sont des zones de l’espace nuageux où les paramètres pext, phum et pact varient en fonction du type de nuage souhaité. Ainsi, phum et pact seront plus élevés au centre de chaque ellipsoïde qu’en son bord, et, à l’inverse, pcld...
xyzgeo