2018年11月5日月曜日

mayaでシーン内の重複ノードを探し出す

 リグを組む時などはジョイントを名指しで特定したりするわけなのですが、何十本も骨があるようなのが何十体もあったりすると、たまにノード名が重複しているようなヒューマンエラーが出てきたりします。

 基本的に mayaは重複ノードができないようになっていますが、階層構造を複製すると容易に作成できてしまいます。
こんな感じに。


 腕とか脚とか片側を作って反転させたりしたであろうケースで良く見つかります。


 スクリプトを走らせると
// Error:  Line ~: More than one object matches name: ~

みたいに止まってしまい間違い探しが始まるのでした。
 ホント、たまになので厄介です。

 頻繁に出会っても困るのですが、対策しておくに越したことは無いのでチェックスクリプトを考えてみたいと思います。

 名前が重複しているのを探すということで、全ノード分の比較ループさせるとか思い浮かぶかと思いますが、今回はmaya独特の方法で探してみたいと思います。
 ほかのDCCで使えないので汎用性は無いですが、行数を少なくできるので簡単に作成できて良い感じだと思います。

主要コマンドは ls を使用。
{
    string $list[]=`ls`;
}
とすることで、シーン内の全ノードをリスト化できます。
この状態ですでに重複ノードの検索は終了しています。

 上図のシーンで、locator1を選択した状態で lsコマンドを -sl フラグを付けて実行すると

みたいにノード名に階層をあらわすパイプ記号が付いてきます。
 同じノード名は判別できるようパスが付属するのです。
 この特性を利用して、あとは gmatch で文字列に "|" を含んでいる物をリストアップしていきます。
 再帰処理とかソートとかしなくても簡単に調べられるので便利なのではないでしょうか。


こんなスクリプトになりました。

0 件のコメント:

コメントを投稿