ユーザの MEL スクリプト(User MEL Scripts)ブラシ設定

これらのオプションは、ペイント エフェクト ブラシ設定(Paint Effects Brush Settings)ウィンドウのチューブ(Tubes)セクション、および任意のブラシ ノードのアトリビュート エディタ(Attribute Editor)のサブセットとして表示されます。

チューブの作成/成長過程で独自のエフェクトを適用する MEL スクリプトを書くことができます。MEL スクリプトには作成用(Creation)スクリプトとランタイム(Runtime)スクリプトの 2 種類があります。

通常は、次のように、Maya のスクリプト用ディレクトリに用意されているサンプル スクリプトを必要に応じて変更するのが便利です。

  1. 目的の機能の MEL ファイルを Maya scripts ディレクトリからコピーします。

    (Windows および Linux) mayapath/scripts/paintEffects

    (Mac OS X) mayapath/Maya/Contents/scripts/paintEffects

  2. ファイルをローカルのスクリプト ディレクトリに貼り付け、名前を変更します。
  3. 機能を変更します。関数の名前とファイル名の接頭辞部分(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)

ランタイム コールバックを実行するためには、以下を実行します。

  1. <maya_home>/scripts/paintEffects/leafDroop.mel<maya_home>/scripts/startup にコピーします。
  2. print ("brushName="+$brushName+"¥n"); ステートメントを leafDroop.mel にあるコールバック内の任意の場所に追加します。
  3. モデリング(Modeling)メニュー セットで、生成 > ペイント エフェクト ツール(Generate > Paint Effects Tool)を選択し、生成 > テンプレート ブラシの設定(Generate > Template Brush Settings)を選択します。
  4. ペイント エフェクト ブラシ設定(Paint Effects Brush Settings)ウィンドウでチューブ(Tubes)をクリックします。
  5. チューブ(Tubes)チェック ボックスを選択します。
  6. ユーザの MEL スクリプト(User MEL scripts) をクリックします。
  7. ランタイム スクリプト(Runtime Script)テキスト領域で leafDroop と入力します。
  8. Maya シーン ビューでペイント エフェクト(Paint Effects) ストロークをいくらか描画してみて、leafDroop プロシージャがコールされるのを確認する必要があります。