Simulation de mousse à partir du Smoke Simulator de Blender

alt

Le retour du Blender Internal Renderer

Pour ceux qui ont débuté sur Blender il y a bien longtemps, le moteur de rendu Cycles n'est pas le seul moyen de sortir des images de leur logiciel 3D favoris. Le moteur historique, rebaptisé Blender Internal Renderer, était à l'époque le seul outil, hors moteurs de rendu externes, capable de calculer des images. Il fallait cependant le faire sans réelle illumination indirecte, sans modèle d'éclairement BSDF, ou tout autre joyeusetés qui font les moteurs de rendu modernes.

Bien que Cycles s'impose de plus en plus, notamment chez les plus jeunes utilisateurs de Blender, le Blender Internal Renderer peut encore aujourd'hui fournir des rendus très honorables et parfois bien plus rapides que le nouveau venu de la bande.

Parmi les expérimentations auxquels je me suis adonné, j'ai découvert il est relativement facile de détourner le simulateur de fumée de Blender afin de générer à partir de celui-ci, un flot de mousse tel qu'on peut en trouver dans le clubs. Petite démonstration :

Scène de démo fournie

Je ne vais pas ici détailler pas à pas la réalisation de cet effet, mais simplement en décrire les grandes lignes tout en vous fournissant le fichier *.blend de démo, qu'il vous suffira de charger. Une fois le fichier chargé dans Blender, pressez la touche Play, laissez avancer la simulation de quelques images, puis appuyez sur F12 pour lancer un rendu. Vous pourrez ensuite vous plonger dans la scène afin de voir la mise en place du shader visant à simuler cette mousse.

Textures 3D et mode de fusion

Tout le système repose sur le fait que le shader volumique (mis en place par exemple par Blender lors de l’utilisation de l'effet Quick Smoke) charge une texture 3D de type Voxel, émanant de la simulation. Celle-ci donne au shader une information de densité en fonction de la position dans l'espace, qui sera utilisée par le moteur au moment de la phase de Ray-Marching.

Par défaut, l'atténuation de la densité est linéaire. Mais il est possible de pondérer et modifier celle-ci grâce à la fonction Ramp. Dans un deuxième temps, il suffit de multiplier cette densité par un bruit Clouds de type Perlin ou Voronoi, afin de simuler de petites bulles dans le volume.

Au courant de l'animation, ce bruit de taille très réduite sera d'ailleurs animé en ce qui concerne sa position dans le worldspace.

Voici un aperçu du remapping en mode Constant de la densité de la fumée, suivi de sa multiplication par le bruit :

On voit bien sur la deuxième phase que la densité est coupée de manière très abrupte, un peu à la manière d'un seuil (threshold) dans un traitement d'images 2D.

Dernière recommandation, j'ai remarqué que le Smoke Adaptive Domain utilisé en conjonction du Multiple Scattering provoquait l'apparition de bandes sombres dans le volume, en fonction de la taille de la bouding-box du domaine adaptatif. Je vous conseille donc de ne pas l'utiliser quand vous lancerez le Baking final de votre simulation ... si vous comptez utiliser le Multiple Scattering bien sur.

Petite note supplémentaire pour mes amis Demomakers, sachez que cette bidouille peut très bien fonctionner en temps réel en utilisant un algo de Ray-Marching / Sphere-Tracing ... même en WebGL. A bon entendeur ... :)