エクスプレッションと MEL 構文の違いは、オブジェクト アトリビュートへの直接アクセス、および時間変数と frame 変数の使用という、2点だけです。
エクスプレッションではオブジェクト アトリビュートに直接アクセスできますが、MEL では getAttr コマンド、setAttr コマンド、getParticleAttr コマンド、または setParticleAttr コマンドを使用する必要があります。
以下は、オブジェクト アトリビュートに直接アクセスする、エクスプレッション構文の例です。
persp.translateX = 23.2; float $perspRotX = persp.rotateX;
同じことを MEL で実行するには、setAttr コマンドと getAttr コマンドを以下の例のように使用する必要があります。
setAttr("persp.translateY", 23.2); float $perspRotY = getAttr("persp.rotateY");
一対のパーティクルを作成するには、スクリプト エディタ(Script Editor)で次のコマンドを実行します。
particle -position 1 2 3 -position 2 1 3 -name dust;
ここで以下のエクスプレッション構文をパーティクル シェイプに使用できます。
vector $pos = position; acceleration = <<2, 1, 0>>;
同じことを MEL で実行するには、setParticleAttr コマンドと getParticleAttr コマンドを以下の例のように使用する必要があります。
select dustShape.pt[0]; float $temp[] = getParticleAttr("-attribute", "position", "dustShape.pt[0]"); vector $position = <<$temp[0], $temp[1], $temp[2]>>; setParticleAttr("-attribute", "velocity", "-vectorValue", -3, 0, 0, "dustShape.pt[0]");
上の MEL コマンドは、particleShape の最初のパーティクルのみに対して実行されます。
エクスプレッションでは、時間とフレームの定義済み変数を使用することができます。例:
persp.translateY = frame; persp.rotateY = time;
MEL では時間とフレームを使用することができません。MEL で時間とフレームの情報にアクセスするには、以下を実行する必要があります。
float $frame = `currentTime -q`; string $timeFormat = `currentUnit -query -time`; currentUnit -time sec; float $time = `currentTime -q`; currentUnit -time $timeFormat;
エクスプレッションでは複数行のコメント(/* */)は使用できませんが、// のコメントは使用できます。