Goal

ゴールとは

ゴール(Goal)とはパーティクルが目標とするオブジェクトのことです。
ゴールを設定することによって、 パーティクルと目標の物体の間にスプリングがついているかのようなアニメーションを作成することができます。
カーブオンサーフェイスを除くすべてのオブジェクトをゴールにすることができ 、 ひとつのパーティクルに対してゴールを複数対応させることもできます。

ゴール使用例

文字を NURBS カーブで作成し、そのカーブから作られた planarSerface にゴールを設定してみましょう。

  1. 以下の Python スクリプトを makeString1.py という名前で作ります。
    import maya.cmds
    
    def makeString1():
        text = maya.cmds.textCurves(f='Times-Roman', t='Maya')
        chars = maya.cmds.listRelatives(text[0])
        psurf = []
        for curv in chars:
            pln = maya.cmds.planarSrf(curv, polygon=1)
            psurf.append(pln[0])
            maya.cmds.setAttr((pln[0] + '.v'), 0)
        for ps in psurf:
            ename = maya.cmds.emitter(pos=(1.5, 10.0, 1.5), type='direction', dx=0.0, dy=-1.0, dz=0.0, spread=0.2)
            pname = maya.cmds.particle()
            maya.cmds.setAttr((pname[0] + '.particleRenderType'), 4)
            shp = maya.cmds.listRelatives(pname, s=True)
            maya.cmds.addAttr(shp[0], ln='radius', at='float')
            maya.cmds.setAttr((shp[0] + '.radius'), 0.05)
    
    	maya.cmds.connectDynamic(pname[0], emitters=ename[0])
            maya.cmds.goal(pname[0], goal=ps, weight=0.2)
            maya.cmds.setAttr((pname[0] + '.conserve'), 0.9)
    
  2. スクリプト エディタ の ファイル → スクリプトのロード によって makeString1.py を読み込んで、テンキーの Enter キーなどで実行します。
  3. スクリプト エディタ のインプットウインドウで、makeString1() を実行します。
    (makeString1() 実行後の図)
    [makeString1() 実行後の図]
  4. アニメーションを実行します。
    [アニメーション実行の図]

スクリプトの解説

import maya.cmds
maya.cmds モジュールをインポートします。
def makeString1():
makeString1 という関数の宣言です。
text = maya.cmds.textCurves(f='Times-Roman', t='Maya')
Times-Roman というフォントを使用して、 Maya という文字の形で NURBS カーブを作ります。
変数 text[0] には作られたカーブシェイプのトランスフォームノードの名前が入ります。
以下の図では、 Text_Maya_2 が text[0] に入る名前です。
[カーブシェイプとトランスフォームノード]
chars = maya.cmds.listRelatives(text[0])
トランスフォームノードから各カーブシェープの名前を求めます。
上の図では、 Char_M_2, Char_a_3, Char_y_2, Char_a_4 が chars に入る名前です。
psurf = []
この後に作成される planarSerface の名前を入れるためのリストです。
for curv in chars:
各カーブシェイプの名前を 1 つづつ変数 curv に代入して以下のコマンドを実行します。
pln = maya.cmds.planarSrf(curv, polygon=1)
カーブシェイプから planarSerface を作ります。
pln[0] にトランスフォームノードの名前、 pln[1] にインプットノードの名前が入ります。
polygon=1
ポリゴンのサーフェイスを作成します。
以下の値をとることができます。
0
NURBSサーフェイス
1
ポリゴン
2
Subdivision サーフェイス
3
Bezier サーフェイス
4
Subdivision サーフェイスソリッド
psurf.append(pln[0])
planarSerface の トランスフォームノード名を psurf に追加します。
maya.cmds.setAttr((pln[0] + '.v'), 0)
planarSerface の visibirity を 0 にして、表示されないようにしておきます。
for ps in psurf:
1 つ 1 つの planarSerface の名前を変数 ps に代入して以下のコマンドを実行します。
ename = maya.cmds.emitter(pos=(1.5, 10.0, 1.5), type='direction', dx=0.0, dy=-1.0, dz=0.0, spread=0.2)
エミッターを作ります。
pos=(1.5, 10.0, 1.5)
(1.5, 3.0, 1.5) の位置にエミッターを作成します。
type='direction', dx=0.0, dy=-1.0, dz=0.0
(0.0, 1.0, 0.0) の方向にパーティクルを発生させます。
spread=0.2
パーティクルを発生させる角度を決定します。
1.0 で 180 度になります。
pname = maya.cmds.particle()
エミッターから放出されるパーティクルを作ります。
maya.cmds.setAttr((pname[0] + '.particleRenderType'), 4)
パーティクルの particleRenderType アトリビュートを 4 にして、 パーティクルの形を球にします。
shp = maya.cmds.listRelatives(pname, s=True)
パーティクルのシェープノードを求めて、変数 shp に代入します。
maya.cmds.addAttr(shp[0], ln='radius', at='float')
パーティクルのシェープノードに float 型のアトリビュート radius を追加します。
この radius アトリビュートが球の半径を表します。
maya.cmds.setAttr((shp[0] + '.radius'), 0.05)
球の半径を 0.05 にします。
maya.cmds.connectDynamic(pname[0], emitters=ename[0])
エミッターとパーティクルをコネクトして、 エミッターからパーティクルが放出されるようにします。
maya.cmds.goal(pname[0], goal=ps, weight=0.2)
パーティクルを文字を表す planarSerface に対してゴールの設定をします。
maya.cmds.setAttr((pname[0] + '.conserve'), 0.9)
パーティクルのゴールに対する振れのぐあいを設定をします。
このアトリビュートを 0.0 にすると、まったく振れなくなります。

Tips (フォントのリスト)

Maya で使用できるフォントのリストを表示するには、 以下のコマンドを実行します。

maya.cmds.fontDialog()

練習

参考


Prev
Home | Contents
Mail