Petit script Maya pour utiliser les objectID par particule
Par Narann le dimanche, 17 juillet 2011, 21:50 - Script et code - Lien permanent
Et encore un billet express car je fais rarement des particules et j'en avais assez de devoir chercher, à chaque fois, comment créer un système de particule qui instancie des objets aléatoirement.
Je me suis donc fait un bout de code à lancer que je partage avec vous en espérant qu'il fera gagner du temps à certains. :hehe:
Enjoy!
Le script
C'est assez basique mais ça évite bien des clics. :sourit:
import maya.cmds as cmds # get the selected nodes selectionList = cmds.ls( selection=True ) nodeList = selectionList[:len(selectionList)-1 ] # get all nodes except the last one myPlane = selectionList[ len(selectionList)-1 ] # get the last node wich should be the plane you want to spread particle on # create the particle system myEmitter = cmds.emitter( myPlane, type="surface", speed=0 )[1] myParticleSys = cmds.particle() # [u'particle1', u'particleShape1'] cmds.connectDynamic( myParticleSys[0], emitters=myEmitter ) # connect the emitter to the particle system myInstancer = cmds.particleInstancer( myParticleSys[1], addObject=True, object=nodeList ) # create instancer from all the selected objects # add per particle attributes cmds.addAttr( myParticleSys[1], ln="randIndexPP", dt="doubleArray" ) cmds.addAttr( myParticleSys[1], ln="rotPP", dt="vectorArray" ) # tell the particle system to use attribut "randIndexPP" for objectIndex and "rotPP" for rotation cmds.particleInstancer( myParticleSys[1], edit=True, name=myInstancer, objectIndex="randIndexPP" ) cmds.particleInstancer( myParticleSys[1], edit=True, name=myInstancer, rotation="rotPP" ) # prepare and create the expression expressionStr = "%s.randIndexPP = rand(0,%s.9999999);\n" % (myParticleSys[1], len(selectionList)-2) expressionStr += "particleShape1.rotPP = << rand(-15, 15), rand(-15, 15), rand(-15, 15) >>;" cmds.dynExpression( myParticleSys[1], creation=True, string=expressionStr )
Exemple
Je n'allais tout de même pas balancer le truc sans que vous ayez au moins un aperçu de ce que ça donne en pratique! :hehe:
Voici trois brins d'herbe différents:
Sélectionnez les:
Puis sélectionnez le plan sur lequel vous souhaitez que les particules soit placées:
Lancez le script! :grenadelauncher:
Avancez de quelques images:
Et voyez le résultat:
Bon, c'est vrai qu'avec des brins d'herbe ça ne saute pas aux yeux mais essayez avec des formes plus claires et vous verrez de suite les objets que vous avez sélectionné placés de manière aléatoire. :sauteJoie:
Conclusion
En espérant que ce micro-billet-express vous servira.
A bientôt!
Dorian