SuiTechLog

Unity,Arduino,RaspberryPiなど、モノづくり系を気ままに書き残すブログ。

Maya nParticle emit from objectで、emit元のオブジェクトを別のオブジェクトに切り替えたい


nParticleの、emit from objectのお話。

 

 仕様変更等で、emitterの設定や使うパーティクル(nucleus等)はそのままで、発生するオブジェクトのみを変更したいということがありましたが、Mayaデフォルトの機能では変更する術がなさそうでした。(パーティクルとemitterの接続変更は見つかったのですが…。もしあれば教えていただけると幸いです。)

 

 色々検証した結果以下の手順ならできそう、ということがわかりました。

 

図1のように、cubeからemit from objectで、パーティクルが発生していて、それをsphereから発生するように切り替えたい場合の例です。

f:id:sui332015:20170816114856j:plain

図1.左のcubeから赤いパーティクルが発生。右はただのsphere。

 

 

1.準備

 sphereに対し、emit from objectを実行して、まず仮のnParticleを発生させます。(図2)

f:id:sui332015:20170816114943j:plain

図2.右のsphereから仮の、青いパーティクルが発生 

 

cubeとsphereを選択して、window->hypergraph : connectionsを開きます

cubeとsphereそれぞれの geoconnectorとemitterを探して見やすいように並べます。(図3)

f:id:sui332015:20170816115733j:plain

図3.切れてしまってますが左端の上がcubeのshape、左端の下がsphereのshapeノードです。 

 

この例ですと

cubeのgeoconnector(geoconnector1)->cubeのemitter(emitter1)

sphereのgeoconnector(geoconnector2)->cubeのemitter(emitter2)

上記のように接続されています。

 

 これは、cubeのジオメトリ(メッシュ)をcubeのemitterに渡している処理になります。sphereもまた同じようにemitterに自身のメッシュを渡しています。なので、sphereのジオメトリをcubeのemitterに渡してあげれば、発生源のメッシュだけ切り替えることができる・・・はずです。

 

2.geoconnector->cubeの接続の削除

 まず一旦cube、sphereそれぞれのgeoconnectorノードからemitterノードへの接続(矢印)を選択してdeleteし、接続を削除してください。(図4)

f:id:sui332015:20170816120315j:plain

図4.メッシュとemitter間の接続が解除されています。

 

3.スクリプトで再接続

 

 そして、下記のスクリプトをコピーして編集してください。

3行目、fromGeoConnectorのところをsphereのgeoconnectorに書き換えます。

4行目、toEmitterのところをcubeのemitterに書き換えます。

そしてwindow->GeneralEditors->scriptEditorのpythonタブにはりつけて、スクリプトを実行します。

import maya.cmds as cmds

fromGeoConnector = 'geoConnector2'
toEmitter = 'emitter1'

cmds.connectAttr( fromGeoConnector+'.ownerCentroid', toEmitter+'.ownerCentroid' )
cmds.connectAttr( fromGeoConnector+'.sweptGeometry', toEmitter+'.sweptGeometry' )
cmds.connectAttr( fromGeoConnector+'.ownerVelocities', toEmitter+'.ownerVelData' )
cmds.connectAttr( fromGeoConnector+'.ownerPositions', toEmitter+'.ownerPosData' )
cmds.connectAttr( fromGeoConnector+'.ownerCentroidLocal', toEmitter+'.translate' )

 

 

これを実行すると

sphereのgeoconnectorからcubeのemitterに接続ができます。(図5)

f:id:sui332015:20170816120515j:plain

図5.接続された状態です。

 

これによって、再生するとsphereの表面から、元々cubeからでていたパーティクルが発生するようになります。(図6)

f:id:sui332015:20170816120639j:plain

図6.右のsphereから赤いパーティクルがでるようになっています。

 

4.後片付け

 

あとは、不要になったcubeのgeoconnectorと、元々のsphereのemitterやパーティクルノードなどを削除します。(図7)

f:id:sui332015:20170816120546j:plain図7.不要なノードを削除した状態です。