日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2009年5月19日火曜日

メモ: listAttr

仕事をする上で重要なことが、必要な情報を手元にそろえておくか、無くてもすぐに取得できること。

スクリプティングにおいて、正確なアトリビュート名を得ることは多々必要となる。
しかし、コントロールしたい対象がわかっていても、正確なアトリビュート名がわからないことがある。
特に日本語表示では、アトリビュートエディターを見ても連想しにくい。


正確なアトリビュート名を得るのに時間をかけないためにもコンピュータの能力を使えたほうがいい。

「listAttr」コマンドを使えば、アトリビュート名を表示できるので、正確な名前を取得できる。
(オンラインヘルプ lisAttr


ただ、一つのオブジェクトに含まれるアトリビュートはかなりの量があるので、フィルタリングによって目的の物を絞り込む必要がある。

フラグは20種類あり、組み合わせることでより絞り込みが可能となる。


このコマンドの有効性をみるために、選択したオブジェクトに対してこのlistAttrを実行し、
アトリビュート名を改行付きでリストアップし、結果の総数を表示するスクリプトを作ってみた。

{
string $attName[] = `listAttr`;
$size = size($attName);

for($i=0; $i<$size; $i++){
print ($attName[$i] + "\n");
}
print ("total = " + $size );
}

これを「nurbsCone」に使ってみるとアトリビュートの総数は「185」もあった。
他にも色々と試してみた。
「nurbsSphere」...185
「nurbsCylinder」...185
「nurbsPlane」...185
「pTorus」...185
「pSPhere」...185
「subdivSphere」...185
「ffdLattice」...185
「emitter」...259
「GravityField」...225
「blinn」...159
「lambert」...133
「pointLight」...185
「volumeLight」...185
「camera」...185
「duckling」(ファーのプリセット「ひよこ」)...274
「Punk」(ファーのプリセット「パンク」)...274

結果が似ているのはどれも作成時に選択状態になっている「トランスフォーム」ノードであるから。
これをShapeノードにしてみると以下のようになるがやはり同じnurbsなら形状は違ってもアトリビュート数は同じになる。
「nurbsSphereShape」...233
「nurbsCylinderShape」...233
「pTorusShape」...282
「subdivSphereShape」...206
「ffd1LatticeShape」...133
「pointLightShape」...213


ノード:それぞれ特定の働きをするように設計されている。
    入力情報に基づき計算を行い、出力情報を持っている。

アトリビュート:そのノードの働きに関連する値が保管される場所。値には以下の種類がある。

1)値(入力値)...そのノードの計算で使用される。

2)他から入力される値(入力値)...コネクションの情報も保存される。
3)ノードでの計算結果(出力値)

こういった値がノードには、それぞれ150以上も存在していることがわかる。
これらすべてをスクリプティングで、使い切ることはまずないと思うので、listAttrコマンドをそのままフラグ無しに使うことは、あまり賢い使い方とは言えないことがわかる。


では、どのようなフラグを使えばよいのか?
LearningMaya(MEL fundamental)のp44には以下の7つが一般的に使われるフラグとして紹介されている。

-connectable(-c):コネクト可能アトリビュートのみ表示。
-keyable(-k):キーフレーム可能アトリビュートのみ表示。
-locked(-l):ロックされているアトリビュートのみリスト。
-unlocked(-u):ロックされていないアトリビュートのみリスト。
-shortNames(-sn):ショート ネームでリスト。デフォルトではロング ネーム。
-visible(-v):可視アトリビュート、つまり隠れていないアトリビュートのみ表示。
-userDefined(-ud):ユーザ定義(ダイナミック)アトリビュートがリストされます。


これらのフラグをそれぞれ「nurbsSphereShape」ノードに使ってみた。
listAttr ...233
-c ...228
-k ...5
-l ...0 アトリビュートをロックすればその数が表示される。例:「カーブ精度」をロック ...1
-u ...233 上記と逆にロックされていない数が表示される。例:「カーブ精度」をロック ...232
-sn ...例:covi.covip
-v ...221
-ud ...0

ちなみにnrbsSphereノード(transformノード)でも試してみた。
listAttr ...185
-v 181
-k 7 アトリビュートをキーフレーム不可に設定すれば、この総数は減少する。

不可解なのが、アトリビュートを「選択項目の非表示」に設定しても-visibleの数は変化しない。
「可視」の意味が違うようだ??



そのほかに使えそうなのは、


-string(-st):その他の基準に一致し、このフラグで渡される文字列に一致するアトリビュートのみリスト。
通常の文字検索に近いが、ワイルドカードは使えないし、大文字小文字の区別がある。
これでは、わかっているけど念のため確認したいときぐらいしか使えない。
例: listAttr -string scale; または、 listAttr -string scaleX;


他にもヘルプには以下のようなフラグがある。
説明部分に関してはオンラインヘルプを元にDigitalMatrixを参考にして改変。

-read(-r):読み込み可能なアトリビュートのみリスト。
-write(-w):書き込み可能なアトリビュートのみリスト。
-scalar(-s):スカラー数値をもつアトリビュートのみリスト。(一つの数値。ベクトルでないもの)
-array(-a):配列アトリビュートのみリスト。
-scalarAndArray(-sa):スカラー配列の値を持つアトリビュートのみリスト。
-channelBox(-cb):チャンネル ボックスに表示されるキー設定不可のアトリビュートだけを表示します。
-caching(-ca):内部的にキャッシュされているアトリビュートのみが表示されます。

-multi(-m):マルチアトリビュートとその子アトリビュートのみリスト。
-settable(-se):設定可能なアトリビュートがリストされます。
-readOnly(-ro):読み込み可能だが書き込み不可能なアトリビュートのみリスト。
-output(-o):数値のアトリビュートのみリスト。
-hasData(-hd):データを持つアトリビュートのみ(メッセージ アトリビュート以外のアトリビュート)。
-leaf(-lf):アトリビュートの名前のみ。controlPoints[44].xValue ならば、「xValue」とリストされます。
-changedSinceFileOpen(-cfo):アトリビュートの元のファイルが開いてから変更されたアトリビュートのみがリストされます。特に、リファレンス ファイルのオブジェクトやアトリビュートのみに便利です。
-ramp(-ra):ランプであるアトリビュートのみをリスト表示します



結論としては、使えそうなのは以下の6つ。
絞り込みの基準を決めるには知識が少なすぎるし、絞り込みしなくても以下のフラグを使えば結果の総数もそれほど多くないし、今のところ必要な物がほぼ見つかる。

-keyable(-k):
-locked(-l):
-userDefined(-ud):
-array(-a):
-readOnly(-ro):
-string(-st):

 

0 件のコメント:

コメントを投稿