Salut à tous ! Aujourd’hui, c’est une nouvelle vidéo Houdini 3D un peu spéciale ! Avant tout, je tenais à remercier Impossiblemidi qui est à l’origine de cette vidéo. Il n’a pas hésité à demander ce qu’il souhaitait connaître et j’ai trouvé sa demande pertinente par rapport à la vidéo en question. Dans la vidéo où je montre comment faire une simulation de fluid Impossiblemidi m’a demandé s’il était possible de faire une vidéo sur le white water. Tu sais, c’est cette écume que l’on retrouve dans les océans à chaque fois qu’il y a une vague. Et bien devine quoi, Houdini 3D gère ça à merveille ! Impossiblemidi, merci pour ta question, ce tuto est fait pour toi, c’est parti !
==> Au cas où tu l’aurais loupé, la simulation de fluid, c’est par ici !
Préparation à la simulation dans Houdini 3D (1.32′)
On va donc commencer avec une box toute simple. Pour ça, on crée un node transform juste en dessous. On déplace un petit peu la box sur son axe Y et en dessous, on vient créer à nouveau un flip source.
Rappelle-toi, dans la précédente vidéo, c’est le node qui nous a permis de configurer automatiquement tous les prérequis pour une simulation de fluide.
C’est grâce à ce node que tu peux créer un VDB de type SDF ainsi que des milliers de point sur la base d’une géométrie. Tous ces éléments vont te servir comme base pour une simulation de fluide. On met ensuite un null, une catégorie et on colorise tout ça pour rester propre et organisé.
Mise en place du DOP dans Houdini 3D (2.10′)
Ensuite, vu qu’on veut faire une simulation, on va venir créer notre premier DopeNetwork. On rentre directement à l’intérieur et on configure notre setup.
Configuration initiale d’un setup de fluide (2.19′)
Étant donné qu’on veut faire une simulation de fluide, il va falloir qu’on travaille avec un flip object et un flip solver.
Une fois qu’on connecte les deux et qu’on met ça sur l’output, on peut commencer à avoir une simulation fonctionnelle.
Par défaut, le flip object vient avec déjà une forme, un cube. Attention à ne pas le confondre avec le cube qu’on a déjà créé. Ce n’est pas le même. Celui-ci est le cube par défaut qui est donné par le flip object.
Pour finir la configuration initiale du DOP, on resize la bounding box pour éviter d’avoir à calculer un trop grand nombre de données.
Configuration initiale d’un narrow band (2.51′)
La première des choses à faire dans le flip object, c’est de se diriger dans l’onglet initial data et de changer l’input type sur narrow band.
Surface volume et source initiale (3.00′)
En plus du SOP PATH, il y a deux nouvelles cellules qui deviennent disponibles. Dans l’immédiat, on va juste se concentrer sur les deux premières cellules, le SOP path et le Suface volume.
Si l’on remonte dans le SOP, et qu’on analyse correctement l’objet null qu’on vient de créer, tu te souviens que le node flip source nous a crée automatiquement un VDB nommé Surface ainsi que des milliers de particules.
Dissociation du volume et de la source (3.24′)
Pour bien dissocier les deux, et même si ce n’est pas vraiment nécessaire, je vais créer un blast. Ce node de Houdini 3D nous permet de supprimer certaines choses. Je viens ici sélectionner le nom Surface et je viens cocher cette case qui me permet de supprimer tout ce qui n’est pas sélectionné.
À ce niveau, je me retrouve uniquement avec ma surface. Je crée juste en dessous un nouveau null que je nomme OUT_SURFACE.
Ce OUT_SURFACE, je le sélectionne et je fais un CTRL+C dessus. Je me dirige à nouveau à l’intérieur du DOP sur le flip object et je colle le résultat dans le surface volume. Récupère ensuite le OUT_FLUID crée précédemment et colle le résultat dans SOP PATH.
Ensuite, on copie le voxel size du flip source et on le colle en relative référence sur les particules séparation de tout les nodes qui contiennent ce paramètre. Notre setup est correctement synchronisé.
Ajout d’une gravité dans la simulation (4.20)
Quand on active notre simulation, rien ne se passe… C’est normal, il n’y a aucune gravité. On la rajoute et notre setup fonctionne.
Jusqu’ici, pas grand chose de nouveau par rapport à la vidéo précédente. Ce qu’on va faire maintenant, c’est faire en sorte que nos particules viennent s’écraser au contact de cette bounding box. Jusqu’à présent, si les particules sortent de ce cadre, elles vont être détruite ou considérer comme mortes.
Particules fluide dans une box (4.44′)
Pour ça, il suffit juste de sélectionner l’onglet narrow band juste ici. De cocher cette case et venir fermer la bounding box sur tous les axes.
Une fois qu’on active ces paramètres, les particules n’auront plus l’autorisation de passer au travers de cette box, elles vont devoir réagir comme s’il y avait un collider.
La data des attributs stocker dans Houdini 3D (5.07′)
Place maintenant à la data. Tu vas voir, ça va être une vraie partie de plaisir ! Quand tu cliques milieu sur ta souris, au-dessus du flip objet, tu constates qu’il y a une longue liste de data. La première liste concerne les fields. On verra ça dans une prochaine vidéo. Et la liste en dessous concerne les attributs stocker sur nos points. Ok c’est bien beau tout ça, mais a quoi ça nous sert ?
Et bien, ces attributs sont une mine d’or pour contrôler nos effets. C’est précisément grâce à eux que l’on peut créer, collecter et réutiliser la data à notre guise.
La data de la vélocité (5.36′)
Prenons l’exemple de la vélocité, ici représenter par lattribut v.
La vélocité en 3D mesure la quantité de changement de position d’un objet par unité de temps dans un espace tridimensionnel. Elle est définie comme le vecteur qui décrit la direction et la magnitude du mouvement d’un objet dans l’espace.
En bref, elle nous permet de stocker la direction et la vitesse de nos particules. Une fois stockée, on peut par exemple récupérer cette data pour coloriser nos particules en fonction de leur vitesse de déplacement. C’est ce qui se passe ici dans notre viewport. Plus la vélocité des particules est lente et plus la couleur sera bleue et foncée. Inversement, plus elles sont rapides, plus elles vont être claires.
La data de la vorticité (6.15′)
De la data intéressante, le flip solver en est rempli ! Pour notre effet de WithWater, on va venir en activer une en particulier nommée « la vorticité« .
À l’intérieur du flip solver, dirige-toi vers l’onglet vorticity et active le paramètre. La vorticité est un concept en mécanique des fluides. Contrairement à la vélocité, elle ne mesure pas la direction, mais plutôt la rotation d’un fluide autour d’un axe. Elle est également désignée comme un vecteur qui décrit la direction et la magnitude de la rotation.
Pour vérifier si la vorticité est bien active dans notre simulation, on recharge notre timeline et on avance d’une frame. On refait un clique milieu de la souris et… Oui, en effet, l’attribut est bien présent. Notre première simulation est opérationnelle. On peut passer à la deuxième phase, la simulation de WhiteWater.
Importation de la data DOPnetwork dans le SOP (7.05′)
Pour ça, dans un premier temps, on va s’assurer de sortir tout la data de notre DOPnetwork afin de la récupérer directement dans notre SOP. Remonte à l’étage du dessus et fait appel au node apellé DOP I/O. Place DOPnetwork dans la première cellule. Ensuite, place le flip object, contenu à l’intérieur du DOP, dans la deuxième cellule.
Ensuite, tu n’as plus qu’à sélectionner le preset Flip Fluide. Attention, ne sélectionne pas le preset particules, sinon tu ne va pas importer tout la data.
Pour que ce soit un peu plus plaisant à l’œil et pour visualiser la data, je vais placer un node nommé « particule fluid surface » et mettre le preset sur convert to particles. Dans l’onglet visualize, on a le choix entre les deux attributs qu’on a évoqué précédemment. Soit on colorise nos particules grâce à la vélocité ou à la vorticité. Plutôt Cool hein !
Codage du « groupexpression » (7.53′)
Juste en dessous, on va faire un peu de code. Rien de bien méchant. Ce qu’on va faire, c’est créer un node nommé « groupexpression » qui va nous permettre, grâce à une petite ligne de code, de créer un groupe sur la base d’une expression.
Ce qu’on veut grouper, c’est des points. Donc, on met le type de groupe sur point. Le nom du groupe, je vais le nommer vorticity. Ensuite, je vais venir dire dans l’expression que : toutes les particules qui ont une vorticité supérieure à 7, ajoute-les dans ce groupe. Aussi simple que ça !
Les particules qui nous intéressent sont maintenant groupées. Grâce à ça, on va pouvoir tout simplement supprimer celles qui ne m’intéressent pas. Pour ça, on crée un blast, on vient sélectionner le groupe qui nous intéresse et on coche la case delete non selected.
En isolant les particules qui nous intéressent, on va pouvoir les transformer en un volume qui va directement nourrir notre prochaine simulation.
Transformation des particules en volume (8.48′)
La question est, comment transformer des particules en volume ? Et c’est une très bonne question. Mais j’en ai encore une meilleure. Comment transformer des particules, en un volume, sur la base d’un attribut ?
Cette question est rapidement résolue grâce à un node qui s’apelle « Volume Rasterize Attribute ». Il nous permet de transformer n’importe quel attribut en un volume. S’il y a un node que tu dois retenir dans cette vidéo, c’est celui-ci !
Dans notre cas, l’attribut qui nous intéresse et qu’on veut transformer en volume, c’est l’attribut Vorticity. Étant donné que je suis à la frame 1, l’attribut n’existe pas encore dans notre data. Voilà pourquoi il n’apparaît pas encore dans le panneau déroulant. Pas d’inquiétude, soit tu le rentre à la main, soit tu te met sur la frame 2 et il devrait apparaître.
Mission accomplie ! On a réussi à transformer nos particules en volume. Il nous reste plus qu’a clean tout ça avec un null.
La simulation de White Water dans Houdini 3D (9.39′)
Avant de mettre en place la nouvelle simulation de white water, je viens placer un node « name » pour apporter une petite modification à notre volume. Par défaut, le setup de white water, qu’on va mettre en place dans quelques instants, a besoin de deux choses pour fonctionner correctement.
- La première, c’est une source d’émission.
- La deuxième, c’est une vélocité pour anticiper les mouvements des nouvelles particules crées.
L’émission, on vient de s’en charger à l’instant. Pour la deuxième et bien on n’a rien à faire parce que rapelle-toi, on a toute cette data fournie directement par notre précédente simulation. Reste à savoir comment la réutiliser.
Le node name (10.14′)
Mais avant, revenons à ce node nommé « name ». Ce node va te permettre de nommer ou de renommer des choses dans Houdini 3D. Moi ce que je veux, c’est changer le nom de notre volume. Tu vas voir pourquoi dans quelques instants.
Comme tu peux le constater, mon volume s’apelle actuellement vorticity. La rasterisation lui a automatiquement donné ce nom, car elle a créé ce volume sur la base de l’attribut. Je place donc le node name juste avant mon Null. Je viens ensuite sélectionner le groupe que je veux traiter, à savoir vorticity, et dans la cellule du dessous, je rajoute le nouveau nom que je veux lui attribuer. Ce nouveau nom DOIT être emit. Vérifie bien l’orthographe, c’est très important.
La simulation White Water (10.55′)
On crée donc un nouveau dynamique opérator et on rentre de suite à l’intérieur. Ensuite, on crée un white water objet et un white water solver. On connecte tout ça et on sélectionne le solver. Comme tu peux le voir, il y a une cellule nommée émission source. Quand on laisse la souris sur ce paramètre et qu’on lit la définition, on voit que ce paramètre attend un node qui contient un VDB avec comme nom emit.
On a juste qu’à remonter en SOP, venir récupérer le manifique objet null que l’on a soigneusement préparé avec un bon vieux CTRL+C et venir le coller directement dans la celulle.
Si on active notre simulation, tu vois bien que de nouvelles particules se créent. Bon ! « On a quand même l’impression qu’elles ne bougent pas beaucoup tes particules ». Oui oui tout à fait, elles ne bougent pas du tout même ! Alors, comment fait-on pour leur donner des directions ? Tout simplement en leur fournissant une vélocité sur laquelle elles peuvent se caler.
La vélocité des particules (11.51′)
Pour ça, direction un peu plus haut dans la cellule Volume Source. On fait pareil que pour le paramètre précédent, on laisse notre souris dessus et on lit les infos. Ça nous dit qu’il faut fournir un node qui contient un volume de vélocité de fluide et un SDF (signe distance fields).
Rappelle-toi, toute la data qu’on cherche vient directement de notre simulation précédente. On n’a juste qu’à se servir.
On remonte donc en SOP, on vient faire un clic du milieu au-dessus du DOP IO et on voit qu’on a tout ce qu’il faut ! À savoir :
- notre SDF communément apellé surface dans Houdini 3D
- notre field de vélocité.
Il nous reste plus qu’a créer un null que l’on nomme OUT_VOLUME_VEL, par exemple et qu’on connecte à notre DOP IO. On le copie et on retourne dans le DOP. On colle ça dans la cellule appropriée et le tour est joué !
Les ajustements de la simulation de White Water dans Houdini 3D (12.44)
Maintenant que le setup est complété, il ne te reste plus qu’à ajuster les particules séparations pour éviter d’avoir trop de particules générées et tu obtiens ta simulation de WhiteWater !
Pour visualiser correctement des deux simulations :
- Remontes en SOP et crée deux DOP IO bien distincts.
- Dans chacun d’eux, tu vas fournir le DopNetwork et l’objet concerné.
- Duplique le node particules fluide surface deux fois.
- Pour ta simulation de fluid, laisse le paramètre de visualisation sur vélocité.
- Par contre pour le setup de WhiteWater, mets le preset sur none.
- Lance ta timeline et profite du spectacle !
Allez, c’est tout pour aujourd’hui les amis. J’espère que vous avez amassé plein de connaissances sur Houdini 3D. Pour les plus téméraires d’entre vous, je vous lance un petit défi de me rajouter des collisions à l’intérieur de cette simulation. Dès que vous pensez avoir le bon setup, envoyez-moi vos HIPfiles à l’adresse mail de la chaîne et je me ferais un plaisir de montrer le résultat dans les prochaines vidéos ! 😉