Je te souhaite la bienvenue dans cette nouvelle vidéo ! Aujourd’hui, c’est une vidéo un peu spéciale parce qu’on va attaquer notre premier VFX un peu chiadé avec un tutoriel Houdini 3D. Ce qu’on va voir aujourd’hui, c’est comment fonctionne une simulation de grain avec l’algorithme Vellum et comment tu peux créer tes propres effets spéciaux avec. Allez, on perd pas plus de temps et on décolle !
Pour éviter de te perdre en route, je te conseille de regarder mes autres vidéos qui t’expliques les bases d’Houdini 3D !
==> Houdini 3D : Apprendre les Bases du Logiciel en 15 minutes ! (Part 1)
==> Houdini 3D : Les Bases du Contexte SOP (Part 2)
==> Houdini 3D : Découverte du DOP et Création d’un Pyro Solver (Part 3)
Télécharger un personnage et son animation dans Mixamo (0.16′)
Ok ! Dans un premier temps, pour pouvoir réaliser cet effet spécial, il va te falloir un personnage avec une petite animation. Du coup, on va passer les 10 prochaines heures à faire ça ensemble…
Mais non, je déconne, je te connais et je sais très bien que, comme moi, t’as pas le temps 😉
Donc on se rend sur Mixamo et on télécharge un personnage avec son animation. Après tout, aujourd’hui, on est là pour faire des VFX un point c’est tout !
Donc tu télécharges le personnage de ton choix. Je te conseille quand même de prendre la même animation que moi parce qu’elle est directement liée à l’effet spécial.
Une fois que tu auras compris comment ça fonctionne, ça sera très simple pour toi de créer tes propres versions.
Maintenant que tu as téléchargé ton personnage, son animation et que tu l’a mis bien au chaud dans ton dossier projet. On va pouvoir l’importer directement dans Houdini 3D.
Importer et animer un personnage dans Houdini 3D (1.25′)
Pour ça, dans le contexte « objet » de Houdini 3D, on commence part créer un node « File ».
On rentre à l’intérieur et on place le node nommé « FBX Character Import ». Dans cette cellule, on vient chercher notre personnage chaudement téléchargé et on met le flag bleu dessus. Comme tu peux le voir, notre personnage à décidé de se prendre pour Jésus et ceci est totalement normal !
Cette posture s’appelle communément, la « T-pose« . Si tu bouges la timeline, tu constates que le perso n’a aucune animation contrairement à ce que tu viens de télécharger. Pour l’activer, il faut que tu places en dessous le node « bone deform« .
C’est grâce à ce node que la structure osseuse va reconnaître l’animation et se mettre en mouvement. Maintenant que notre perso à bien pris vie, on va pouvoir passer à la partie mise en place FX.
Création d’un VFX dans Houdini 3D (2.07′)
Notre premier objectif va être de transformer notre personnage en sable et de lui transférer l’animation.
Le VDB (2.20′)
On va déjà commencer par transformer notre personnage en sable. Pour ça, je vais récupérer la « T-pose » de notre personnage et je vais le transformer en VDB. L’acronyme VDB veut dire Volume data base. Avec le node VDBfromPolygone, comme son nom l’indique, on peut transformer notre mesh en volume. Dans notre cas, ça nous permet d’éviter les trous dans la géométrie et de fusionner le personnage en une seule pièce. Contrairement à l’origine qui, elle, est composée de plusieurs parties.
Le paramètre VoxelSize, c‘est ce qui va te permettre de donner plus de résolution à ton VDB. Plus la taille d’un voxel est petite, plus il devrait y en avoir pour compléter ton volume. En définitif, plus il y a de voxel, plus tu auras de résolution. Fait bien attention à ce paramètre parce que tu peux vite faire planter le logiciel ainsi que ton PC !
En dessous de ce node, je place un « convert VDB« . Je met le Mode sur polygone et le tour est joué.
La création de particules de sable (3.05′)
Prochaine étape, transformer cette mesh en milliers de grain de sable. Depuis Houdini 17, il y a un node qui nous permet de le faire rapidement. Et ce node s’appelle « vellumconstraints_grain« . Ici même logique qu’avec le VDB, sauf qu’ici, on parle de ParticuleSize.
En tache de fond, c’est la même logique, les points sont créés à partir d’un volume et ont pour mission de remplir la géométrie dans son ensemble. Pareil, soit prudent, ne pousse pas cette valeur trop basse.
Pour maximiser l’optimisation, tu peux très bien copier le paramètre du VDB et le coller en relative référence sur les ParticulesSize. Pour un look plus réaliste, coche la case jitter scale et les particules vont se répartir plus naturellement.
Le transfert de l’animation du personnage à nos grains de sable (3.41)
On arrive enfin à la dernière étape de notre setup, transférer l’animation du personnage à nos grains de sable.
Pour faire ça, on va utiliser le node « PointDeform« . Ce node prend 3 paramètres :
- La géométrie transformée que l’on veut animer qui va ici, dans la première entrée.
- La « RestPosition » qui est la position statique non transformée de notre géométrie. Celle-ci va dans la deuxième entrée.
- Et enfin, dans la troisième entrée, les points qui contiennent l’animation que l’on veut transférer à notre nouvelle géométrie.
Mission accomplie ! Notre nouvelle géométrie se comporte exactement comme notre personnage initial !
La simulation dans Houdini 3D (4.19′)
On va donc pouvoir passer à la meilleure partie : la simulation ! Pour ça, on crée un DopNetwork, parce que sans DOP, pas de simulation. Connecte la sortie du PointDeforme à la première entrée du Dop et on se rend à l’intérieur.
La méthode vellum (4.29′)
Pour simuler les grains de sable, je vais utiliser la méthode vellum. Pour fait fonctionner cet algorithme, il va falloir un vellum object, un vellum solver et un vellum source.
Dans le vellum source, dans la cellule « SOP Path« , j’écris l’expression suivante : « backtick, opinputpath(« ..« ,0), et je referme le backtick« . Pour faire un backtick CTRL + ALT + et le chiffre 7. Fait le deux fois pour en avoir un.
Que nous dit cette expression ? La fonction opinputpath me permet de récupérer les liens connectés dans les entrées de mon DOP sous forme de nombre entier. Comme tu peux le voir, il y a une petite subtilité qui est que le décompte ne commence pas à 1, mais a 0. Le deuxième a donc le chiffre 1, puis 2 puis 3.
De retour dans le DOP, on copie/colle l’expression qu’on vient de taper dans « Target Path« .
On rajoute un ground plane pour que nos grains de sable ne tombent pas dans l’infini et on lance la simulation.
- Bon, premier point, notre simulation fonctionne… Mais pas exactement comme on veut. Mais au moins, les grains de sable interagissent entre eux.
- Autre point, on constate que notre personnage ne bouge pas. C’est comme si l’animation qu’on avait mise en place dans le SOP ne fonctionnait plus dans le DOP. En réalité, il manque à vellum quelques paramètres qui vont lui permettre de comprendre qu’il doit utiliser, dans sa simulation, l’animation du personnage.
Avant de lui fournir ce dont il a besoin, je vais juste rajouter une gravité avec un pop force et mettre comme valeur -9,8 sur l’axe Y. Je rajoute également une caméra et une ambiance lumineuse pour que ça soit un peu plus plaisant à l’œil.
La création d’attributs pour contrôler la simulation (6.13′)
L’attribut stopped (6.20)
Maintenant, je vais créer 2 attributs qui vont me permettre de contrôler la simulation. Le node atributescreate fait très bien le job. Comme premier attribut, je vais commencer par celui nommé Stopped et je vais mettre sa valeur sur 1.
Cet attribut fait partie d’une liste que vellum reconnais. Ce qui veut dire qu’à la seconde où on le crée, la simulation vellum sais ce qu’elle dois faire avec. Pour l’attribute stopped, si sa valeur est de 1, vellum sait qu’il doit stopper toute forme de force ou de mouvement dans la simulation.
Quand tu te rends dans le dop et que tu actives la timeline, tu peux voir que plus rien de bouge alors même qu’il y a toujours la gravité. Avec l’attribut Stopped, les particules ont pour ordre de ne pas bouger. Ça va nous permettre dans un seconde temps de réactiver l’animation de notre personnage.
L’attribut pintoanimation (6.57′)
Je retourne dans le SOP et sur l’attributecreat et je viens appuyer sur le petit + pour rajouter une ligne d’atrib. Et dans cette nouvelle cellule, je tape « pintoanimation« .
Pareil que l’attribut Stopped, pintoanimation est un attribut qui est reconnu par vellum et qui lui permet d’intégrer les animations dans le DOP. N’oublie pas de changer le type d’attribut en Intéger et de mettre sa valeur sur 1.
Au cas où, voici la documentation de Houdini 3D pour que tu vois tous les autres attributs disponibles.
Mission accomplie ! Notre homme des sables a bien repris ses mouvements dans le DOP !
L’AttributeTransfer dans Houdini 3D (7.37′)
Ces deux attributs créés vont nous permettre de contrôler efficacement nos particules. Reste à choisir quand et comment modifier ces attributs. Pour cette vidéo, j’ai choisi d’utiliser une « AttributeTransfer« . Le principe, c’est de pouvoir transférer l’attribut contenu dans un objet vers un autre objet. Tu peux utiliser cette technique pour créer, par exemple, une interaction entre deux objets et c’est ce qu’on va faire. L’idée, c’est que, si mon personnage s’approche de trop prêt du sol, alors il va commencer à se transformer en grain de sable.
Création du sol (8.05′)
On va donc commencer par créer ce fameux sol. Je me dirige dans le contexte SOP, je crée une grille, je mets 200 dans les rangées et les colonnes. Je copie/colle l’attributecreate et je change la valeur des attributs à 0. Ce qui se passe maintenant, c’est que j’ai les attributs stopped et pintoanimation crées sur cette grille. Mais à la différence de notre personnage, la valeur des deux attributs est à 0.
Création d’un Sop solver (8.31′)
Le boulot va être maintenant de transférer ces attributs, avec pour valeur 0, à notre personnage quand il sera à une certaine distance de la grille.
Je place en dessous un objet null, je le sélectionne et fais un CTRL + C pour le copier. On va en avoir besoin dans pas longtemps.
On se dirige ensuite dans le DOP. Ont crée un sop solver qu’on place juste en dessous du vellum source et on rentre à l’intérieur. Ce qu’on vient de faire à l’instant, c’est de créer un contexte SOP à l’intérieur de notre contexte DOP.
La question, c’est pourquoi on a fait ça ?
- La première raison, c’est que le node qu’on recherche, et qui s’appelle attributeTransfert, n’existe pas dans le contexte DOP. Il n’est disponible qu’en SOP.
- La deuxième raison, c’est qu’il faut que notre transfert d’attribut puisse se mettre à jour en temps réel dans la simulation. Le SOP solver est précisément fait pour ça. C’est d’ici qu’on va importer la grille dans notre simulation.
Création d’un ObjectMerge (9.18′)
Ensuite, tu crées un ObjectMerge et colle le null de la grille qu’on copie il y a quelques instants.
Comme tu peux le voir, si je mets le flag sur l’objectmerge, la grille à bien était importée dans notre DOP avec ses attributs pour valeur 0. Vu que je n’ai pas envie de déclencher la simulation pendant que je mets en place le transfert d’attribut et je vais copier le node ObjectMerge. Ensuite, je remonte dans le contexte SOP et je copie le « PointDeforme« , qui est la base du personnage avant simulation et je le colle directement dans cette cellule.
De cette manière, tu vas gagner un temps fou pour contrôler ton effet. Sinon à chaque modification, tu vas devoir relancer la simulation et ça ne va pas être possible. C’est maintenant que viens l’AttributeTransfer.
Création de l’AttributeTransfer (10.02′)
Dans le premier slot, tu places le personnage animé et dans le deuxième slot, la grille.
Ensuite, direction les paramètres du node. Tu cliques sur la petite flèche juste ici pour sélectionner les deux attributs. Direction ensuite dans « condition » et tu réduis la distance threshold jusqu’à 0.81 si tu à choisi la même animation que moi.
Hé voilà, le tour est joué ! Quand le personnage arrive à une certaine distance du sol, les deux attributs vont avoir pour valeur 0, ce qui va permettre à la simulation de faire son job et son corps va se désintégrer en milliers de grains de sable.
Ajuster le look des particules de sable dans Houdini 3D (10.38′)
Pour ce qui est du look des particules. Dans un premier temps, tu peux placer un PopDrag en dessous de ton PopForce. Ça va permettre aux particules de ne pas filer trop vite. Dans un seconde temps, je te partage les propriétés qui fonctionnent bien pour moi, mais libre à toi de jouer avec les paramètres.
- Dirige-toi sur le vellum solver et dans substeps met 7, velocity damping 0.01.
- Pour ce qui est de la friction, met le static threshold à 0.55 et le dynamic scale à 0.15.
- Dirige-toi ensuite dans le panneau Advance, puis sur grain collision. Met la répulsion sur 1000, l’attraction weight à 1 et l’attraction à 20.
Voilà les amis, c’est terminé pour aujourd’hui avec ce tutoriel Houdini 3D ! Je sais bien qu’il y a beaucoup de nouvelles notions et qu’au début, ça peut paraître très compliqué. Pas d’inquiétude, c’est tout à fait normal ! J’ai mis pas mal de temps à créer cette vidéo pour justement attaquer des effets un peu plus compliqué et pour voir comment tu réagis. Alors surtout, n’hésite pas à faire un max de commentaire ou à t’abonner à la newsletter si ce type de contenu te plaît ! En attendant, je te dis à très vite dans une prochaine vidéo ! Salut :–)