アトリビュート

アトリビュートとは

MAYAに存在するほとんどのオブジェクト(ノード)にはアトリビュートがついている。
このアトリビュートの値を設定・変更することによってモデリング・アニメーション・レンダリングなどを実行できる。
つまり、Maya上で行なわれる多くの操作はアトリビュートに関する操作である。

各アトリビュートには長い名前と短い名前がついている。
どちらでアクセスしても良い。
例えば、球(nurbsSphere)などのトランスフォーム・ノードのX方向の移動値には以下の2つのどちらでもアクセスすることができる。

Mayaの内部構造

MAYAにおいてモデリング・アニメーションなどの操作をGUI・MELなどを使って行なうと以下の操作の全部、または一部が実行される。

この3つがMAYAにおいてモデリング、アニメーションを行なう時に行なわれていることの、すべてと言って良い。
GUIやほとんどのMELのコマンドなどは、これらの操作を効率良く便利に行なうために存在している。

アトリビュートを扱うためのコマンド

アトリビュートをあつかうためのコマンドには以下のようなものがある。

getAttr オブジェクト名.アトリビュート名
アトリビュートの値を得る
setAttr オブジェクト名.アトリビュート名 アトリビュートの値
アトリビュートの設定
listAttr オブジェクト名
アトリビュートのリスト表示
connectAttr オブジェクト名1.アトリビュート名1 オブジェクト名2.アトリビュート名2
アトリビュートの接続
アトリビュート1をアトリビュート2に接続する。
disconnectAttr オブジェクト名1.アトリビュート名1 オブジェクト名2.アトリビュート名2
アトリビュートの接続を切り離す
aliasAttr アトリビュート別名 オブジェクト名.アトリビュート名
アトリビュートに別名をつける
aliasAttr -remove オブジェクト名.アトリビュート別名
アトリビュートの別名を取り消す
または
aliasAttr -remove オブジェクト名.アトリビュート名
addAttr -longName 長いアトリビュート名 -shortName 短いアトリビュート名 -min 最小値 -max 最大値 オブジェクト名
アトリビュートを追加する。
deleteAttr オブジェクト名.アトリビュート名
アトリビュートを削除する。

アトリビュートの例

球を螺旋上に並べるMELスクリプト。

  1. 以下のMELスクリプトをspiralObjects1.melという名前で作る。
    global proc spiralObjects1(float $rad, int $num)
    {
    	int $i;
    	float $r = 0.0;
    	float $y = 0.0;
    	string $name[];
    
    	for($i = 0; $i < $num; $i++)
    	{
    		$name = `sphere`;
    		setAttr ($name[0] + ".tx") $rad;
    		rotate -ws -p 0 0 0  0 $r 0;
    		setAttr ($name[0] + ".ty") $y;
    		$r += 30.0;
    		$y += 0.5;
    	}
    }
    
  2. Script Editorの FileSource Script によってspiralObjects1.melを読み込む。
  3. コマンドラインからspiralObjects1(5, 30)と打ち込んで実行する。
  4. 半径5の螺旋状に球が30個並ぶ。
    spiralObjects1(5, 30)の実行結果

スクリプトの解説

global proc spiralObjects1(float $rad, int $num)
引数として$rad(円の半径の値)と$num(球の個数)をとるプロシージャー。
int $i;
for文のカウンタとして使うための変数。
float $r = 0.0;
球の回転角度を入れておく変数の宣言。
float $y = 0.0;
球の高さ(translateY)を入れておく変数の宣言。
string $name[];
球の名前を入れておくためのstring(文字列)の配列。
for($i = 0; $i < $num; $i++)
$numforループを実行する。
以下はforループ内の処理の解説。
$name = `sphere`;
NURBSの球を作成し、その球の名前を配列$nameに代入する。
球の名前を$nameに代入するためにアサインを使用している。
この時、配列$nameには以下のように代入される。
  • $names[0]にはトランスフォームノード(nurbsSphere1など)
  • $names[1]には球を作るノード(makeNurbsSphere1など)
setAttr ($name[0] + ".tx") $rad;
$name[0](球のトランスフォームノード)のアトリビュート(tx)に$radをセットする。
(move $rad 0 0と同じ)
rotate -ws -p 0 0 0 0 $r 0;
移動された球をワールドスペース内で(0, 0, 0)を中心として Y軸周りに$rだけ回転。
各フラグの意味は以下の通り。
-ws
ワールドスペースで回転させる。
-p 0 0 0
回転の中心は(0, 0, 0)
0 $r 0
X軸周りに0度、Y軸周りに$r度、Z軸周りに0度回転させる。
setAttr ($name[0] + ".ty") $y;
$name[0](球のトランスフォームノード)のアトリビュート(ty)に$yをセットする。
(move -r 0 $y 0と同じ)
$r += 30.0;
球の回転角度に30.0を加える。
$y += 0.5;
球のtranslateYの値に0.5を加える。

練習

まとめ

参考


Prev | Next
Home | Contents
abe@injapan.net