パーティクル は、
エミッターによって発生と動きのアニメーションを自動的に行なうことができますが、
同時に個々のパーティクルのアトリビュートを変化させることはできません。
そこで、 1 つ 1 つのパーティクルのアトリビュートを変化させながら、
アニメーションを実行させるには dynExpression() 関数を使用します。
アトリビュートを変化させるエクスプレッションの式には
エクスプレッション
で説明した frame や time などのキーワードが使用できます。
1 つ1 つのパーティクルの番号を指定するためには particleId などのキーワードを使用します。
最初に作られたパーティクルの番号 particleId は 0 で、
以下発生した順に 1, 2, 3, ... と番号がついてゆきます。
ダイナミックエクスプレッションの式は MEL に似た文法になっています。
Python は使えません。
パーティクルの主なアトリビュートは以下の通りです。
長い名前 (短い名前) | 型 | デフォールト値 | 説明 |
---|---|---|---|
position (pos) | vectorArray | empty | Runtime における個々のパーティクルの位置(ローカル座標) |
worldPosition (wps) | vectorArray | empty | Runtime における個々のパーティクルの位置(ワールド座標) |
velocity (vel) | vectorArray | empty | Runtime における個々のパーティクルの速度(ローカル座標) |
worldVelocity (wvl) | vectorArray | empty | Runtime における個々のパーティクルの速度(ワールド座標) |
centroid (ctd) | double3 | empty | パーティクルの平均位置(ローカル座標) |
worldCentroid (wctn) | double3 | empty | パーティクルの平均位置(ワールド座標) |
acceleration (acc) | vectorArray | empty | Runtime における個々のパーティクルの加速度 |
age (ag) | doubleArray | empty | 個々のパーティクルの寿命 |
particleId (id) | doubleArray | empty | 個々のパーティクルの番号 |
maxCount (mxc) | long | -1 | パーティクルの最大個数 |
renderType (rt) | enum | 3 | ハードウェアレンダリングの方法 |
エミッターから発生したパーティクルの色を、 赤から徐々に黒にしてゆくダイナミック・エクスプレッションを使った 関数を作ってみましょう。
import maya.cmds
def dynExpression1():
maya.cmds.particle(p=(0, 0, 0))
ename = maya.cmds.emitter(type='direction', dx=0.0, dy=1.0, dz=0.0, spread=0.5, rate=10)
pname = maya.cmds.particle()
maya.cmds.addAttr(pname[1], longName='rgbPP', dataType='vectorArray')
maya.cmds.dynExpression(pname[1], creation=True, string='rgbPP = << 1.0, 0.0, 0.0 >>;')
maya.cmds.dynExpression(pname[1], runtimeAfterDynamics=True, string='rgbPP = rgbPP * 0.995;')
maya.cmds.connectDynamic(pname[0], emitters=ename)
import maya.cmds
def dynExpression1():
maya.cmds.particle(p=(0, 0, 0))
ename = maya.cmds.emitter(type='direction', dx=0.0, dy=1.0, dz=0.0, spread=0.5, rate=10)
pname = maya.cmds.particle()
maya.cmds.addAttr(pname[1], longName='rgbPP', dataType='vectorArray')
maya.cmds.dynExpression(pname[1], creation=True, string='rgbPP = << 1.0, 0.0, 0.0 >>;')
maya.cmds.dynExpression(pname[1], runtimeAfterDynamics=True, string='rgbPP = rgbPP * 0.995;')
maya.cmds.connectDynamic(pname[0], emitters=ename)