Maya が生成する ASCII ファイルは、以下の 8 つのセクションで構成されます。
各セクションについて次に説明します。 ファイルを正しく読み込むためには、各セクションを上記の順序どおりに記述する必要があります。
Maya ASCII ファイルのヘッダーには、ファイルの名前や作成日時などを示すコメントを記述します。 一般的なコメントと同様に、Maya ファイルを読み取るコードではヘッダーのコメントは無視されます。 ただし、1 つだけ異なる点があります。ヘッダーのはじめの 6 文字は、必ず「//Maya」でなければなりません。
Maya ASCII ファイルの一般的なヘッダーは次のようになります。
//Maya ASCII 1.0 scene
//Name: solstice.ma
//Last modified: Sun, Dec 21, 97 10:18:26 AM
ファイルの次のセクションは、プロシージャ以外のすべてのリファレンス ファイルを指定します。 つまり、このセクションで参照されるプロシージャ以外の、すべての Maya ファイルを指定します。 現在のファイル内で参照する個々のファイルごとに、そのファイルを読み込むための 1 つの file コマンドを記述します。リファレンス ファイル内のすべてのオブジェクトは現在のファイル内で利用できるようになりますが、それらのオブジェクト名の前には接頭辞(通常はファイル名)が付きます。 ほかのファイルを参照するときの file コマンドのステートメントは次のとおりです。
file -r -rpr prefixString fileName;
file -r -ns nameSpace fileName
-rオプションは(引数で指定される)ファイルが参照されることを示し、 -rpr オプションはリファレンス ファイル内の全オブジェクトに付加される接頭辞の文字列を指定します。file コマンドの詳細については、 『MEL コマンド リファレンス』を参照してください。
file -r -rpr "solar" "/u/sally/work/solar.ma";
たとえば、ファイル「solar」に「sun」というオブジェクトが含まれている場合は、「solar_sun」という名前でそのオブジェクトを利用できます。
次のセクションは、必要条件を指定します。 指定するには、一連の requires コマンドを作成します。ファイルのこのセクションは、そのファイルを正しく読み込むのに必要な Maya ソフトウエアを指定します。 すなわち、Maya のバージョン、プラグインなどです。
requires productName version
requires maya "2.0";
requires specialPlugIn "1.2";
(requires コマンドの詳細については、オンライン マニュアル『MEL コマンド リファレンス』を参照してください。)
ファイルのこのセクションは、このファイルで使用されている単位を示す 1 つの currentUnit コマンドで構成されます。この指定によって、ファイル内の数値がどのように解釈されるかが決まります。
currentUnit -l cm -a deg -t ntsc;
この例では、長さの単位をセンチメートルに設定し(他の選択肢はミリメートル、メートル、キロメートル、インチ、フィート、ヤード、マイル)、角度の単位を度に設定し(他の選択肢はラジアン)、時間の単位を NTSC に設定しています。 (currentUnit コマンドとそのオプションの詳細については、オンライン マニュアル『MELコマンド リファレンス』を参照してください。)
次のセクションは、ファイルに関する情報を提供する複数の行から成ります。 これらのうち最初の 5 行は、Maya によって次のように定義されています: アプリケーション名(Maya)、製品(Complete または Unlimited など)、バージョン、確認者(日付と時間)および OS とそのバージョン。ご使用のファイルに固有の fileInfo コマンドをファイルに追加すると、追加されたコマンドもこのセクションに表示されます。
fileInfo "application" "./maya.bin";
fileInfo "product" "Maya Unlimited 4.5";
fileInfo "version" "4.5";
fileInfo "cutIdentifier" "200111121041";
fileInfo "osv" "IRIX 6.5 04151556 IP32";
ファイルを保存するたびに、Maya はこれら 5 つの定義済み fileInfo ステートメントの現在の値を保存します。 ファイルをロードするときに見つかった、あるいは Maya のセッション中に発行された他の fileInfo ステートメント(あるいは同等のバイナリ)は、セッション中は保持され、ファイルの保存と同時に書き戻されます。
この部分に createNode コマンドで新しいノードを作成し、setAttr コマンドを使用して新しいノードのアトリビュートを設定します。
リファレンス ファイル内のノード(またはグローバルに定義されたノード)を選択するには select コマンドを使用し、それらのノードのアトリビュートを設定するには setAttr コマンドを使用します。
addAttr コマンドを使用すると、新しい「ダイナミック」アトリビュートをノードに追加することができます。
ノード間のペアレント化を設定するには、parent コマンドを使用します。
(これらのコマンドの詳細については、オンライン『MEL コマンド リファレンス』を参照してください。)
createNode nodeType -n nodeName;
このノードがペアレント化できるノード(すなわち、ジオメトリまたはジオメトリのグループを表す)であれば、すでに作成された親ノードがあります。ペアレント化はコマンドで指定することもできます。
createNode nodeType -n nodeName -p parentNodeName;
デフォルトのカメラなど一部のノードは、すべての Maya シーンで共通に使用されます。 そのようなノードを作成するときは、-s オプションを指定してください。このオプションを指定すると、同じ名前と親を持つノードが既に存在する場合には、新しいノードは作成されません。 このような状況は、他のファイルを参照しているときによく発生します。
新しいノードが作成されると、そのノードが自動的に選択されます。 通常、createNode コマンドを実行した後は、setAttr コマンドを何回か実行して新しいノードのアトリビュートを設定します。ノードが既に選択されているため、setAttr コマンドではアトリビュートの名前と値を指定するだけです(ノード名は不要です)。
setAttr attributeName value;
setAttr attributeName -type typeName value;
すべてのアトリビュートにはデフォルト値があるため、デフォルト以外の値を使用する場合、setAttr コマンドを実行してください。(またはリファレンス ファイル内のアトリビュート値を変更する場合)球体のノードを作成してアトリビュートを設定する例を下記に示します。
createNode transform -n "sphere";
setAttr ".s" -type "double3" 2.44 2.44 2.44;
setAttr ".t" -type "double3" -6.96 0 6.9;
createNode nurbsSurface -n "sphereShape" -p "sphere";
setAttr ".tw" yes;
setAttr ".rtw" yes;
setAttr ".ipo" no;
リファレンス ファイル内で作成されたノードのアトリビュートを設定するときも、上記と同様の手順を実行します。 ただし、リファレンス ファイル内のノードは既に読み込まれている(作成済みである)ため、createNode コマンドの代わりに select コマンドを使用します。たとえば、「lunar」というファイルがオブジェクト「sun」を含む「solar」というファイルを参照しているとします。 「lunar」というファイルでは、このオブジェクトのスケールが 3 に変ります。 これは、「lunar」という Maya ASCII ファイルではこのように見えるということです。
select -ne solar_sun;
setAttr ".s" -type "double3" 3.0 3.0 3.0;
addAttr コマンドを使用すると、新しいダイナミック アトリビュートをノードに追加できます。 addAttr コマンドのステートメントは、setAttr コマンドと似ています。たとえば、新しい球体のノードを作成した後、-1~+1 の値を取る「squish」という浮動小数点型アトリビュートを球体に追加し、そのアトリビュート値を 0.3 に設定するとします。この場合は、次のようなコードを記述します。
createNode transform -n "sphere";
addAttr -ci true -sn "squish" -ln "squish"
-min -1 -max 1 -at "double";
setAttr -k on ".squish";
setAttr ".squish" 0.3;
// etc...
createNode コマンドの -p オプションでは、ノード間の階層構造を簡単に設定できない場合があります。 たとえば、リファレンス ファイル内の他のノードとの階層構造を設定するような場合です。 そのような場合は、次の parent コマンドを使用して階層構造を設定します。
parent childNodeName parentNodeName;
parent コマンドを使用して、ノードをインスタンス化することもできます(すなわち、2 つのノードの間で子ノードを共有させたい場合)。 その場合は、次のように -add オプションを使用します。
parent -add childNodeName parentNodeName;
特殊なケースとして、最上位レベルのオブジェクト(world とも呼ばれます)をインスタンス化する場合は、-w オプションと一緒に -add オプションを使用します。
parent -w -add childNodeName;
スクリプト ノードは MEL コードを、シーン ファイルの一部として保持します。スクリプト ノードはまた、ファイルからロードされた後、ファイルを閉じる前、ノードが削除される直前などに実行されるようセットアップされます。 「before」スクリプトはファイルがロードされたときに実行されます。 「after」スクリプトは、ファイルが閉じられたとき、またはノードが削除されたときに実行されます。 シーンがいくつかのスクリプト ノードを含んでいる場合、保証されている実行順序はありません。つまり、スクリプトは特定の実行順序に依存してはなりません。 スクリプト ノードを作成する方法の詳細については、『MEL コマンド リファレンス』の スクリプト ノード の項、および『ノード(Nodes)』のスクリプト ノードの項を参照してください。
MEL を使用すると、Maya 内のファイルのほぼすべての機能を実行できるため、スクリプト ノードの可能性は無限です。 とくに、スクリプト ノードはシーンのクリーンアップや UI のカスタマイズなどに便利です。
リファレンス ファイルを含むファイルでは、このセクションで、次のようなステートメントの disconnectAttr コマンドを使用して、リファレンス ファイル内のノードとのアトリビュート接続を解除します。 これは、次のようなステートメントの 1 つ以上の disconnectAttr コマンドを使って実行します。
disconnectAttr sourceAttributeName destinationAttributeName;
disconnectAttr "sphere.tx" "cone.ry";
disconnectAttr コマンドの詳細については、オンライン マニュアル『MELコマンドリファレンス』を参照してください。
Maya ASCII ファイルの次のセクションは、作成および参照されたすべてのノード間のアトリビュート接続を確立します。 これは、connectAttr コマンドを使用して実行されます。(connectAttr コマンドの詳細については、オンライン マニュアル『MEL コマンド リファレンス』を参照してください。)
connectAttr sourceAttributeName destinationAttributeName;
connectAttr "sphere.tx" "cone.ry";
connectAttr "sphere.squish" "sphere.sz";
Maya ASCII ファイルでは上記で説明したステートメント(MEL コマンド)だけがサポートされます。
独自の MEL コードを Maya ASCII ファイルに直接追加する場合は、次の点に留意してください。
Maya ASCII ファイルに直接追加した MEL コマンドのテキストは、追加したコマンドを実行して作成された構成要素の記述(ノード、アトリビュート、接続などの記述)で置き換えられます。 コマンドのテキストをそのまま保持したい場合は、拡張子 .MEL のスク リプト ファイルにコマンドを記述し、ファイル(File)メニューのリファレンスの作成... (Create Reference...)または file -r コマンドでそのファイルを参照してください。
すべてのコマンドが正しく実行されるという保証はありません。 たとえば、パフォーマンス上の理由から、Maya ASCII ファイルまたはバイナリ ファイルの読み込み中は、すべての undo 操作が一時停止されます。コマンドの中には内部的に undo 機能に基づいて処理を行っているものがあります。そのようなコマンドは、(外部の).MEL ファイルの内部からしか実行できません。.MEL ファイルの読み込み中は undo 操作が中断されません。