エクスプレッション エディタ(Expression Editor)にエクスプレッションを入力した後、作成(Create)ボタンまたは編集(Edit)ボタンをクリックすると、エクスプレッションがコンパイルされます。エクスプレッションをコンパイルすると、構文(ステートメント)エラーがチェックされ、アニメーションの巻き戻しや再生を実行できる形式に変換されます。その後、コンパイルされたエクスプレッションが現在のフレームの値に基づいて実行されます。
エクスプレッションは、アニメーション時間またはフレーム番号が変わるたびに実行されます。たとえば、アニメーションを巻き戻しまたは再生する場合、エクスプレッションが実行されます。エクスプレッションはアニメーション時間またはフレーム番号が変わるたびに 1 回ずつ実行されます。
また、Maya によりエクスプレッション内のアトリビュートが使用された場合にも実行されます。たとえば、球の移動 X (Translate X)アトリビュートを別のアトリビュートに代入するエクスプレッションが存在する場合に、その球を X 軸(X-axis)方向に沿って動かすと、球の動きに伴ってエクスプレッションが実行されます。これは球のアトリビュートを直接参照した場合のみに有効です。
パーティクル シェイプ ノード以外のオブジェクトを選択すると、エクスプレッション エディタ(Expression Editor)の評価(Evaluation)プルダウン メニューを使用して、エクスプレッションをいつ実行するか設定することができます(パーティクル シェイプ ノードを選択した場合は、エクスプレッション エディタ(Expression Editor)によりこのメニューはグレー表示になります。パーティクルのシェイプ ノードのエクスプレッションの詳細については、「パーティクル エクスプレッションの概要」を参照してください)。
エクスプレッションを記述する際、オブジェクトのアトリビュートは直接、または MEL を使用してアクセスできます。
直接:
pCube1.tx = pCube2.ty * 3.0
MEL:
setAttr pCube1.tx (`getAttr pCube2.ty`* 3.0)
オブジェクトのアトリビュートに直接アクセスすると、Maya はこれらのアトリビュートのノード間の関連付けを行います。つまり、Maya で指示されたグラフ評価プロセスにより、pCube2.ty の値の変化が自動的に認識され、評価(Evaluation)オプションが常時(Always)に設定されているかどうかに関係なく、pCube1.tx はダーティ(再計算が必要)とマークされます。
オブジェクトのアトリビュートに MEL スクリプトを介してアクセスすると、Maya はノードの該当アトリビュートの接続の関連付けを行わないため、直接グラフの評価プロセスは無視されます。pCube1.tx の値を常に最新にするには、評価(Evaluation)オプションを常時(Always)に設定し、必要に応じて評価がトリガされるようにする必要があります。
場合によっては、評価(Evaluation)をオンデマンド(On demand)に設定して冗長なエクスプレッション実行を減少させて Maya の操作を速めます。このオプションを利用するには、エクスプレッション実行の詳細を良く理解している必要があります。
評価(Evaluation)がオン デマンド(On demand)に設定されていると、エクスプレッションは、エクスプレッションのインプット接続が変更(上の例では、pCube2.ty が変更)、またはエクスプレッション エディタ(Expression Editor)の編集(Edit)がクリックされた場合にのみ計算を実行します。評価(Evaluation)が常時(Always)に設定されると、シーンに何の変化がない場合でもフレームを変更するたび評価がトリガされます。
評価(Evaluation)を常時(Always)に設定した場合だけ、時間変更にともなうエクスプレッションが評価されます。したがって、インタラクティブ再生(Interactive Playback)中でない限り、シーン ビューでオブジェクトを操作するときに MEL エクスプレッションと常時(Always)に設定した評価(Evaluation)を含むソリューションを使用しても評価は行われません。