Licence CC BY-NC-SA

Les nParticules

Publié :

Les particules servent à créer de petites formes souvent affichées en très grand nombre. À partir de cercles opaques, on peut obtenir un gaz (fumé, nuage, etc.) ou utiliser des solides pour faire tomber des flocons de neige par exemple.

Elles ont la particularité d'être générées constamment et massivement tout en interagissant avec le décor par collision. Le moteur physique nous permettra d'ajouter aussi du vent, des turbulences et de la gravité que nous verrons dans le chapitre juste après sur les champs de force. :)

Avant une question se pose. Maya a deux moteurs physiques : un appelé Dynamotion qui gère le module "Particles" et l'autre plus récent Nucleus qui gère "nParticules". La question est de savoir lequel utiliser… ^^

Particules VS nParticules lequel choisir ?

Un moteur physique dans un logiciel de 3D se nomme un "solver", parce qu'il doit résoudre un problème physique à l'aide d'algorithmes. Nous avons le solver vieillissant "Dynamotion" qui existe depuis la toute première version de Maya et le nouveau "Nucleus" (se prononce "nucléhouce") qui a vue le jour après l'arrivé des processeurs dual core. Ce dernier gère de plus en plus de modules de Maya. À l'heure où je vous parle, il ne gère pas encore les fluides (nous n'avons pas de nFluids, ça viendra ;) ).

Vous allez me dire : "Nucleus est plus récent donc il est mieux". C'est exact, mais voyons ses deux principaux avantages en détail.

Tout d'abord au niveau des performances Nucleus est multi-threadé, il va donc utiliser plus efficacement les processeurs multi-coeur. Les solvers de Maya ne sont basés que sur le processeur et non la carte graphique, donc le multi-thread apporte à Nucleus un avantage sur Dynamotion dans le cas d'un processeur récent. Cet avantage justifie à lui seul l'utilisation de Nucleus. ^^ Mais voyons son second atout :

Nucleus est se qu'on appel un « Solver unifié » ou tout en anglais « unified solver ». Les particules peuvent interagir avec les tissus, mais ce n'est pas tout ! Les paramètres de gravité, de vent, etc. sont partagés entre tous les objets de la scène. Si vous paramétrez le vent, il sera appliqué à tous les éléments de la scène : aux tissus "nCloth", aux "nParticules", aux polygones "nMesh", etc. Nucleus crée en quelque sorte des compartiments dans lesquels vous pouvez intégrer des éléments. Par exemple, vous pouvez créer un Nucleus1 dans lequel la gravité est à 9.8 (gravité terrestre) et un Nucleus2 avec la gravité à 20. Ensuite vous assignerez quelles particules, quel vêtement, etc. sera dans Nucleus 1 ou 2.

En plus de ça vous pouvez changer en live les paramètres : pendant l'animation vous pouvez toucher à la vitesse du vent qui agira sur tous les éléments compris dans le compartiment.

Mais dans le chapitre précédent avec les flammes nous avions dû ajouté un node wind (vent), pourquoi ?

Parce que cet effet est géré par Dynamotion qui n'est pas unifié. Avec les nParticules nous n'aurons pas ce problème. ^^

Vous allez aussi voir à la fin de ce chapitre qu'on peut convertir les nParticles en polygone ce qui sert à simuler un liquide; chose qu'on ne peut pas faire avec les Particles de Dynamotion.

Comme nous avons deux solvers, nous avons deux menus. Dans le Menu Set vous trouverez "Dynamics" (Dynamotion) et "nDynamics" (Nucleus).

Il nous faudra donc aller dans nDynamics pour trouver les nParticules avec lesquels nous allons travailler. :)

Menu de nDynamics

Menu de Dynamics

Vous comprenez maintenant pourquoi nFluids est très attendu pour le prochain Maya ! Plus de performances grâce au multi thread, des paramètres unifiés et pourquoi pas faire flotter des vêtements sur de l'eau. ^^ Donc, nous allons partir sur nParticules dans ce chapitre et dans le suivant nous verrons la gravité, collision et les champs de force ! :D

Les presets d'émission et d'apparence

Avant de commencer, vérifiez que vous êtes bien en mode de lecture "Play Every Frame" et non "Real-time [24 fps]". En mettant 24 FPS, Maya sautera des frames pour avoir la simulation en vitesse réelle, le problème c'est qu'en sautant des frames la simulation ne se fera pas correctement. Vérifiez également que l'animation n’est pas jouée en boucle en mettant Looping sur "Once".

Rendez-vous dans le menu « particules ». Allez ensuite dans « Create nParticules », plusieurs choix vous sont proposés : le type d'emitter au dessus et les presets d'apparence des particules (dans le cadre rouge) :

Nous allons commencer par le plus basique le « Create Emitter ». Il s'agit d'une entité qui va faire apparaitre des particules et les propager au fil du temps dans toutes les directions. Je vais vous présenter avec les différents presets d'apparence, nous allons commencer par celui par défaut le « Cloud » (nuage). Ça donne ceci :

Vous pouvez voir qu'il y a un preset de couleurs et de comportement des particules; elles ralentissent au fil du temps.

Attends, pourquoi les nParticles ne réagissent pas à la gravité ? Elles sont bien liées à Nucleus non ?

Pas tout à fait, dans leurs options on peut leur demander d'ignorer la gravité et/ou d'ignorer le vent. Le preset « Points » lui n'ignore pas la gravité de Nucleus :

Les nParticles tombent à l'infini vers le bas. Pour qu'ils ignorent la gravité, allez dans l'attribute editor, dans l'onglet nParticleShape1 (forme des nParticules). Dans "Dynamic Properties" cochez "Ignore Solver Gravity".

Les particules balls sont volumiques et entre en collision entre eux. Ils prennent en compte eux aussi la gravité de Nucleus :

Le Thick Cloud ressemble beaucoup au Cloud à première vue, le comportement des particules est exactement le même. Se qui change c'est que chaque particule se charge d'un Fluid (un preset d'une boule de gaz) se qui vous permet de faire de la fumer plus détaillé et réaliste…

… en contrepartie il vous faudra multiplier au moins par 10 le temps de rendu par rapport au Cloud classique. Si vous n'avez pas de processeur récent et haut de gamme, oubliez se preset. Voici un rendu avec à gauche "Cloud" et à droite "Thick Cloud". Il a fallu supprimer des particules et diminuer l'antialising pour que le rendu ne soit pas trop long.

Rendu en 2 minutes 28 sec. sur un Core i7 920 (4x2.66 Ghz). Preset de Mental Ray sur "Preview : Final Gather".

Avec Water (eau) les gouttes générées se repoussent beaucoup moins entre elles qu'avec les balls, elles peuvent se chevaucher. Vous verrez à la fin de se chapitre comment améliorer l'apparence de se preset, parce que de l'eau sous forme de sphères c'est bof quoi. :p

Emettre à partir d'un objet

Emettre à partir d'un polygone/surface NURBS

N'importe quel polygone ou surface NURBS peut être une source d'émission de particules. Généralement on utilisera des formes plates pour diffuser les particules un peu partout. Ça peut servir à faire tomber de la neige.

J'ai créé un plan puis ai fait nParticles -> nParticles -> Emit from Object :

Notre emitter est par défaut en mode "Omni" (omnidirectionnel = qui émet dans toutes les directions). Avec ce mode chaque vertex émettra des particules. On s'en sert très rarement, la majorité du temps vous serez mené à utiliser le mode "Surface" :

Pourquoi n'ont-ils pas mis l'émission de type "Surface" par défaut pour le "Emit from Object" ?

Les paramètres du "Create Emitter" et du "Emit from Object" étant exactement les mêmes quand vous changer les paramètres d'un emitter ça change les paramètres de l'autre. La majorité du temps, on utilise "Create Emitter" avec un "Omni" c'est pour ça que le type sélectionné par défaut est omni.

Les presets eux continues à opérer de la même façon. Les balls émises depuis une surface entrent en collision entre elles et sont soumis à la gravité du solver.

Emettre à partir de particules

Vous pouvez émettre des particules à partir de particules, cela vous permettra de simuler une explosion ! Vu que les particules se repoussent entre elles, celle qui émet se déplacera. Sélectionnez les particules puis faites « Emit from Object » :

Fill Object

Le fill object remplit un polygone de particules. Personnellement je préfère nettement utiliser le moteur physique pour que des particules entrent en collision avec un polygone pour le remplir.

nParticule Tool

Le nParticules tool permet de placer manuellement des particules. Vous n'aurez presque jamais à l'utiliser.

Les paramètres d'emission

Après avoir vu différents presets d'émission et d'apparence des particules, voyons plus en détail comment paramétrer l'émission et ensuite l'apparence.

Comme je vous l'ai dit, nous n'allons pas voir chacun des paramètres sinon vous serez encore là demain. :p Seulement les principaux qui me paraissent inévitables; parmi eux la direction, les particules émises par seconde, la vitesse de propagation et la durée de vie.

La direction des particules

Par défaut les particules sont émises dans toutes les directions avec « omni ». Je vous ai montré l'utilisation du type "surface" pour émettre à partir d'un polygone ou surface NURBS. Vous pouvez changer le type d'émission dans les options de l'emitter dans « Basic Emitter Attributes ». Mettons le troisième type le plus utilisé le « Directionnal ». Vous pouvez voir que plus bas les paramètres de configuration de la direction ne sont plus grisé, vous pouvez les modifier.

Augmenter la valeur du "Direction Y" à 2 ne changera rien à la simulation. Vous pouvez mettre une valeur négative pour émettre vers le bas. En faites les valeurs supérieures à 1 servent à régler l'angle d'émission. Avec un "Direction Y" à 3 et un "Direction X à -1" on obtient quelque chose de légèrement incliné à gauche.

Vous devez à chaque fois rejouer la simulation pour voir les changements.

Un paramètre intéressant si vous comptez faire de la fumé est le spread (éparpillé) qui va diffuser les particules sous forme d'un cône. Une petite valeur telle que 0.1 suffit :

Spread à 0.1

Particles/Sec

En-dessous du type d'emitter est écrit « Rate (Particles/Sec) ». Par défaut 100 particules sont émises par seconde (24 frames). J'ai réalisé une image avec différentes valeurs de Particles/Sec. La simulation se fait sous 400 frames (environ 20 secondes).

Speed (vitesse)

Toujours dans les options de l'emitter vous trouverez plus bas « Basic Emission Speed Attributes ». Sachez que plus les particules iront vite plus elles effectueront de la distance avant de s'arrêter et qu'il y a aura plus d'espace entre elles :

Durée de vie

Le dernier paramètre permettra de régler une durée de vie des particules. Vous choisissez, combien de secondes une particule doit être présente avant de disparaitre. Ca évite que les particules s'entassent comme c'est le cas avec notre fumé et de gagner en performances puisque moins de particules seront affichées.

En mode constant vous indiquez combien de secondes vivront les particules. Par exemple, voici à 2.

Le problème c'est que chaque particule vit 2 secondes, il est préférable d'indiquer une fourchette (un ensemble de valeurs).

Pour indiquer une fourchette de durée de vie, passez en mode « Random Range ». Le fonctionnement est assez spécial. Vous devez indiquer une durée de vie moyenne par exemple 5. Et la rangée de secondes. Par exemple en mettant 4 en Random Range, les particules vivent entre 5 -2 et 5 +2 (3 et 7 secondes).

Pour bien vous montrer le Random Range j'ai diminué le Particles/Sec et ai augmenté le spread. Vous pouvez voir que des particules font moins de distance que d'autres, elles vivent moins longtemps.

Les paramètres d'apparence

Comme vous avez pu le voir il n'y a que 3-4 paramètres importants pour l'émission de particules, il en va de même pour l'apparence. Tout se joue sur la taille, les couleurs, l'opacité et l'incandescence.

Particle Size (Taille)

Que dire sur la taille pour être original… ça règle le diamètre… . Bien sûr ça n'a aucun intérêt avec les particules de type "point". :p

La taille peux radicalement changer une simulation. Par exemple avec le type Ball elles entreront fréquemment en collision si vous augmentez leur diamètre.

Vous pouvez en dessous régler la courbe de la taille, pour avoir quelque chose qui devient de plus en plus petit ou inversement. En faite le paramètre que vous aviez réglé est en quelque sorte un multiplicateur qui donne la taille globale des particules. C'est avec la courbe que vous règlerez plus finement. Par exemple avec le radius à 0.2 et la valeur de la courbe à 0.5 vous aurez le scale à 0.2 * 0.5 = 0.1, pareil avec le radius à 0.1 et le scale à 1 (0.1*1=0.1). Tout ça pour dire que ça ne vous sert à rien de mettre d'énormes valeurs pour votre courbe à tel point quel s'afficherera pas correctement, changer plutôt le multiplicateur pour changer la taille globale des particules.

Vous pouvez placer un deuxième points pour avoir des particles de plus en plus petites ou grosses.

Si ça ne marche pas très bien comme sur mon image au dessus, passez plutôt en mode « Speed » au lieu de « Age ». Le mode Age change la taille de la particule selon sa durée de vie alors que le mode speed le change selon sa vitesse. Comme la barre est comprise entre 0 et 1 il s'agit du changement de taille entre 0 et 1 seconde en mode age. Le problème c'est que les particules s'entassent puisqu'elles ralentissent, on a plus de mal à gérer leur taille. Passer donc le type de la courbe en « Speed » à la place de « Age ». Cela changera la taille de particules en fonction de leur vitesse de déplacement. Et comme les particules ralentissent il y a des variations de leur taille :

Le paramètres tout à droite gère la taille des particules qui se déplace rapidement. Comme il y a une petite valeur, ça explique pourquoi à la base de l'emitter nous avons de petites particules.

Vous pouvez modifier la droite de la façon dont vous souhaitez, voire même en faire une spline (une courbe en français) pour avoir des effets complètement inventés :

Le shader (couleur et opacité)

Opacity

Le premier paramètre qui apparait dans shading (toujours dans nParticleShape#) et Opacity. De la même manière que pour le scale vous avez le multiplicateur qui cette fois ne peut pas aller au-delà de 1 ça ne sert donc à rien d'y toucher. En dessous l'opacity scale va nous permettre de faire des dégradés d'opacité :

Color

Color se règle de la même façon que fire. Vous choisissez diverses couleurs pour votre dégradé. Par défaut nous avons du bleu et blanc c'est original. ^^ Vous pouvez régler différentes méthodes de colorisation par exemple le random ID (fonctionne aussi avec l'opacity mais moins perceptible et intéressant). Avec les couleurs seront disposées aléatoirement. Ca donne un effet de relief. :)

Pour avoir un dégradé, passez en mode « Speed ». Pour le réalisme je vais passer ça en nuance de gris pour que ça ressemble d'avantage à de la fumé :

Vous pouvez ajouter autant de nuances de couleurs que vous voulez. J'ai ajouté une nuance d’orange pour simuler des flammes à la base de la fumé :

C'est bien beau dans la scène 3D, mais le problème de Color c'est qu'on ne voit presque rien au rendu.

On ne voit que la base de la fumé et encore…

Je vous conseil plutot de régler la couleur avec incandescence et d'utiliser un randomized ID de nuance de gris pour Color pour avoir du relief.

Incandescence

J'ai mis la même nuance de couleur avec incandescence et ai laissé color au gris. Au rendu les couleurs sont bien plus perceptibles.

Tout est clairement visible

Création d'une météorite

Bon, on a pas mal touché aux paramètres d'apparence, voyons si vous êtes capable de créer une météorite. Ça vous fera un premier exercice avec les nParticles. ^^

Pour commencer, il nous faut une source d'émission. Prenons une sphère pour la météorite. Comme elle est déformée par la vitesse, utilisez le scale pour l'allonger.

Affectez-lui un shader. J'ai choisi le blinn pour les effets d'Ambiant Color et de Glow qui lui permettront d'emettre de la lumière pour simuler la chaleur dégagée. :)

Faites traverser la météorite d'un bout à l'autre de la grille en ajoutant des keys (shift + w pour des keys du translate). Vous réglerez la vitesse de déplacement en fonction de la trainée derrière. Rappelez-vous qu'une météorite se déplace à des dizaines de milliers de km/h donc elle se déplace plutot rapidement. ^^ Pour ma part j'ai fait une animation en 100 frames.

Maintenant nous allons utiliser notre sphère comme emitter de particules. Le type d'emitter à choisir et donc… je vous laisse deviner, c'est facile. :D

Le "Emit From Object" avec un Omni. Pas besoin de le configurer en directionnel puisque la sphère créera une trainée derrière elle due à son déplacement.

Ensuite, on passe au réglage du shading. Opacity et Incandescence sont réglés en speed. Il faut que la fumé soit de plus en plus transparente au fur et à mesure qu'elle ralentit, faites donc une jolie courbe d'opacity. :) Pour l'incandescence j'ai repris les couleurs de tout à l'heure. J'ai passé le Color en « Randomized ID » avec différentes nuances de gris pour accentuer les reliefs de la fumé (bien que par défaut les particules soient ombrées avec une source de lumière, ça amplifie encore le relief ;) ).

Ca parait impressionnant, mais il n'y a que 3 paramètres à régler. ^^

Maintenant, il va falloir que vous fassiez différents tests pour régler conjointement « Particule Size » et « Particles/Sec ». Les valeurs dépendront de la vitesse de déplacement de votre météorite. Dans tous les cas, mettez un Particle Scale plutôt élevé, ça rend mieux pour la fumé. ^^

N'oubliez pas d'ajouter une source lumineuse et d'activer les ombres avec "Use Ray Trace Shadows".

Choisissez comme d'habitude notre bon vieux "Mental Ray" comme moteur de rendu avec son meilleur preset (Production: Fine Trace), activez le Final Gathering et si vous le voulez le Motion Blur (flou de mouvement) :

Le grand moment de suspens, je plaisante normalement vous devez effectuez plusieurs rendus et test avec les particules. C'est assez difficile de régler chaque paramètre entre eux, l'apparence encore ça passe, mais pour les paramètres d'émission c'est un peu plus compliqué, il faut aussi prendre en compte la vitesse. Le rendu me donne ceci :

Une météorite cartoon ! :p

Combiner polygones et particules

Non vous n'êtes hélas pas arrivé à la conclusion. :p Vous devez encore vous demander à quoi peuvent bien servir les particules Points. A émettre des points ! A les remplacer par des polygones ! Par exemple : vous êtes chargé de créer une scène comportant des milliers de vaisseaux. En remplaçant chaque particule par un vaisseau vous pourrez en quelques secondes constituer une armée. :D

L'instance

Créons ensemble une célèbre scène de la guerre des étoiles, l'attaque de l'étoile noire ! :soleil: Tout d'abord, faisons un vaisseau. Comme ici l'intérêt et de remplacer les particules par des polygones et que mon PC crash facilement nous n'allons pas trop nous attarder sur la modélisation, je vous laisse le soin de faire les détails si vous voulez. Quand le vaisseau est prêt faites Mesh -> Combine pour n'avoir qu'un polygone.

Créez un plan qui émet des nParticles de type « Point ». Ajustez maintenant les Particles/Sec, parce que 100 vaisseaux qui arrivent chaque seconde ça fait un peu beaucoup. J'ai mis 1 comme valeur. Faites un "Ignore Solver Gravity" comme au début de se chapitre. Pour que les nParticles ne ralentissent pas avec le temps, mettez plus bas la mass à sa valeur maximale.

Il est temps d'attacher le vaisseau aux nParticles. Sélectionnez le vaisseau puis les particules (dans cet ordre sinon ça ne marche pas) puis allez dans nParticles -> Instancer (Replacement). Vous pouvez ensuite changer l'échelle du vaisseau, ceux en instance suivront !

Cacher ensuite le plan et le vaisseau dans un calque pour n'avoir que les particules. Voilà notre petite scène :

Output mesh

Je vous avais promis plus haut que je vous expliquerai comment donner aux sphères de water l'apparence de l'eau. ^^ Il va pour ça nous falloir les convertir en polygones.

J'ai lancé une petite simulation d'un emitter omni qui émet sur 24 frames. Ensuite j'ai changé le radius pour le mettre à 1. Ne relancez pas la simulation, rappelez-vous qu'en changeant le radius les particules entreront plus facilement en collision et vous n'aurez pas le même résultat.

Faites ensuite Modify -> Convert -> nParticle to Polygons. Tout va disparaitre dans votre scène, mais pas de panique…

Les particules ont disparu pour laisser place aux polygones, il faut maintenant régler la taille des polygones pour les voir. L'attribute editor affiche toujours les options des particules, il faut vous rendre dans « Output Mesh » pour régler l'apparence du polygone.

La première chose à faire est d'augmenter le radius des polygones avec le "Blobby Radius Scale".

Utilisez en même temps le Threshold qui permet de smoother. Plus vous smoothez plus l'échelle du polygone sera réduite.

Le « Motion Streak » ajoute une traînée derrière les gouttes d'eau, bien utile.

Le dernier paramètre qui est peut-être le plus important le « Triangle Size » qui indique le nombre de polygones affichés. Plus la valeur est petite, plus la taille des triangles et réduites se qui augmente leur nombre.

Pour finir, appliquez-lui un shader. J'ai choisi le mia_material avec le preset water. Et un « Physical Sun and Sky » pour l'éclairage.


Fiou, j'ai réussi à vous parler de l'essentiel des nParticles en un seul chapitre ! :D Vous savez maintenant gérer les types d'émission et l'apparence de celles-ci pour obtenir de petits effets de fumés, d'eau ou encore de constituer une armée en quelques secondes. :pirate:

Dans ce qui va suivre, je vous parlerai des interactions par collisions. Vous allez apprendre à faire interagir des nParticles avec des polygones, des polygones entre eux et à utiliser différents champs de force. ;)