エクスプレッションと 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]");
エクスプレッションでは、時間とフレームの定義済み変数を使用することができます。例:
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;