フィールドを使うことによっては、
自然界にある様々な力をシュミレートしてアニメーションを実行することができます。
フィールドは、ソフトボディ・リジッドボディ・パーティクルに作用します。
ソフトボディ・リジッドボディについての詳しいことは、
マニュアルまたは、他の章を参照してください。
Python において、オブジェクトにフィールドを作用させるためには、
以下のコマンドでパーティクル・ソフトボディ・リジッドボディなどにコネクトする必要があります。
maya.cmds.connectDynamic(オブジェクト名, fields=フィールド名)
エミッターから発生するパーティクルが 大気 フィールドによって飛ばされるアニメーションを、 以下のプロシージャーによって作ってみましょう。
import maya.cmds
def makeField1():
maya.cmds.particle(p=(0, 5, 0))
ename = maya.cmds.emitter(type='direction', dx=0.0, dy=-1.0, dz=0.0, spread=0.2, rate=3)
pname = maya.cmds.particle()
maya.cmds.connectDynamic(pname[0], emitters=ename[0])
aname = maya.cmds.air(pos=(3, 0, 0), maxDistance=5.0, magnitude=1.0, dx=-1.0, dy=0.0, dz=0.0)
maya.cmds.connectDynamic(pname[0], fields=aname[0])
import maya.cmds
def makeField1():
maya.cmds.particle(p=(0, 5, 0))
ename = maya.cmds.emitter(type='direction', dx=0.0, dy=-1.0, dz=0.0, spread=0.2, rate=3)
pname = maya.cmds.particle()
maya.cmds.connectDynamic(pname[0], emitters=ename[0])
aname = maya.cmds.air(pos=(3, 0, 0), maxDistance=5.0, magnitude=1.0, dx=-1.0, dy=0.0, dz=0.0)
maya.cmds.connectDynamic(pname[0], fields=aname[0])
エミッターから発生するパーティクルが newton フィールドによって NURBS 平面 の中に吸い込まれてゆくアニメーションを、 以下のプロシージャーによって作ってみましょう。
import maya.cmds
def makeField2():
maya.cmds.particle(p=(5, 10, 0))
ename = maya.cmds.emitter(type='direction', dx=0.0, dy=-1.0, dz=0.0, spread=0.2, rate=3)
pname = maya.cmds.particle()
maya.cmds.connectDynamic(pname[0], emitters=ename[0])
maya.cmds.nurbsPlane()
maya.cmds.scale(0, 10, 10)
nname = maya.cmds.newton(magnitude=1.0, maxDistance=8.0, attenuation=0.98)
maya.cmds.connectDynamic(pname[0], fields=nname[0])
スクリプトの前半は makeField1.mel と同じなので、後半のみ解説します。
maya.cmds.nurbsPlane()
maya.cmds.scale(0, 10, 10)
nname = maya.cmds.newton(magnitude=1.0, maxDistance=8.0, attenuation=0.98)
maya.cmds.connectDynamic(pname[0], fields=nname[0])
import maya.cmds
def makeGravity():
ename = maya.cmds.emitter(pos=(0, 0, 0), type='direction', dx=0, dy=1, dz=0, spread=0.2, speed=15.0, rate=100)
pname = maya.cmds.particle()
maya.cmds.connectDynamic(pname[0], emitters=ename[0])
gname = maya.cmds.gravity(pos=(0, 0, 0), magnitude=9.8, dx=0 ,dy=-1 ,dz=0)
maya.cmds.connectDynamic(pname[0], f=gname[0])
import maya.cmds
def makeDrag():
ename = maya.cmds.emitter(pos=(0, 0, 0), type='direction', dx=0, dy=1, dz=0, spread=0.2, rate=3)
pname = maya.cmds.particle()
maya.cmds.connectDynamic(pname[0], emitters=ename[0])
dname = maya.cmds.drag(pos=(0, 0, 0), magnitude=0.3, dx=0, dy=1, dz=0)
maya.cmds.connectDynamic(pname[0], f=dname[0])
import maya.cmds
def makeRadial():
ename = maya.cmds.emitter(pos=(0, 0, 0), type='direction', dx=0, dy=1, dz=0, spread=0.2, rate=3)
pname = maya.cmds.particle()
maya.cmds.connectDynamic(pname[0], emitters=ename[0])
rname = maya.cmds.radial(pos=(-2, 5, 0), magnitude=-2.0, maxDistance=3.0)
maya.cmds.connectDynamic(pname[0], f=rname[0])
import maya.cmds
def makeTurbulence():
ename = maya.cmds.emitter(pos=(0, 0, 0), type='direction', dx=0, dy=1, dz=0, spread=0.2, rate=3)
pname = maya.cmds.particle()
maya.cmds.connectDynamic(pname[0], emitters=ename[0])
tname = maya.cmds.turbulence(pos=(0, 5, 0), magnitude=2.0, maxDistance=3.0)
maya.cmds.connectDynamic(pname[0], f=tname[0])
import maya.cmds
def makeUniform():
ename = maya.cmds.emitter(pos=(0, 0, 0), type='direction', dx=0, dy=1, dz=0, spread=0.2, rate=3)
pname = maya.cmds.particle()
maya.cmds.connectDynamic(pname[0], emitters=ename[0])
uname = maya.cmds.uniform(pos=(-2, 5, 0), magnitude=2.0, maxDistance=3.0)
maya.cmds.connectDynamic(pname[0], f=uname[0])
import maya.cmds
def makeVortex():
ename = maya.cmds.emitter(pos=(0, 0, 0), type='direction', dx=0, dy=1, dz=0, spread=0.2, rate=50)
pname = maya.cmds.particle()
maya.cmds.connectDynamic(pname[0], emitters=ename[0])
vname = maya.cmds.vortex(pos=(0, 0, 0), magnitude=0.15, maxDistance=30.0, ax=0, ay=1.0, az=0)
maya.cmds.connectDynamic(pname[0], f=vname[0])