ゴール

ゴールとは

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

ゴール使用例

文字を NURBS カーブで作成し、そのカーブから作られた プラナーサーフェス にゴールを設定してみましょう。

  1. 以下の MEL スクリプトを makeString1.mel という名前で作ります。
    global proc makeString1()
    {
    	string $text[] = `textCurves -f "Times-Roman" -t "Maya"`;
    	string $chars[] = `listRelatives $text[0]`;
    	string $psurf[];
    
    	int $i = 0;
    	for($curv in $chars)
    	{
    		string $pln[] = `planarSrf -polygon 1 $curv`;
    		$psurf[$i] = $pln[0];
    		setAttr ($psurf[$i] + ".v") 0;
    		$i++;
    	}
    	for($ps in $psurf)
    	{
    		string $ename[] = `emitter -pos 1.5 10.0 1.5 -type "direction" -dx 0.0 -dy -1.0 -dz 0.0 -spread 0.2`;
    
    		string $pname[] = `particle`;
    		setAttr ($pname[0] + ".particleRenderType") 4;
    		string $shp[] = `listRelatives -s $pname`;
    		addAttr -ln "radius" -at "float" $shp;
    		setAttr ($shp[0] + ".radius") 0.05;
    		connectDynamic -emitters $ename[0] $pname[0];
    
    		goal -goal $ps -weight 0.2 $pname[0];
    		setAttr ($pname[0] + ".conserve") 0.9;
    	}
    }
    
  2. スクリプト エディタファイル → ソーススクリプト によって makeString1.mel を読み込みます。
  3. スクリプト エディタ のインプットウインドウで、makeString1() を実行します。
    (makeString1() 実行後の図)
    [makeString1() 実行後の図]
  4. アニメーションを実行します。
    [アニメーション実行の図]

スクリプトの解説

global proc makeString1()
makeString1 というプロシージャの宣言です。
string $text[] = `textCurves -f "Times-Roman" -t "Maya"`;
Times-Roman というフォントを使用して、 Maya という文字の形で NURBS カーブを作ります。
変数 $text[0] には作られたカーブシェイプのトランスフォームノードの名前が入ります。
以下の図では、 Text_Maya_2 が $text[0] に入る名前です。
[カーブシェイプとトランスフォームノード]
string $chars[] = `listRelatives $text[0]`;
トランスフォームノードから各カーブシェープの名前を求めます。
上の図では、 Char_M_2, Char_a_3, Char_y_2, Char_a_4 が $chars に入る名前です。
string $psurf[];
この後に作成される プラナーサーフェス の名前を入れるための配列宣言です。
int $i = 0;
整数変数 $i を宣言し、 0 で初期化します。
for($curv in $chars)
各カーブシェイプの名前を 1 つづつ変数 $curv に代入して以下のコマンドを実行します。
string $pln[] = `planarSrf -polygon 1 $curv`;
カーブシェイプから プラナーサーフェス を作ります。
$pln[0] にトランスフォームノードの名前、 $pln[1] にインプットノードの名前が入ります。
-polygon 1
ポリゴンのサーフェイスを作成します。
以下の値をとることができます。
0
NURBSサーフェイス
1
ポリゴン
2
Subdivision サーフェイス
3
Bezier サーフェイス
4
Subdivision サーフェイスソリッド
$psurf[$i] = $pln[0];
プラナーサーフェス の トランスフォームノード名を $psurf[$i] に代入します。
setAttr ($psurf[$i] + ".v") 0;
プラナーサーフェス の visibirity を 0 にして、表示されないようにしておきます。
$i++;
$i に 1 を加算します。
for($ps in $psurf)
1 つ 1 つの プラナーサーフェス の名前を変数 $ps に代入して以下のコマンドを実行します。
string $ename[] = `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 3.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 度になります。
string $pname[] = `particle`;
エミッターから放出されるパーティクルを作ります。
setAttr ($pname[0] + ".particleRenderType") 4;
パーティクルの particleRenderType アトリビュートを 4 にして、 パーティクルの形を球体にします。
string $shp[] = `listRelatives -s $pname`;
パーティクルのシェープノードを求めて、変数 $shp に代入します。
addAttr -ln "radius" -at "float" $shp;
パーティクルのシェープノードに float 型のアトリビュート radius を追加します。
この radius アトリビュートが球体の半径を表します。
setAttr ($shp[0] + ".radius") 0.05;
球体の半径を 0.05 にします。
connectDynamic -emitters $ename[0] $pname[0];
エミッターとパーティクルをコネクトして、 エミッターからパーティクルが放出されるようにします。
goal -goal $ps -weight 0.2 $pname[0];
パーティクルを文字を表す プラナーサーフェス に対してゴールの設定をします。
setAttr ($pname[0] + ".conserve") 0.9;
パーティクルのゴールに対する振れのぐあいを設定をします。
このアトリビュートを 0.0 にすると、まったく振れなくなります。

Tips (フォントのリスト)

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

fontDialog;

練習

練習課題

参考


Prev | Next
Home | Contents
Mail