Tuto Toolbox 2: Les Trippes

Premier tuto cher(e)s ami(e)s qui porte sur la toolbox 2 et qui explique le système de trippes mis en place dans hambuster.


Première étape: méthodologie

La technique consiste à créer une enveloppe de particules autour du mesh (ici des trippes) et dont chaque particule est positionnée sur un vertex. L'astuce réside dans l'utilisation du PhysX Glue qui permet d'avoir de la tension entre ces particules.

Gardez en mémoire que les unitées sont très importantes, d'elles vont dépendre tous les paramètres physique de PhysX.


la première étape, qui peut paraitre assez anodine, est la modélisation. Il va falloir penser votre maillage pour qu'il soit le plus régulier possible, car les particules vont être positionnées sur chaque vertex.
 

Il vous faut ensuite faire un clone -> copy. Le premier maillage servira à créer les particules, le second à rendre le maillage. Hiddez le second maillage, nous ne nous en servirons pas avant un moment.

Pensez à renommer vos maillage: admettons que le premier (celui sur lequel nous allons poser les particules) s'appelera Trippes_Base. Et que le second (celui qui va être rendu) s'appelera Trippes_Render.


Seconde partie: le paramètrage particules

Céez un PhysX Flow, ça doit ressembler à ça:


En premier lieu, supprimons ce qui nous est inutile dans le PhysX Flow.
Nous avons besoin que nos particules soient fixées à chaque vertex et non pas qu'elle tournent. Supprimons donc le spin.
De même nous ne voulons pas qu'elles soient crées celon la Grid de départ, mais qu'elles soient positionées sur notre mesh Trippes_Base. Remplaçons donc le Birth Grid par un Birth suivi d'un Position Object.
Le Birth  et le Position Object doivent être réglés comme suit:

Pour connaitre le nombre de particules à mettre dans Amount du Birth il vous suffit de faire un clic droit sur Trippes_Base -> Object Properties -> Objects Information -> Vertices et de copié ce nombre dans le amount de Birth

 

Maintenant que nos particules sont au nombre exact de Vertices et crées au bon endroit, il nous faut régler leur taille et leur forme. Pourquoi? Parceque la Toolbox 2 se sert de la taille et la forme des particules pour leurs collision et leur intercollision.

Si vos particules sont trop grosses et se pénètrent avant que la simulation ne débute, elles vont se pousser jusqu'à n'être plus en intercollision et donc, votre "maillage" de particule va littéralement explosé. A l'inverse, si vos particules sont trop petites, au moment ou vous lancerez votre simu, vous risquez de vous retrouver avec des pénétrations dans le maillage de votre Trippe_Render.

La taille des particules va dépendre de votre échelle, le but étant qu'elles soient les plus grosses possible sans se chevaucher.
Pour que les collisions aient l'air le plus naturel possible, il faut que les particules soient rondes. Il vous faut donc régler le Shape sur Sphere 20-sides qui vous servira pour régler les particules dans le viewport. La taille que vous donnerez aux particules dans les paramètres du Shape seront instanciées dans les paramètres du PhysX Shape grace à la fonction conform to particle shape dans l'onglet collision shape size.

Ce qui est pratique, puisque ça vous permet de ne régler ce paramètre que dans le Shape et donc visuellement dans le viewport. Il vous faut savoir que si  la fonction conform to particle shape est désactivée et que les valeures inscrites dans length, width et height de l'onglet collision shape size du PhysX Shape sont différentes de celle du Shape, alors elles prévalent sur celles du Shape (qui n'ont alors que fonction de display dans le viewport).

Il faut également que le PhysX Shape collide as Sphere (de base elles collide as a box, ce qui fausserait toute la simulation)

Voici ce que vous devez obtenir dans le viewport :



Nous allons maintenant rajouter le fameux PhysX Glue.

N'oubliez pas que lorsque vous rajouter un opérateur PhysX quel qu'il soit, il faut qu'il soit impérativement en dessous du PhysX World dans la hiérarchie ou il ne fonctionnera pas. De même, si  vous rajoutez un event après un test qui utiliserait un opérateur PhysX, n'oubliez pas d'y coller le PhysX World, sinon les opréateur physx ne fonctionneront pas dans ce nouvel event.

C'est la partie la plus intéressente mais aussi la plus "roots". Celle qui demande du temps, car elle ne fonctionne que par test. Je ne peux donc pas vous donnez de valeures absolue (d'autant plus qu'elles dépendraient de votre échelle sous 3dsmax).

je peux en revenche vous donnez un semblant de méthodologie:
Binding -> Type:Distance -> sans vous réécrire l'aide, il ne nous faut ni du rigide (qui ne permet que peut de torsion et squash and stretch ), ni du simplifed ( qui est similaire au rigid mais en plus rapide)
Timing -> Distance on event entry -> permet de créer les bind au moment de la création de l'event. l'autre option rechercherait de nouveaux bind tout au long de la simu (ce qui prend plus de ressources pour rien, puisque ne souhaitons ni créer ni détruire de liaisons)
Bind Distance et Bind Gap -> là malheureusement ça ce fait à l'oeil: il faut le plus de liaisons possibles, pour ne pas qu'il y ait de cassure dans le maillage, mais sans en avoir d'inutiles.
Max Binds p/Particles -> Là aussi, tout est question de tests, plus il y en a, plus c'est long. Mais plus la simulation sera précise. Il faut bien doser pour que ce soit optimal.
Le Max Binds p/Particles est intimement lié à un paramètre du PhysX World: le subframe factor /type. (Pour y accéder cliquez sur l'opérateur PysX World puis sur =>) Pour cette simulation le type fixed est optimal et malheureusement encore une foi le Subframe Factor est à tester. la règle indiquée dans l'aide est de faire le Max Binds p/Particles*2 + 2. Mais pour ce cas précis je vous le déconseil. En réalité on va jouer avec ce nombre pour obtenir une simulation plus dure ou plus souple: Plus le Subframe factor est petit plus les trippes vont être rigide et plus il va être élevé, plus les trippes vont être molles.

Voici mes réglages:



J'ai en plus rajouté deux opérateur un opérateur PhysX Force (qui couplé à une PBombe, lui permet d'avoir une vélocité de départ) et un opérateur PhysX Collision (qui lui permet de rentrer en collision avec une Box ou n'importe quel objet de votre chois animé ou non).

Voilà à quoi ressemble le Particle view au final:




Troisième et dernière partie: Le Rendu

Eh oui, c'est bien beau, mais comment on utilise tout ce que l'on vient de faire pour s'en servir sur un mesh? parceque c'est quand même ça le but au final.

Unhiddez la modé Trippes_Render, appliquez lui dans l'ordre: un particle skinner, un shell avec un inner amout de 0,35 et TurboSmooth à 1.

Maintenons réglons le particle skinner: Avant tout sachez que le particle skinner est dans les grandes largeures un skinwrap pour particules.
Timing: là tous les choix sont possibles en fonction de vos attentes: tous les paramètres sont assez clairs pour ne pas nécessiter d'explications.
Particle Flow System: Il vous faut sélectioner le système utilisé pour la simu.
Falloff et Distance Influence: A tester, mais c'est la même chose qu'un skinwrap, donc pas de difficulté majeure.

Pour plus de rapidité backer la simu dans les paramètre du Physx World.

Et voilà.

Voici une petite vidéo du résultat: