これらのオプションは、ペイント エフェクト ブラシ設定(Paint Effects Brush Settings)ウィンドウのチューブ(Tubes)セクション、および任意のブラシ ノードのアトリビュート エディタ(Attribute Editor)のサブセットとして表示されます。
チューブの作成/成長過程で独自のエフェクトを適用する MEL スクリプトを書くことができます。MEL スクリプトには作成用(Creation)スクリプトとランタイム(Runtime)スクリプトの 2 種類があります。
通常は、次のように、Maya のスクリプト用ディレクトリに用意されているサンプル スクリプトを必要に応じて変更するのが便利です。
- 目的の機能の MEL ファイルを Maya scripts ディレクトリからコピーします。
(Windows および Linux) mayapath/scripts/paintEffects
(Mac OS X) mayapath/Maya/Contents/scripts/paintEffects
- ファイルをローカルのスクリプト ディレクトリに貼り付け、名前を変更します。
- 機能を変更します。関数の名前とファイル名の接頭辞部分(leafDroop など)は一致させてください。関数の宣言(入力引数のリスト)を変更してはなりません。
-
作成用スクリプト(Creation Script)
-
作成用スクリプトは通常のチューブ作成ルーチンと数多くのコントロールをオーバーライドします。Maya のスクリプト用ディレクトリには、次の作成用スクリプトがサンプルとして用意されています。
-
paintCreateFunc.mel: 一般的なチューブ作成過程をシミュレートします。
-
ランタイム スクリプト(Runtime Script)
-
ランタイム スクリプトは、新しいセグメントがチューブに追加されるたびにコールされます。通常、実行するほとんどの事項はランタイム スクリプトを使用します。Maya のスクリプト用ディレクトリには、次のランタイム スクリプトがサンプルとして用意されています。
-
paintRuntimeFunc.mel: チューブの付け根に 2 枚のリーフを作成し、ランダムな刻みを追加します。
-
paintCollideFunc.mel: チューブを 0, 1, 0 に配置されている 2 単位の球と衝突させます。この関数を使用すると、球の位置をシーン内のオブジェクトにバインドする新しい関数を作成できます。
-
leafDroop.mel: すべてのリーフを下方向へ垂らします。木に作用する重力を負の値に設定すれば、木を上方向に成長させると同時にリーフを垂らすことができます (余分な大枝を作成しない場合は、新しい関数の雛形としてこの関数を使用すると便利です)。
-
widthNoise.mel: チューブに沿った幅をランダムに変化させます。影響を受けるのはチューブの付け根と小枝だけで、リーフや花は変化しません。
注: 作成用スクリプトとランタイム スクリプトは相互に排他的であり、それぞれの機能を交換することはできません。
ランタイム スクリプトを使用するときは、新しいセグメントがチューブに追加されるたびに関数がコールされるため、複雑なオブジェクトではワイヤフレームの表示更新速度が遅くなる場合があります。
ランタイム コールバック
ストロークまたはブラシ名を使用すると、名前に基づいてランタイム プロシージャを変更できます。
コールバック関数を使用するカスタム ペイント エフェクト(Paint Effects) ブラシには、すべてのコールバック プロシージャ定義の末尾に 2 つの引数であるブラシ名とストローク名が存在する必要があります。これらの引数によってブラシ名と、コールバックをトリガしたストローク名を知ることができます。
これらのコールバック引数はサンプル スクリプトにもあります(例: <maya_home>/scripts/paintEffects/leafDroop.mel)
ランタイム コールバックを実行するためには、以下を実行します。
- <maya_home>/scripts/paintEffects/leafDroop.mel を <maya_home>/scripts/startup にコピーします。
- print ("brushName="+$brushName+"¥n"); ステートメントを leafDroop.mel にあるコールバック内の任意の場所に追加します。
- モデリング(Modeling)メニュー セットで、を選択し、を選択します。
- ペイント エフェクト ブラシ設定(Paint Effects Brush Settings)ウィンドウでチューブ(Tubes)をクリックします。
- チューブ(Tubes)チェック ボックスを選択します。
- ユーザの MEL スクリプト(User MEL scripts) をクリックします。
- ランタイム スクリプト(Runtime Script)テキスト領域で leafDroop と入力します。
- Maya シーン ビューでペイント エフェクト(Paint Effects) ストロークをいくらか描画してみて、leafDroop プロシージャがコールされるのを確認する必要があります。