Maya2017.3以降のUVエディタでツールを再現

戦国時代の最も怖い奥さんを持った武将というと立花宗重。ちなみに奥さんの立花誾千代は虎殺しで有名な加藤清正に立塞がったことで有名です。
どうも、クリーク・アンド・リバー社 COYOTE CG STUDIO テクニカルチーム 戦国大好き人間の中林です。

今回はMaya2017.3からUVエディタのメニューが大幅に変わって困った部分を解決したときの話です。

そもそものキッカケは?

Maya2016以前のサポートが終わって、COYOTEスタジオ内で多くのプロジェクトがMaya2018に切り替わりました。
そこでUVエディタのツールアイコンが大幅に消えて、カスタムシェルフに好きなツールを登録できるようになりました。


最初は好きなツールだけを登録するので良い機能かと思ったのですが、大きな問題を抱えていました。
今では僕の感想は使えそうで使えない、でもチョッピリ使える機能となってます。

問題点1:「選択したエッジまたはUV結合」はどこに消えた

英語版だと「Sew the selected edges or UVs together」になりますがこの機能がMaya2018のメニューから見つからないです。僕も他のアーティスト数人が探したので見落としがないと思います。


1つがないということは他にも見つからない可能性があります。ならば今後のために対応を考えることにしました。
Maya2016.5を立ち上げて過去ブログ「Mel スクリプトエディタに表示されないコマンドを知る方法:中級編)」を参考にして、すぐにツールバーのファイルは見つかりました。
C:/Program Files/Autodesk/Maya2016.5/scripts/others/textureWindowCreateToolBar.mel
このファイルをMaya2020まで調べたけどこのスクリプトファイルは直接使われてないだけで残っていました。

解決編1:ツールが無ければ復活させれば良いじゃない

これは僕がツールを探すときによく使う手だけど「.png」検索をしてアイコンを探します。
幸いスクリプトファイルを検索したらすぐに"sewUV.png"という、それっぽい名前の画像名を見つけました。この後の確認方法は幾つもありますが……


僕はシェルフエディタのファクトリ アイコン ブラウザからよく確認をします。実際にアイコンをファイル名から確認すると探しているツールと同じアイコンでした。まず、melコマンドとしては間違いないです。
では、その中身をみるとこんな感じです。

    iconTextButton
        -image1 "sewUV.png"
        // merge UVs if not edges
        -command ("string $edges[] = `filterExpand -ex false -selectionMask 32`;" +
            "string $uvs[] = `filterExpand -ex false -selectionMask 35`;" +
            "if (size($edges) > 0) polyMapSew;" +
            "if (size($uvs) > 0) performPolyMergeUV 0;")
        -commandRepeatable true -label (uiRes("m_textureWindowCreateToolBar.kSewSelectedUVsTogetherLbl"))
        -annotation (uiRes("m_textureWindowCreateToolBar.kSewSelectedUVsTogetherAnnot"))
        sewButton;

無駄話になりますが、他の-commandの内容と見ると分かるのだけど基本的に別のプロシージャに処理を飛ばしてます。しかし、このツールだけが例外的に内部で完結してます。
多分、Maya2018にこのツールが移植されなかったのはこの辺の処理の統一化が面倒だったので消えたと推測します。


それでも、内容が分かればシェルフのコマンドに登録するだけです。上図で4行から2行に変わっているけど、これは余計な変数を削っただけで処理の内容は全く同じです。


シェルフを作ればあとはUVエディタのカスタム シェルフに中ドラッグをすれば終了です。Maya2018で失われたツールも見事に復活しました。

問題点2:UVの垂直反転と水平反転の共存ができない

これは反転だけでなく、UV回転にも言えることだけどカスタムシェルフに同時に登録できないのでメニューの□からのオプションで水平⇔垂直を変えないといけないので面倒です。
また、垂直反転に変えてもアイコンは水平反転のままなので直感的ではありません。

解決編2:ツールが無ければ復活させれば良いじゃない

基本的には解決方法は同じです。
「.png」で検索をすれば"flipU.png""flipV.png"とそれらしいファイルが見つかります。

    iconTextButton
        -image1 "flipU.png"
        -command "performPolyFlipUV 0"
        -commandRepeatable true -label (uiRes("m_textureWindowCreateToolBar.kFlipUVsInUdirectionLbl"))
        -annotation (uiRes("m_textureWindowCreateToolBar.kFlipUVsInUdirectionAnnot"))
        flipUButton;

    iconTextButton
        -image1 "flipV.png"
        -command "performPolyFlipUV 1"
        -commandRepeatable true -label (uiRes("m_textureWindowCreateToolBar.kFlipUVsInVdirectionLbl"))
        -annotation (uiRes("m_textureWindowCreateToolBar.kFlipUVsInVdirectionAnnot"))
        flipVButton;

これでコマンドも分かったのでシェルフに登録するだけと言いたいけど……

source "textureWindowCreateToolBar";
performPolyFlipUV 0;

今回はスクリプトファイルはあるけどコンパイルがされてないのでsourceで関連付けることをお忘れなく。


あとはカスタムシェルフにそれぞれを登録をすればこの通り、水平反転も垂直反転も、さらに左回転も右回転も登録できます。

もしかしたらツールキットの機能も!?


実はこれも可能です。
C:/Program Files/Autodesk/Maya2018/scripts/others/uvTkBuildAlignSnapOptions.mel
このスクリプトファイルにツールキットの内容も移植することもできます。位置合わせ機能みたいに1アイコンで実行する単純な機能は簡単にシェルフに登録できます。

今後について

今のところはCOYOTEスタジオでは希望者にのみ対応ですが、そのうちアンケートを取って人気のあるツールを一気にカスタム シェルフに登録するツールを用意しようと画策しています。

Author: nakabayashinobukazu