ソフトボディ によって NURBS、ポリゴンやラティスを柔らかい物体として表現できます。
ただし、トリムされた NURBS はポリゴンに変換しないとソフトボディに変換できません。
ソフトボディを作ると対応する CV や頂点にパーティクルが作られ、
そのパーティクルがフィールドなどによってアニメーションされることによって、
対応した CV や頂点が同じようにアニメーションをするようになります。
Python によってソフトボディを作るためには maya.cmds.soft() 関数を使用します。
シンプルな、風になびく旗を作る Python スクリプトです。
import maya.cmds
def makeFlag1():
pname = maya.cmds.nurbsPlane(width=12.0, lengthRatio=0.5, patchesU=12, patchesV=12)
maya.cmds.rotate(0, 90, 0)
soname = maya.cmds.soft(pname[0], goal=0.5)
maya.cmds.setAttr((pname[0] + '.visibility'), 0)
tname = maya.cmds.turbulence(pos=(-6.0, 0.0, 0.0), magnitude=100.0, attenuation=0.0)
maya.cmds.connectDynamic(soname[0], f=tname[0])
maya.cmds.expression(o=tname[0], s='phaseX = 10.0 * frame; phaseY = 10.0 * frame; phaseZ = 10.0 * frame;')
import maya.cmds
def makeFlag1():
pname = maya.cmds.nurbsPlane(width=12.0, lengthRatio=0.5, patchesU=12, patchesV=12)
maya.cmds.rotate(0, 90, 0)
soname = maya.cmds.soft(pname[0], goal=0.5)
maya.cmds.setAttr((pname[0] + ".visibility"), 0)
tname = maya.cmds.turbulence(pos=(-6.0, 0.0, 0.0), magnitude=100.0, attenuation=0.0)
maya.cmds.connectDynamic(soname[0], f=tname[0])
maya.cmds.expression(o=tname[0], s='phaseX = 10.0 * frame; phaseY = 10.0 * frame; phaseZ = 10.0 * frame;')
上で説明した turbulence のアトリビュート
phaseX, phaseY, phaseZ 以外のアトリビュートで
frequency (デフォールトは 1.0)というアトリビュートを設定すると波の大きさを変えることができます。
上のスクリプトでは以下のように実行します。
maya.cmds.setAttr(($tname[0] + ".frequency"), frequencyの値)