エクスプレッションが実行される頻度

エクスプレッション エディタ(Expression Editor)にエクスプレッションを入力した後、作成(Create)ボタンまたは編集(Edit)ボタンをクリックすると、エクスプレッションがコンパイルされます。エクスプレッションをコンパイルすると、構文(ステートメント)エラーがチェックされ、アニメーションの巻き戻しや再生を実行できる形式に変換されます。その後、コンパイルされたエクスプレッションが現在のフレームの値に基づいて実行されます。

既定では、エクスプレッションは現在のアニメーション時間またはフレームが変更された場合も実行されます。たとえば、アニメーションを巻き戻しまたは再生する場合、エクスプレッションが実行されます。エクスプレッションはアニメーション時間またはフレーム番号が変わるたびに 1 回ずつ実行されます。 この既定の評価を停止するには、エクスプレッション エディタでエクスプレッション ノード の評価モードをオンデマンド(On Demand)に設定します。

エクスプレッションで直接参照されるアトリビュートの値が変更された場合も、エクスプレッションは実行されます。たとえば、球体の 移動 X(Translate X) アトリビュートを別のアトリビュートに代入するエクスプレッションが存在する場合に、その球体を X 軸方向に沿って動かすと、球体の動きに伴ってエクスプレッションが実行されます。

pCube1.tx = pSphere1.tx * 3.0

評価

パーティクル シェイプ ノード以外のオブジェクトを選択すると、エクスプレッション エディタ(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 スクリプトを使用してオブジェクトのアトリビュートにアクセスすることはお勧めしません。MEL スクリプトを使用すると、適切に機能するために必要な評価グラフのノード間の接続が曖昧になるため、難易度が上がります。たとえば、キャッシュ ファイルのサイズや現在時刻などのステータス関連のエクスプレッションは自動的に評価されません。これらのイベントはアニメーションで制御されないため、ユーザが「アニメート(animated)」アトリビュートを切り替えない限り評価されません。(MEL スクリプトを使用する方法が有効なことがあります。1 つまたは複数の入力アトリビュートがアニメートされているため、エクスプレッションが評価グラフに含まれている場合があるからです。)ただし、一貫性のある結果を得るには、MEL スクリプトを使用しないで、ここに示された直接方式を使用することをお勧めします。

評価(Evaluation)オン デマンド(On demand)に設定されていると、エクスプレッションは、エクスプレッションの入力接続が変更された場合(上の例では、pCube2.ty が変更された場合)、またはエクスプレッション エディタ(Expression Editor)編集(Edit)がクリックされた場合にのみ計算を実行します。評価(Evaluation)常時(Always)に設定されると、シーンに何の変化がない場合でもフレームを変更するたび評価がトリガされます。

注:

評価(Evaluation)常時(Always)に設定した場合だけ、時間変更に伴ってエクスプレッションが強制的に評価されます。したがって、インタラクティブ再生(Interactive Playback)中でない限り、シーン ビューでオブジェクトを操作するときに MEL エクスプレッションと常時(Always)に設定した評価(Evaluation)を含むソリューションを使用しても評価は行われません。