ゴール
ゴールとは
ゴール(Goal)とは、パーティクルが移動するときに目標とするオブジェクトのことです。
ゴールを設定することによって、
パーティクルと目標の物体の間に、スプリングがついているかのようなアニメーションを作成することができます。
カーブオンサーフェイスを除く、すべてのオブジェクトをゴールにすることができ 、
1 つのパーティクルに対してゴールを複数対応させることもできます。
ゴール使用例
文字を NURBS カーブで作成し、そのカーブから作られた プラナーサーフェス にゴールを設定してみましょう。
- 以下の MEL スクリプトをPyMELスクリプトに書き換えて makeString1.py という名前で作ります。
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;
}
}
- の によって makeString1.py を読み込みます。
- のインプットウインドウで、makeString1() を実行します。
(makeString1() 実行後の図)
- アニメーションを実行します。
Tips (フォントのリスト)
Maya で使用できるフォントのリストを表示するには、
以下のコマンドを実行します。
pm.fontDialog()
練習
- 使用例の makeString1.py を参考にして、makeString2.py を作り、
エミッターから放出されるパーティクルの個数を制限できるようにしてみましょう。
ここでは 1 文字あたり、
1秒間に放出されるパーティクル数を 300 にして、
1 秒後にパーティクルの放出が止まるようにしてください。
(実行例)
- の によって makeString2.py を読み込みます。
(makeString2() 実行後の図)
- アニメーションを実行します。
1 文字あたり 300 個のパーティクルが作られて、1 秒後にエミッターからの放出が止まります。
(ヒント)
パーティクルの放出量をコントロールするためには、
エミッターの rate アトリビュートを 0 フレーム目に 300 、
30 フレーム目に 0 になるようにアニメーションをつければよいでしょう。
そのためには、 キーフレームによる方法と、
エクスプレッションを使用する方法があります。
キーフレームによって rate アトリビュートにアニメーションをつける場合には、
以下のコマンドによってタンジェントのタイプを step にしておいたほうがよいでしょう。
pm.keyTangent(エミッター名, outTangentType='step', attribute='rate')
- makeString2.py を参考にして makeString3.py という名前の PyMEL スクリプト作り、
の によって読み込むと、
以下のような textFieldButtonGrp がついたウインドウが表示されるようにしてみましょう。
フォント名と作成する文字を決定して 作成 ボタンをおすと、文字の形の planarSerface が作成されて、
パーティクルのゴールになるようにしてください。
(実行例)
- の によって
makeString3.py を読み込むと、以下のようなウインドウが表示されます。
テキスト の右にあるボタンは使用しません。
- フォント のボタンを右クリックしてポップアップメニューを表示し、フォントを選びます。
このポップアップメニューには、
Maya で使用できるすべてのフォントが表示されるようにしてください。
- テキスト のフィールドに作成する文字列を入力します。
- 作成 ボタンを押すと文字の形の planarSerface が作られて、ゴールになります。
- フレームを巻き戻してから、アニメーションを実行します。
(ヒント)
ラベル、テキストフィールドとボタンには pm.textFieldButtonGrp() を使用してください。
textFieldButtonGrp と ポップアップメニューの使用方法、その他は以下の通りです。
- textFieldButtonGrp の作成方法
フォント の textFieldButtonGrp のコマンド
pm.textFieldButtonGrp(textFieldButtonGrpの名前1, label='フォント', text='Times-Roman', buttonLabel='フォントリスト')
テキスト の textFieldButtonGrp のコマンド
pm.textFieldButtonGrp(textFieldButtonGrpの名前2, label='テキスト', text='Maya', enableButton=0)
- textFieldButtonGrp のテキストフィールドに表示されている文字列を調べる方法
(プロシージャの中)
文字列1 = pm.textFieldButtonGrp(textFieldButtonGrpの名前1, q=True, text=True)
文字列2 = pm.textFieldButtonGrp(textFieldButtonGrpの名前2, q=True, text=True)
文字列1、文字列2 に入っているフォントの種類とテキストを表す名前を使って文字のカーブを作成します。
そのために、textCurvesコマンドを以下のように修正します。
text = pm.textCurves(f=文字列1, t=文字列2)
window()の下の、一つ目の textFieldButtonGrp() の直後で、以下のコマンドを実行します。
- 使用できるフォントの種類を調べる方法
fname = pm.fontDialog(FontList=True)
fname に使用できるフォント名のリストが代入されています。
現在、上記のコマンドがうまく働かないので代わりに以下の代入文に書き換えてください。
fname = ['Times New Roman|w400|h-18', 'MS 明朝|w400|h-18', 'MS ゴシック|w400|h-18']
- ポップアップメニューの作成方法
pm.popupMenu()
このコマンドに続いて、
pm.menuItem() を使用してポップアップメニューの項目を作成してゆきます。
この menuItem() は、
使用できるフォントの個数だけ繰り返し実行する必要があります。
そのために、以下のように for によるループを使用します。
for フォント名 in fname:
pm.menuItem(label=フォント名, command='メニューが選ばれたとき呼ばれる コマンド')
- textFieldButtonGrp のテキストフィールドに表示されている文字列を変更するコマンド
上の メニューが選ばれたとき呼ばれる コマンド
は以下のコマンドを使用します。
pm.textFieldButtonGrp(textFieldButtonGrpの名前1, e=True, text=変更する文字列)
変更する文字列には、
上記の menuItem() で表示しているフォント名を使用します。
コマンドの途中にフォント名をあてはめるために、
文字列の結合を使用します。
フォント名にはスペースが含まれていることがあるので、
以下のようにしてあてはめてください。
\"" + フォント名 + "\"
参考
Prev | Next
Home | Contents
Mail