2021年2月18日木曜日

addAttrコマンドの便利なフラグ

  「カプセル型のコントローラを作成してみる」で作ったようなリグの場合、複数の制御用コントローラがあるわけなのですが、アニメーションさせるとなると、関連したコントローラ全部にキーフレームを設定するときなどでかなり面倒に思うはずです。

  キーフレームの設定を忘れるノードも出そうなので、できれば1つのノードで集中管理したい。

  そんなことを実現してくれる機能が addAttrコマンドに存在します。

  最終的には、こんな感じのノードグラフになります。


  まず、ロケータを2つ作成します。

    "locator2.translate"用のカスタムアトリビュートを"locator1"へ作成して、"locator1"で集中管理する感じにします。

  とりあえずスクリプト。

{
    string $lct1 ="|locator1";
    string $lct2 ="|locator2";
    
    addAttr -ln "lct2_" -at "double3" -pxy ($lct2+".t") $lct1;
    
}

  カスタムアトリビュートを作成する場合、ショートでもロングでも同じ名前のアトリビュートが存在していないことが必須です。実行するときエラーが出てくれるので、その時に悩めばよい感じ。

  上のスクリプトでは"double3"を一気に接続しているので、アトリビュート名の末尾に"_"を付けておくとアトリビュート名が綺麗に出てくれます。 末尾の"_"の有無でこう変わります。


  差異が分かりにくいですが、"_"を付けると「Translate」にキャピタライズされ、付けないと「translate」のままになっています。

  上のように"double3"を一気に接続するとアトリビュート名に自由度が無くなるので、5行目を分割して下のように接続するのもアリです。

{
    string $lct1 ="|locator1";
    string $lct2 ="|locator2";
    
    addAttr -ln "lct2_tr_x" -at "double3" -pxy ($lct2+".tx") $lct1;
    addAttr -ln "lct2_tr_y" -at "double3" -pxy ($lct2+".ty") $lct1;
    addAttr -ln "lct2_tr_z" -at "double3" -pxy ($lct2+".tz") $lct1;
    
}


  ここからはスクリプトで作ったカスタムアトリビュートの特徴を説明します。
  この記事で重要なフラグは -proxy(-pxy) です。

  コマンドヘルプでは、

-proxy(-pxy) string createquery
別のノードのアトリビュートをプロキシ化します。 プロキシ化されたプラグがソースとして接続されます。この場合は、UsedAsProxy フラグが自動的に設定されます。

  とあります。
  -usedAsProxy(-uap) も関連するフラグですが、-pxy が自動で有効にしてくれるため特に気にする必要はなさそうですね。

  実際の効果を確認してみます。
  ※見易くするため、"locator1"の rotate, scale, visibility を隠してあります。

  "locator1"を選択し、[s]キー(Set Key)でキーフレームを設定します。

  "locator2"を確認すると

  キーフレームが設定されています。
  こんどは"locator2"を移動します。

  "locator1"を確認すると値が変更されています。

  addAttr -pxy のおかげで、相互に確認とキーフレーム設定ができるようになりました。

  グラフエディタでも"locator1"と一緒に"locator2"のアニメカーブも表示・編集が出来るようになっています。

  ただし、いま現在(maya2020)コマンドからしか実行することが出来ないので要注意です。

  最初の画像に戻って、ノードエディタでコネクションを見て再現しようと、ふつうにカスタムアトリビュートを追加して connectAttr しただけでは普通の接続になってしまいます。

  最後に、作ったカスタムアトリビュートの削除方法を。
  ノードを選択した状態で、メインメニューから、Modyfy -> Delete Attribute... を実行します。

  ツールが立ち上がるので、消したいアトリビュートを選択して、[Delete]をクリックします。



0 件のコメント:

コメントを投稿