知識ベース

Maya埋め込み言語

Maya Embedded Language (MEL)は、オートデスクの3DグラフィックソフトウェアMayaのタスクを簡素化するために使用されるスクリプト言語です。 MayaのGUIで実行できるほとんどのタスクは、MELで実行できます。また、GUIからは使用できない特定のタスクも実行できます。 MELは、複雑なタスクや反復的なタスクを高速化する方法を提供し、ユーザーが特定のコマンドセットを他の便利なコマンドに再配布できるようにします。

設計

MELはPerlおよびTclと構文的に類似しています。いくつかのメモリ管理と動的な配列割り当てを提供し、Maya固有の機能への直接アクセスを提供します。標準のMayaコマンドの大部分は、Maya Program Filesディレクトリに保存されているデフォルトのMELスクリプトです。

MELは、主流のスクリプト言語と比較してかなり制限されています。 Melは、主にMayaセッションをジャーナルするための言語であるため、連想配列などの多くの高度な機能がありません。 Pythonは、Maya 8.5のMELの代替としてMayaに追加されました。それでも、MELはPythonにいくつかの利点を提供します。

  • ビルトインコマンドエコーサーバーはMELを念頭に置いて作成されているため、MELの検出可能性は向上しています。
  • Mayaの多くのレガシーコードと内部作業はMEL形式です。これにより、文書化されていないMayaの内部動作に関する多くの洞察が得られます。

MELは、多くの場合、プログラミング機能の欠如とオブジェクト指向のために批判されています。ただし、実際には、MELはメタプログラミング言語として使用され、MELは問題を解決するためにMayaのノードアーキテクチャに指示するだけです。ノードは、より堅牢でわかりやすいプログラミング方法を使用してMayaの実際の計算コアを形成するため、非常に非効率的なアプローチになります。多くの点で、MELはMaya APIを補完し、割り当てられたタスク間の境界をいくらか明確にします。これにより、MELの学習と完全な理解が難しくなります。

用途

MELスクリプトを使用して設計されたツールは、一般に次のカテゴリに分類されます。

  • データ入出力
  • モーションキャプチャデータのインポート
  • 独自のゲームデータのエクスポート
  • 生産追跡用のシーンメタデータ
  • ジオメトリの作成/変更
  • カスタムプリミティブ
  • サードパーティレンダラー固有のデータタイプ(RenderManサブディビジョンサーフェスなど)
  • ベースパッケージに含まれていないモデリングツール
  • アニメーションツール
  • 筋肉シミュレーター
  • リギング/セットアップコントロール
  • 群集AIの動作
  • 照明/レンダリングツール
  • 一般的な複雑なシェーダー設定の自動作成
  • レンダリング前およびレンダリング後の効果
  • サードパーティのレンダラーを呼び出す
  • ダイナミクス
  • カスタムパーティクルの動作
  • シミュレートされたオブジェクトの緊急植毛と群れ
  • 遺伝的アルゴリズム
  • 布シミュレーション
  • ファイルとフォルダーのシーンのセットアップとメンテナンス
  • ユーザーインターフェイスのカスタマイズ
  • カスタムキャラクターコントロール
  • 無効なMayaコマンドの削除
  • カスタムUI

これは、パスを介して選択したオブジェクトをコピーするスクリプトの例です。

//アニメーションの複製/インスタンススクリプトproc animatedDuplication(int $ rangeStart、int $ rangeEnd、int $ numOfDuplicates、int $ duplicateOrInstance){int $ range_start = $ rangeStart; int $ range_end = $ rangeEnd; int $ num_of_duplicates = $ numOfDuplicates; int $ step_size =($ range_end-$ range_start)/ $ num_of_duplicates; int $ i = 0; int $ temp; currentTime $ range_start; //範囲の開始文字列に設定$ selectedObjects; //選択したオブジェクトを保存するには$ selectedObjects = `ls -sl`; //選択したオブジェクトを保存select $ selectedObjects; while($ i = $ num_of_duplicates){$ temp = $ range_start +($ step_size * $ i); currentTime($ temp); //複製するオブジェクトを選択するか、インスタンス$ selectObjectsを選択します; if($ duplicateOrInstance == 0){複製; } else {インスタンス; } $ i ++; }} //使用例://現在の選択範囲を5回複製-//フレーム1と240の間で均等に分散されるanimatedDuplication(1、240、5、0);

特徴

Mayaは、MELのスーパーセットである式言語も提供し、Mayaのディペンデンシーグラフの一部としてノードが実行されます。エクスプレッションはMayaのエクスプレッションエディタを使用して開発され、Mayaが時間の変化ごとにシーンファイルを評価している間にスクリプトをトリガーして、複雑な動作をシミュレートしたり、その他の便利なタスクを実行したりできます。