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

2009年5月19日火曜日

メモ: listRelativesコマンド

(Mayaオンラインヘルプ:listRelativesコマンド)
LearningMaya p55

現在選択しているオブジェクトのShapeノード名を取得するのに便利。

オブジェクトを選択すると通常トランスフォームノードが選択されている。
この状態で、listRelatives -s を実行するとそのShapeノード名が表示される。
ls -slコマンドと組み合わせ、選択されたオブジェクトのShapeノード名を取得するのに役に立つだろう。


オンライン・ヘルプでは以下のように説明されている。

DAG オブジェクトの親と子がリストされます。オンラインヘルプ


ここで少し、「DAG」について補足しておく必要がある。
DAGとは、Directed Acyclic Graph 非循環有向グラフの略OpenMaya入門

トランスフォームとシェイプ:
トランスフォームとシェイプは、DAG ノードから派生する 2 種類のノードです。
トランスフォーム ノードは変換(移動、回転、スケール)を処理する DAG ノードのタイプであり、シェイプ ノードはジオメトリを処理する DAG ノードのタイプです。
シェイプノードは変換情報を維持せず、ジオメトリがトランスフォーム ノードの下になることはありません。したがってすべてのジオメトリには、自分自身の上に 2 つの DAG ノードが必要です。
つまり、すぐ上にシェイプ ノード、シェイプ ノードの上にトランスフォーム ノードが必要です。
(Mayaオンラインヘルプ:トランスフォームとシェイプ


ようするにDAGオブジェクトと言う場合、シェイプノード、トランスフォームノードは個別にオブジェクトとして扱われる。すべてのノードが「DAGオブジェクト」と呼ばれると考えてもいいのかもしれない。

そしてかならず
トランスフォームノード
    シェイプノード
の階層になっている。

なのでひとつのジオメトリをビューで選択し、その子供をリストすればShapeノード名が表示されることになる。


通常のジオメトリがペアレント化されている場合にはどう働くのか?
以下のような親子関係を作ってみた。
各行頭のスペースはその階層レベルを示している。行頭スペースが多いほど深い階層になる。
group1
nurbsCone1
nurbsSphere1
nurbsCylinder
nurbsPlane

この階層関係をShapeノードを含めて書きなおすと以下のようになる。
group1
nurbsCone1
nurbsConeShape1
nurbsSphere1
nurbsSphereShape1
nurbsCylinder1
nurbsCylinderShape1
nurbsPlane1
nurbsPlaneShape1

以下のフラグの検証では一部の例外を除き、すべて「nurbsCone1」を選択した状態で実行した。
(フラグの解説はオンラインヘルプより)

--------------------
-children(-c):DAG(Directed Acyclic Graph)ノードのすべての子がリストされる(デフォルト)。
// 結果: nurbsConeShape1 nurbsSphere1 //

選択されたTransformノードの下の階層には、そのShapeノードと子レベルのTransformノードがある。 そしてShapeノードが先に表示される。


--------------------
-allDescendents(-ad):選択されたノードの全ての子からその下の階層(孫、ひ孫・・・の名前
// 結果: nurbsConeShape1 nurbsSphereShape1 nurbsCylinderShape1 nurbsPlaneShape1 nurbsPlane1 nurbsCylinder1 nurbsSphere1 //

まず、Shapeノードがリストされ、その後にtransformノードがリストされる。
まず、選択されたものから順に階層を下ってShapeノード名
次に、選択された階層の一番下にあるtransformノード名から階層を上がっていく順でリストされる。


--------------------
-shapes(-s):DAG ノードのすべての子(シェイプ ノード)がリストされます。
// 結果: nurbsConeShape1 //
選択されたノードの子のみ。


--------------------
-parent(-p):DAG ノードの親が返されます。
// 結果: group1 //

nurbsCylinder1を選択して実行した場合、// 結果: nurbsSphere1 // となる。
nurbsCylinderShape1を選択して実行した場合、// 結果: nurbsCylinder1 // となる。


--------------------
-allParents(-ap):DAG ノードのすべての親が返されます。
// 結果: group1 //

nurbsCylinder1を選択して実行した場合、// 結果: nurbsSphere1 // となる。
nurbsCylinderShape1を選択して実行した場合、// 結果: nurbsCylinder1 // となる。


--------------------
-path(-pa):別のコマンドに渡すことができる、適切なオブジェクト名が返されます。

同じ名前のノードがシーン内に存在しない場合はデフォルトである-cフラグと変わらない。

// 結果: nurbsConeShape1 nurbsSphere1 //

トップノードのgroup1をデュプリケートするとgroup2の中に「nurbsCone1」以下、全オブジェクトが同じ名前で二つ存在するようになる。
そこでこのフラグを実行すると以下のように表示される。
// 結果: group1|nurbsCone1|nurbsConeShape1 group1|nurbsCone1|nurbsSphere1 //

nurbsCylinder1を選択して実行した場合、// 結果: group1|nurbsCone1|nurbsSphere1 //
他のフラグと併用可能。


--------------------
-fullPath(-f):フル パス名が返されます。
// 結果: |group1|nurbsCone1|nurbsConeShape1 |group1|nurbsCone1|nurbsSphere1 //

常にフルパス名を必要とするときに使える。他のフラグと併用可能。


--------------------
-noIntermediate(-ni):中間オブジェクトは返されません。
現時点で用途不明。


--------------------
-type(-typ) string:指定したタイプに関連するものすべてがリストされます。

使用例:listRelatives -type transform
// 結果: nurbsSphere1 //

 

2 件のコメント:

  1. いつも興味深い内容で楽しく拝見させて頂いております^^
    自分も現在MELの勉強に奮闘中です!
    お互い頑張っていきましょう!

    返信削除
  2. こんにちは、まめさん。
    ありがとうございます。
    実はまめさんが、このブログの初コメントで、しばらく気がつきませんでした。w
    (メールはもらったことはあるのですが)
    おぼつかない内容で、恐縮ですが、楽しんでいただけて幸いです。
    これからもがんばりますので、なにか、意見、質問などあればお気軽にコメントしてください。

    お互い頑張りましょう。
     

    返信削除