Les corps souples avec Thinking Particles

Tout d'abord il faut qu'il soit bien clair que ceci n'a rien à voir avec la façon dont Dynamics gère les corps souples. Dans les Dynamics il y a des ressorts entre les points qui forcent le maillage à se comporter comme un tissu alors qu'avec TP il n'y a aucune connection entre les points, il y a seulement des connections entre les points d'un maillage déformé et les points de l'objet original non déformé.
Nous utiliserons une géométrie originale et une géométrie qui est déformée par l'action des particules. L'effet souple est généré en appliquant une force aux particules qui tentent de retrouver leur position par défaut, définie par la géométrie originale. Imaginez une balle au fond d'un récipient, si vous lui donnez une impulsion elle reviendra invariablement au point le plus bas du récipient. Un punching ball fonctionne plus ou moins de la même manière.

Nous allons démarrer avec une scène simple qui contient deux objets plan identiques nommés Original et Corps souple. L'original est masqué puisque c'est l'objet déformé que nous voulons voir au final.
Maintenant nous devons créer une particule pour chaque vertex (Info) du corps souple.
Pour simplifier le contrôle de notre corps souple nous lui ajouterons une propriété XPresso et nous ajouterons tous les paramètres dont nous avons besoin en tant que caractéristiques de la propriété.(Info)

Avant de commencer à créer l'expression vous devez penser à ce que vous voulez réaliser et à ce que vous voulez contrôler.

Dans notre cas nous voulons les contrôles suivants (le type de données est entre parenthèses):

  • interrupteur Activer/Désactiver (Booléen)
  • Groupe de particules (Lien)
  • Géométrie originale (Lien)
  • Temps de création des particules (Temps)
  • Durée de vie des particules (Temps)
  • Souplesse du corps souple (Flottant)

Pensez à activer le nom des ports (Info)

Notre expression sera composée de trois parties principales :

  • L'émission des particules et l'initialisation des données.
  • Fixer de façon élastique les particules à leur position par défaut.
  • Connecter le maillage du corps souple aux particules.

Nous disposons de plusieurs nœuds générateurs pour émettre des particules. Dans notre cas nous aurons besoin de PNaissance qui autorise le maximum de flexibilité.

Avant tout nous avons besoin de connaître le nombre de particules. Ce nombre dépend du nombre de vertices (Info) de la géométrie. Le nœud Point peut nous donner cette information. Connectez l'entrée "Objet" de ce nœud au port "Géométrie originale" du groupe X principal, et la sortie Quantité à l'entrée "Taux (par image)" du nœud PNaissance. Pourquoi utiliser le Taux par image ? Parce que nous voulons que toutes les particules soient crées simultanément sur une seule image et non pas sur une période de temps. Pour cela nous devons régler le Type de naissance sur Taux (par image).
Une autre partie concerne le début de l'émission et le contrôle de la durée de vie. La Durée de vie peut être simplement connectée au nœud PNaissance, mais le début de l'émission nécessite une détection. Nous pouvons déterminer, avec un nœud Comparer, si le temps courant de l'animation est égal à la valeur de début et activer le nœud PNaissance en conséquence. Comme nous avons aussi une activation générale grâce à l'interrupteur, nous devons utiliser une fonction booléenne (AND) pour être sûr que l'interrupteur et le résultat de la comparaison sont vrais simultanément. scène / scène documentée

 

 

Une partie importante manque toujours, il s'agit de l'assignement de la position des particules. Nous avons besoin pour cela d'un second nœud Point et d'un nœud PDéfinir les données. Le second nœud Point est nécessaire parce que vous ne pouvez pas utiliser un seul nœud pour accomplir deux tâches différentes dans une expression. Le premier nœud Point est utilisé uniquement lorsque le nœud PNaissance doit savoir combien de particules seront émises, alors que le second est utilisé tant qu'il y a des particules et des points. Fondamentalement PNaissance est un nœud itérateur (Info).
Réglez le nœud Point pour qu'il évalue les coordonnées des points après déformation, dans le cas ou nous aurions un maillage animé, et vérifiez aussi qu'il est réglé en Mode matriciel global (Info) car la position d'une particule est toujours globale.
PDéfinir les données doit être relié au port Naissance des particules du nœud PNaissance pour qu'il puisse savoir avec quelles particules il va travailler. L'indice du point est contrôlé par le port Numéro (naissance) qui donne le numéro d'indice de la particule active. Cela ressemble beaucoup à la variable du compteur d'une boucle For... Next. scène / scène documentée.

 

 

Comme vous le voyez, notre expression prend de plus en plus de place, il est temps de faire quelque chose pour y remédier. Veuillez sélectionner les nœuds qui déterminent le début de l'émission des particules et convertissez les en un Groupe X en sélectionnant la commande "Convertir en groupe X" du menu contextuel. Basculez le mode d'affichage du groupe sur "Standard" et activez le nom des ports.
Renommer le groupe avec un nom explicite nous permettra par la suite de savoir ce qu'il fait. scène
Il est temps de vérifier si tout cela fonctionne. Cochez la case Activer de la propriété XPresso et vérifiez que l'objet original est bien référencé dans la case lien correspondante. La durée de vie des particules doit être égale à la durée de l'animation et le début de l'émission doit être à l'image 1 (deuxième image).
Lancez l'animation.
Si tout va bien vous êtes récompensés par l'apparition d'une petite croix à l'emplacement de chaque vertex du plan.
Maintenant que les particules sont en place, de quoi avons nous encore besoin ?
En premier lieu nous avons besoins qu'elles restent en place et, comme d'habitude, il existe plusieurs moyens pour réaliser cela.
La première option serait de conserver en mémoire la position courante puis de l'utiliser comme référence, une autre serait de toujours utiliser la position des points de l'objet original.Nous choisirons la seconde option car elle nous permet d'accrocher le corps souple à un maillage qui est animé ou se déplace.
Comme cette partie est totalement indépendante de la première, il n'est pas inutile d'arranger un peu mieux notre espace de travail pour faire de la place pour des nœuds supplémentaires.
Il suffit tout simplement de sélectionner tous les nœuds et de créer un groupe X. De nouveau basculez le mode d'affichage sur "Standard". scène

A ce stade j'ai remarqué que j'avais oublié deux choses dans la première partie de l'expression.
Que faire ? Réécrire toute l'expression et refaire les scènes et les captures d'écran ? Non ! Pourquoi ? Cela vous arrivera aussi, et même assez souvent, c'est un bon moyen de voir comment on peut modifier des éléments qui sont déjà implémentés.
Que manque-t-il ? Cela peut sembler insignifiant mais plus tard cela rendrait notre expression plus ou moins inutile. Il s'agit du groupe de particules qui n'est pas assigné. Les groupes de particules sont nécessaires pour séparer les particules les unes des autres. Sans eux il serait difficile, voire impossible, de différencier quelle particule devrait être employée et de quelle manière.

Le second élément manquant est le moyen de stocker la connection entre les particules et les points, pour l'instant nous avons un simple groupe de particules mais aucun moyen de dire où elles doivent être placées.

Tout d'abord tracez une connection entre le port Lien du groupe Principal et le carré bleu en haut à gauche du groupe que vous venez de créer et ajoutez une entrée Lien. Maintenant basculez la vue de ce groupe X en mode "Plein écran". Le port Particules du nouveau nœud PGroupe est connecté à la sortie Naissance du nœud PNaissance et le port PGroupe à l'entrée externe que vous venez de créer :

 

 

La seconde partie est un peu plus complexe. Nous aurons besoin du gestionnaire de Paramètres Thinking Particles, disponible soit par le menu Plugins, soit par le menu Personnalisé de l'éditeur XPresso. Dans le gestionnaire activez l'onglet Canaux et ajoutez un canal Entier avec Numéro comme nom.
Pour définir ce numéro tracez simplement une nouvelle connection depuis la sortie Numéro du nœud PNaissance et relâchez la souris sur le carré bleu du nœud P Dédinir les données, le canal que nous venons de créer est disponible en tant que port.
   

Après avoir fait les corrections revenez à la vue standard. scène


Maintenant passon à l'élasticité de notre corps souple. Nous aurons besoin que les particules suivent le maillage de l'objet original d'une façon souple. Notre premier candidat pour exécuter cette tâche est le nœud P Suivre la position. Il peut déplacer une particule jusqu'à une certaine position, non pas en une seule étape mais progressivement. Son type peut être réglé sur Vitesse constante ou Ressort. Nous choisirons Ressort car la vitesse constante ne donnerait pas le résultat souhaité. L'option vitesse de ressort défini la force avec laquelle la particule est entraînée vers sa nouvelle position. Avec une valeur de 100 % il n'y a plus aucune élasticité, le déplacement est instantané.
Pour ajuster notre valeur d'élasticité sur cet intervalle nous emploierons un noeud maths pour soustraire la valeur de flexibilité de 1, inversant de ce fait l'intervalle.

 

 
Nous aurons besoin d'un nœud P Conduit pour obtenir l'accès aux particules. Le groupe de particules qu'il nous faut est determiné en connectant le port "Groupe de particules" de l'entrée externe du groupe X principal à l'entrée du nœud P Conduit.
Nous aurons besoin du numéro des particules, il sera obtenu via le nœud P Prélever les données.
Ce numéro est injecté dans un nœud "Point" de façon à sélectionner le bon vertex de l'objet original. (Vérifiez bien que l'entrée "Objet" est connectée au port "Géométrie originale" et que la case "coord. des points après déformation" est cochée.).
La position que nous obtenons par le nœud "Point" pouir chaque particule est utilisée pour déterminer la position à suivre. Ainsi nous nous assurons que chaque particule suivra le point qui lui a été assigné au départ.
Avec le nœud Math en mode soustraction et la valeur un dans la première entrée nous pouvons ajuster la souplesse. Maintenant une valeur de Souplesse égale à 0 donne une rigidité maximale au corps souple tandis que les valeurs allant de 0 à 1 augmentent progressivement sa souplesse.
scène
Si vous déplacez l'objet original pendant l'animation vous pouvez voir comment les particules le suivent.

Nous abordons la dernière partie : l'assignation du maillage du corps souple sur les particules.Cette expression est similaire à la précédente dans la mesure où nous avons besoin des nœuds "P Conduit" et "P Prélever les données". Nous avons besoin de prélever les données "Position" et "Numéro". Ces valeurs sont injectées dans un nœud "Point". Le port d'entrée "Objet" du nœud "Point" est connecté à un nouveau nœud "Objet" que nous créons en faisant glisser l'objet "Corps souple" dans l'éditeur XPresso. Nous nous assurons que l'expression fonctionnera même si nous déplacons la propriété XPresso sur un autre objet que nous voulons utiliser comme corps souple en basculant la référence du nœud "Corps souple" sur "Utiliser une position hiérarchique". scène

Tout cela est impeccable, nous avons un corps souple qui fonctionne mais il manque encore une chose : une action.
Il faut agir sur notre corps souple d'une manière quelconque ainsi nous pouvons vraiment voir ce qu'il peut faire. Projeter d'autres particules sur le corps couple nous permet de réaliser cela.
 
Je pense que nous avons eu suffisamment d'expressions complexes, c'est pourquoi nous emploierons ici certains des préréglages fournis avec les Thinking Particles pour s'amuser un peu.
Dans le menu Objets->Bibliothèque d'objets vous trouverez "TP Basic Emitter" et "TP Particle Collision". Déplacez l'émetteur à -300 sur l'axe Z.
Nous aurons besoin d'utiliser les groupes de particules pour séparer les particules du corps souple de celles que nous allons projeter sur lui. Dans les paramètres Thinking Particles ajoutez deux nouveaux groupes en dessous du groupe All et renommez les en fonction de leur rôle.
Le groupe "Projectiles" est attribué à l'émetteur et à la détection de collision, le groupe "Corps souple" est affecté aux particules du corps souple et aussi à la
détection de collision.scène
Vous pouvez épicer la scène en ajoutant un préréglage "Wind" (Vent) avec une force et une turbulence élevées.

J'ai ajusté la vitesse d'émission et la taille des particules dans la scène finale. animation.

 

Retour à l'index