nParticleの、emit from objectのお話。
仕様変更等で、emitterの設定や使うパーティクル(nucleus等)はそのままで、発生するオブジェクトのみを変更したいということがありましたが、Mayaデフォルトの機能では変更する術がなさそうでした。(パーティクルとemitterの接続変更は見つかったのですが…。もしあれば教えていただけると幸いです。)
色々検証した結果以下の手順ならできそう、ということがわかりました。
図1のように、cubeからemit from objectで、パーティクルが発生していて、それをsphereから発生するように切り替えたい場合の例です。
図1.左のcubeから赤いパーティクルが発生。右はただのsphere。
1.準備
sphereに対し、emit from objectを実行して、まず仮のnParticleを発生させます。(図2)
図2.右のsphereから仮の、青いパーティクルが発生
cubeとsphereを選択して、window->hypergraph : connectionsを開きます
cubeとsphereそれぞれの geoconnectorとemitterを探して見やすいように並べます。(図3)
図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)
図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)
図5.接続された状態です。
これによって、再生するとsphereの表面から、元々cubeからでていたパーティクルが発生するようになります。(図6)
図6.右のsphereから赤いパーティクルがでるようになっています。
4.後片付け
あとは、不要になったcubeのgeoconnectorと、元々のsphereのemitterやパーティクルノードなどを削除します。(図7)
図7.不要なノードを削除した状態です。