Dorian Fevrier's blog - Mot-clé - aléatoire
Je m’appelle FEVRIER Dorian, je suis infographiste 3D passionné par mon métier, l’informatique en général, l’internet, la programmation et l’évolution de tout ce petit monde. Vous trouverez sur ce blog des tutoriaux, mes coups de cœurs, avis, etc.
2024-01-02T23:48:05+01:00
FEVRIER Dorian
urn:md5:695d9c73474c33ce3dab043823509c4b
Dotclear
Petit script Maya pour utiliser les objectID par particule
urn:md5:038be63299b2d2f7a738f3dd424e097f
2011-07-17T21:50:00+02:00
2013-07-26T18:07:35+02:00
Narann
Script et code
aléatoire
fr
id
instancer
maya
particule
script
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2011_07_17_code_particle_objectid/code_particle_objectid_tn.png" alt="code_particle_objectid_tn.png" style="float:left; margin: 0 1em 1em 0;" title="code_particle_objectid_tn.png, juil. 2011" height="150" width="150" />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.</p>
<p>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:</p>
<p>Enjoy!</p> <h3>Le script</h3>
<p>C'est assez basique mais ça évite bien des clics. :sourit:</p>
<pre class="python python"><span style="color: #ff7700;font-weight:bold;">import</span> maya.<span style="color: #dc143c;">cmds</span> <span style="color: #ff7700;font-weight:bold;">as</span> <span style="color: #dc143c;">cmds</span>
<span style="color: #808080; font-style: italic;"># get the selected nodes</span>
selectionList = <span style="color: #dc143c;">cmds</span>.<span style="color: black;">ls</span><span style="color: black;">(</span> selection=<span style="color: #008000;">True</span> <span style="color: black;">)</span>
nodeList = selectionList<span style="color: black;">[</span>:<span style="color: #008000;">len</span><span style="color: black;">(</span>selectionList<span style="color: black;">)</span>-<span style="color: #ff4500;">1</span> <span style="color: black;">]</span> <span style="color: #808080; font-style: italic;"># get all nodes except the last one</span>
myPlane = selectionList<span style="color: black;">[</span> <span style="color: #008000;">len</span><span style="color: black;">(</span>selectionList<span style="color: black;">)</span>-<span style="color: #ff4500;">1</span> <span style="color: black;">]</span> <span style="color: #808080; font-style: italic;"># get the last node wich should be the plane you want to spread particle on</span>
<span style="color: #808080; font-style: italic;"># create the particle system</span>
myEmitter = <span style="color: #dc143c;">cmds</span>.<span style="color: black;">emitter</span><span style="color: black;">(</span> myPlane, <span style="color: #008000;">type</span>=<span style="color: #483d8b;">"surface"</span>, speed=<span style="color: #ff4500;">0</span> <span style="color: black;">)</span><span style="color: black;">[</span><span style="color: #ff4500;">1</span><span style="color: black;">]</span>
myParticleSys = <span style="color: #dc143c;">cmds</span>.<span style="color: black;">particle</span><span style="color: black;">(</span><span style="color: black;">)</span> <span style="color: #808080; font-style: italic;"># [u'particle1', u'particleShape1']</span>
<span style="color: #dc143c;">cmds</span>.<span style="color: black;">connectDynamic</span><span style="color: black;">(</span> myParticleSys<span style="color: black;">[</span><span style="color: #ff4500;">0</span><span style="color: black;">]</span>, emitters=myEmitter <span style="color: black;">)</span> <span style="color: #808080; font-style: italic;"># connect the emitter to the particle system</span>
myInstancer = <span style="color: #dc143c;">cmds</span>.<span style="color: black;">particleInstancer</span><span style="color: black;">(</span> myParticleSys<span style="color: black;">[</span><span style="color: #ff4500;">1</span><span style="color: black;">]</span>, addObject=<span style="color: #008000;">True</span>, <span style="color: #008000;">object</span>=nodeList <span style="color: black;">)</span> <span style="color: #808080; font-style: italic;"># create instancer from all the selected objects</span>
<span style="color: #808080; font-style: italic;"># add per particle attributes</span>
<span style="color: #dc143c;">cmds</span>.<span style="color: black;">addAttr</span><span style="color: black;">(</span> myParticleSys<span style="color: black;">[</span><span style="color: #ff4500;">1</span><span style="color: black;">]</span>, ln=<span style="color: #483d8b;">"randIndexPP"</span>, dt=<span style="color: #483d8b;">"doubleArray"</span> <span style="color: black;">)</span>
<span style="color: #dc143c;">cmds</span>.<span style="color: black;">addAttr</span><span style="color: black;">(</span> myParticleSys<span style="color: black;">[</span><span style="color: #ff4500;">1</span><span style="color: black;">]</span>, ln=<span style="color: #483d8b;">"rotPP"</span>, dt=<span style="color: #483d8b;">"vectorArray"</span> <span style="color: black;">)</span>
<span style="color: #808080; font-style: italic;"># tell the particle system to use attribut "randIndexPP" for objectIndex and "rotPP" for rotation</span>
<span style="color: #dc143c;">cmds</span>.<span style="color: black;">particleInstancer</span><span style="color: black;">(</span> myParticleSys<span style="color: black;">[</span><span style="color: #ff4500;">1</span><span style="color: black;">]</span>, edit=<span style="color: #008000;">True</span>, name=myInstancer, objectIndex=<span style="color: #483d8b;">"randIndexPP"</span> <span style="color: black;">)</span>
<span style="color: #dc143c;">cmds</span>.<span style="color: black;">particleInstancer</span><span style="color: black;">(</span> myParticleSys<span style="color: black;">[</span><span style="color: #ff4500;">1</span><span style="color: black;">]</span>, edit=<span style="color: #008000;">True</span>, name=myInstancer, rotation=<span style="color: #483d8b;">"rotPP"</span> <span style="color: black;">)</span>
<span style="color: #808080; font-style: italic;"># prepare and create the expression</span>
expressionStr = <span style="color: #483d8b;">"%s.randIndexPP = rand(0,%s.9999999);<span style="color: #000099; font-weight: bold;">\n</span>"</span> <span style="color: #66cc66;">%</span> <span style="color: black;">(</span>myParticleSys<span style="color: black;">[</span><span style="color: #ff4500;">1</span><span style="color: black;">]</span>, <span style="color: #008000;">len</span><span style="color: black;">(</span>selectionList<span style="color: black;">)</span>-<span style="color: #ff4500;">2</span><span style="color: black;">)</span>
expressionStr += <span style="color: #483d8b;">"particleShape1.rotPP = << rand(-15, 15), rand(-15, 15), rand(-15, 15) >>;"</span>
<span style="color: #dc143c;">cmds</span>.<span style="color: black;">dynExpression</span><span style="color: black;">(</span> myParticleSys<span style="color: black;">[</span><span style="color: #ff4500;">1</span><span style="color: black;">]</span>, creation=<span style="color: #008000;">True</span>, <span style="color: #dc143c;">string</span>=expressionStr <span style="color: black;">)</span></pre>
<h3>Exemple</h3>
<p>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:</p>
<p>Voici trois brins d'herbe différents:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2011_07_17_code_particle_objectid/code_particle_objectid002.png" alt="code_particle_objectid" style="display:block; margin:0 auto;" title="code_particle_objectid002.png, juil. 2011" height="436" width="252" /></p>
<center><i>Avec points de pivot bien placés et freeze transformés évidement! :redface:</i></center>
<p>Sélectionnez les:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2011_07_17_code_particle_objectid/code_particle_objectid003.png" alt="code_particle_objectid003.png" style="display:block; margin:0 auto;" title="code_particle_objectid003.png, juil. 2011" height="135" width="311" /></p>
<p>Puis sélectionnez le plan sur lequel vous souhaitez que les particules soit placées:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2011_07_17_code_particle_objectid/code_particle_objectid004.png" alt="code_particle_objectid004.png" style="display:block; margin:0 auto;" title="code_particle_objectid004.png, juil. 2011" height="136" width="307" /></p>
<p>Lancez le script! :grenadelauncher:</p>
<p>Avancez de quelques images:</p>
<p><img src="https://www.fevrierdorian.com/blog/public/billets/2011_07_17_code_particle_objectid/code_particle_objectid005.png" alt="code_particle_objectid005.png" style="display:block; margin:0 auto;" title="code_particle_objectid005.png, juil. 2011" height="94" width="256" /></p>
<p>Et voyez le résultat:</p>
<p><a href="https://www.fevrierdorian.com/blog/public/billets/2011_07_17_code_particle_objectid/code_particle_objectid006.png" title="code_particle_objectid006.png"><img src="https://www.fevrierdorian.com/blog/public/billets/2011_07_17_code_particle_objectid/.code_particle_objectid006_m.jpg" alt="code_particle_objectid006.png" style="display:block; margin:0 auto;" title="code_particle_objectid006.png, juil. 2011" height="361" width="560" /></a></p>
<p>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:</p>
<h3>Conclusion</h3>
<p>En espérant que ce micro-billet-express vous servira.</p>
<p>A bientôt!</p>
<p>Dorian</p>