Mayaではexpression内でMEL文を利用することは奨励されていませんが、使うことは可能です。
少し複雑なモーション(特にパーティクルモーションの制御)をexpressionで作ろうとすれば、expression内でMELを使わないと結構厳しいです。
以下に私が思うexpression内でMELを使うときの注意や覚えておくべきことを記します。
1. 名前の変更はMELで書いた部分には反映されないため、MELを使う場合は名前の変更はできない。
2. expressionが評価されるタイミングはフレームが変わったときと、入力コネクションに変化があったとき。
3. MELでアトリビュートをセットしたとき、そのアトリビュートにexpression内で何か値を代入していると、代入された値が優先され正常に動作しないことがあるため、同アトリビュートに対してMELと式での代入の混在は避けるべき。
例えば、以下のようなexpressionを記述するのは危険。
particleShape1.radiusPP = 0;
particle -e -at radiusPP -id 0 -fv 2.0 particleShape1;
4. expressionは生成された順番に評価されるため、expression同士が干渉している場合は注意。コネクションが繋がっていれば後のexpressionで変化があれば前のexpressionにも反映されるが、MELを使っている場合は反映されないため、expressionの生成順序で結果が異なる。
5. expressionにコネクションが作られたPP(Per Particle)アトリビュートは配列の0番目からパーティクル数番目まで順番に評価される。MELではparticleコマンドやgetParticleAttrコマンドなどで配列の好きな要素に自由にアクセスできるため、MELを混在する場合、評価される順番を考慮する必要がある。
6. expression内でMELを使って生成した新しいexpressionは次のフレームから評価される。
他にも留意すべき点はあるかもしれませんが、私が思いつくのはこのくらいです。
しかし、あまり複雑であれば、expressionノードに頼らず、APIで作る方がよっぽど賢いと思います。
私は何百個のexpressionでモーションを制御しようとしたことがありますが、シーンを保存するとexpressionの中身が書き代えられてしまうというMayaのバグに対策を立てることができずに、結局APIでカスタムノードを作り、expressionの中身の式をそっくりそのままカスタムノード内で計算させ対応しました。
実際、expressionで制御するのとカスタムノードで制御するとでは処理速度もかなり違いますし、うまく作ればバグも出ないので、ある程度複雑になったらAPIで作る方がコストはかからなくて済むので良いと思います。