チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第50回:現在のUVセット名をメニューに表示してみよう!(1/2)
- Maya
- アニメーション
- ゲーム
- コラム
- チュートリアル
- 中級者
- 学生・初心者
- 教育
- 映画・TV
前回は株価をMayaのヘッドアップディスプレイに表示しました。行った内容をざっくり分類すると、「情報」を「GUI」に表示したわけです。
作業に必要な情報を見やすい所に表示すれば、とても作業がはかどるようになります。今回も似たようなことをしてみたいと思います。標的はUVセットです。
Mayaではメッシュに複数のUVセットを持たせることができます。つい先日、デモデータを用意するのに大量のオブジェクトを編集していたところ、UVセットを整理整頓するのに選択しているメッシュの現在のUVセット名を確認したい時がよくありました。
現在のUVセットを確認するのに、ふつうはUV Texture EditorのUV Sets メニューをクリックして確認します。
シーン内のオブジェクトが数個ならこれでも良いのですが、数百個のオブジェクトに対して行うと思うと、ちょっと危険な感じがしますね。ここは新しいツールを作るチャンスです!GUIをいじって快適に作業ができるようにしてみましょう。
というわけで、UVセットの名前をメニューに表示してみましょう!前回のスクリプトほど役には立たないかもしれませんが:) 次の図のように表示させるのが目標です。
これならわざわざメニューをクリックしなくてもよくなります。作業が楽になりそうです。
前回の株価表示ツールでも今回のツールでも、どちらも「情報」を「GUI」に表示することには変わりません。この手のツールは結構多く、作成方法に一定のパターンがあります。
まず始めに「必要な情報を取るツール」を作ります。情報が取れなければGUIに表示することも出来ませんので、とにかく情報を取得する方法を確立します。利用頻度が低いツールなら常に情報を見る必要がないので、ツールをシェルフに登録しておいて、実行結果はスクリプトエディタに表示するだけで十分です。
GUIに情報を表示するのなら、表示したいGUIを試しにいじくって表示を変えたり、ラベルとかボタンを追加したりしてみます。こうしてテストを行って、本当にGUIを変更できるか確認しておきます。
最後に、取ってきた情報をGUIに出す仕組みを作ります。今回は「scriptJob」というMELを使って、オブジェクトを選択する度にGUIを自動更新するようにしてみます。
とっても簡単ですね!ついでなので「polyUVSet」の紹介をします。このMELを使うとUVセットの操作を行えます。名前を変えたり、作ったり、削除したりできます。現在のUVセットを切り替えることもできます。
例えばシーン内にゴミUVセットを持ったメッシュがいないかチェックするのに使ったりします。(「polyUVSet -q -allUVSets」と実行すると、対象メッシュの全てのUVセット名を取れますので、不要な名前のUVセットがないかチェックする、という感じで。)
ゲーム用データを書き出す時にUVセット名が正しいかどうか、不必要なUVセットがないか事前にチェックすることがありますが、このコマンドを使ってチェックを行えます。データの保全にどんどん活用してみてください。
段取りは次のようになります。
1 表示されているメニュー名から、多言語対応用IDを見つけ出す。
2 そのIDを使っているところを見つけ出す。(大抵はここがメニュー作成の場所)
3 メニュー作成のMELを適当にいじって、メニューが意図通り変化すればそれが獲物です!
では順を追ってみていきましょう。
Mayaは多言語対応しています。MayaのGUIの文字は英語でも日本語でも中国語でも表示できます。世の中の多言語対応にはいろいろなやり方がありますが、MayaはIDを使って対応しています。
例えば「polyID」というIDがあるとします。MELで「uiRes(“polyID”)」を実行した時、英語環境では「polyID」が「polygon」と変換されて、日本語環境なら「ポリゴン」と変換されるとします。これなら多言語対応が必要なところで「uiRes(“polyID”)」を呼び出すだけで、適切な文字を得られるわけです。
MayaのメニューのほとんどはこのIDをラベル名として指定しています。ということは知りたいメニューを見つけるには、表示されているメニュー名のIDを知る必要があります。
MayaのGUIは大抵
「C:\Program Files\Autodesk\Maya20xx\scripts」
内のmelファイルで作られています。
このフォルダ内の全てのmelファイル内を、メニュー名で検索します。(ファイル内文字の検索には、素晴らしいフリーソフトが沢山出ていますので、そちらを利用してください)
検索するとき日本語メニュー名で検索するとちょっと面倒なので、今回は「英語メニュー名」で検索します:)
「UV Sets」で検索するとこんな感じで検索結果が出てきました。
意外と「UV Sets」という名前のメニューが多いですね。
「~.res.mel」という名前のファイルがたくさんあります。これは多言語対応用のファイルです。各「.res.mel」ファイルは「.res」を取り除いたファイル名のmelに対応します。例えば「myScript.res.mel」は「myScript.mel」の多言語対応ファイルとなります。
どれがUV Texture Editorかというのが問題なのですが、カンでそれっぽいファイル名を見つけます…。
「texturePanel.res.mel」が明らかに極めて怪しいので、開いてみます。テキストエディタで開いてみるとメニュー名とIDがずらっと記述されています。
UV Sets以外のメニュー名を見てみるとUV Texture Editorで見る名前ばかりなので間違いなさそうです。
「UV Sets」という名前が設定されているところは
と書かれています。
後ろの「m_texturePanel.kUVSets」という名前が、このメニュー名のIDです。
試しに「uiRes」コマンドにIDを指定して実行してみると「UV Sets」と正しく表示されるのが確認できます。日本語環境だと日本語で表示されます。
検索してみると二カ所でヒットしました。
なぜ二カ所で使われているかというと、UV Texture Editorのメニューと、右クリックした時のメニューの二カ所で「UV Sets」という名前が使われているからです。
「menu」コマンドがパネルとかメインウインドウに表示される親メニュー作成のコマンドですので、二番目に現れる方がUV Texture Editor上部のメニューです。
本当にここが「UV Sets」メニューなのかどうか確認してみましょう。単純にラベル名を適当な名前に変えます。
「texturePanel.mel」のテキストを全てコピーして、スクリプトエディタに貼り付け、実行します。これでUV Texture Editor作成スクリプトが更新されます。UV Texture Editorを立ち上げ直すと、無事「UV Sets」が「This is it!」に変わっているのが確認できます。
こういう風にGUIを作るスクリプトを、起動しているMayaで実行しても、どこかの設定ファイルに変更が保存されることはありませんので、安心して実行して下さい。
もし壊れたら?Mayaを起動し直すだけです。Mayaが起動しなかったら?誰か適当な人を捕まえて「texturePanel.mel」をもらってきましょう!壊しながら試して学んでいくのがMaya流です。
なんとなくもうツールの部品が揃っている感じがしてきました。メニューラベルの名前を変えることが出来たので、ここに現在のUVセット名を表示するだけですからね。
「texturePanel.mel」をガリガリ編集してツールを完成させることも出来ますが、もっとメンテナンスしやすく、分かりやすく改造する方法があります。
次回はその手順を見て行きたいと思います。
作業に必要な情報を見やすい所に表示すれば、とても作業がはかどるようになります。今回も似たようなことをしてみたいと思います。標的はUVセットです。
Mayaではメッシュに複数のUVセットを持たせることができます。つい先日、デモデータを用意するのに大量のオブジェクトを編集していたところ、UVセットを整理整頓するのに選択しているメッシュの現在のUVセット名を確認したい時がよくありました。
現在のUVセットを確認するのに、ふつうはUV Texture EditorのUV Sets メニューをクリックして確認します。
シーン内のオブジェクトが数個ならこれでも良いのですが、数百個のオブジェクトに対して行うと思うと、ちょっと危険な感じがしますね。ここは新しいツールを作るチャンスです!GUIをいじって快適に作業ができるようにしてみましょう。
というわけで、UVセットの名前をメニューに表示してみましょう!前回のスクリプトほど役には立たないかもしれませんが:) 次の図のように表示させるのが目標です。
これならわざわざメニューをクリックしなくてもよくなります。作業が楽になりそうです。
前回の株価表示ツールでも今回のツールでも、どちらも「情報」を「GUI」に表示することには変わりません。この手のツールは結構多く、作成方法に一定のパターンがあります。
まず始めに「必要な情報を取るツール」を作ります。情報が取れなければGUIに表示することも出来ませんので、とにかく情報を取得する方法を確立します。利用頻度が低いツールなら常に情報を見る必要がないので、ツールをシェルフに登録しておいて、実行結果はスクリプトエディタに表示するだけで十分です。
GUIに情報を表示するのなら、表示したいGUIを試しにいじくって表示を変えたり、ラベルとかボタンを追加したりしてみます。こうしてテストを行って、本当にGUIを変更できるか確認しておきます。
最後に、取ってきた情報をGUIに出す仕組みを作ります。今回は「scriptJob」というMELを使って、オブジェクトを選択する度にGUIを自動更新するようにしてみます。
現在のUVセットを知る
これは非常に簡単にできます。メッシュを選択して次のスクリプトを実行するだけです。スクリプトエディタに現在のUVセット名が表示されます。(今回はMELスクリプトを使います。)string $currentUVSets[] = `polyUVSet -q -currentUVSet`; print $currentUVSets;
とっても簡単ですね!ついでなので「polyUVSet」の紹介をします。このMELを使うとUVセットの操作を行えます。名前を変えたり、作ったり、削除したりできます。現在のUVセットを切り替えることもできます。
例えばシーン内にゴミUVセットを持ったメッシュがいないかチェックするのに使ったりします。(「polyUVSet -q -allUVSets」と実行すると、対象メッシュの全てのUVセット名を取れますので、不要な名前のUVセットがないかチェックする、という感じで。)
ゲーム用データを書き出す時にUVセット名が正しいかどうか、不必要なUVセットがないか事前にチェックすることがありますが、このコマンドを使ってチェックを行えます。データの保全にどんどん活用してみてください。
UV Texture Editorのメニューをいじる
今回のツールの難関はここです。Mayaの既存メニューをいじくるのです!まずはメニューを作っている部分のmelファイルを探し出す必要があります。なかなか難しいことのように思えますが、まずはオススメの探し方をご紹介します。この方法を知っていれば、似たようなアプローチで他のメニューの作成場所を見つけられるようになりますので、頑張って試してみてください。段取りは次のようになります。
1 表示されているメニュー名から、多言語対応用IDを見つけ出す。
2 そのIDを使っているところを見つけ出す。(大抵はここがメニュー作成の場所)
3 メニュー作成のMELを適当にいじって、メニューが意図通り変化すればそれが獲物です!
では順を追ってみていきましょう。
表示されているメニュー名から、多言語対応用IDを見つけ出す
なんだか小難しい話になっているように思えるかもしれませんが、この「多言語対応用ID」が何者かわかれば後は簡単です。Mayaは多言語対応しています。MayaのGUIの文字は英語でも日本語でも中国語でも表示できます。世の中の多言語対応にはいろいろなやり方がありますが、MayaはIDを使って対応しています。
例えば「polyID」というIDがあるとします。MELで「uiRes(“polyID”)」を実行した時、英語環境では「polyID」が「polygon」と変換されて、日本語環境なら「ポリゴン」と変換されるとします。これなら多言語対応が必要なところで「uiRes(“polyID”)」を呼び出すだけで、適切な文字を得られるわけです。
MayaのメニューのほとんどはこのIDをラベル名として指定しています。ということは知りたいメニューを見つけるには、表示されているメニュー名のIDを知る必要があります。
MayaのGUIは大抵
「C:\Program Files\Autodesk\Maya20xx\scripts」
内のmelファイルで作られています。
このフォルダ内の全てのmelファイル内を、メニュー名で検索します。(ファイル内文字の検索には、素晴らしいフリーソフトが沢山出ていますので、そちらを利用してください)
検索するとき日本語メニュー名で検索するとちょっと面倒なので、今回は「英語メニュー名」で検索します:)
「UV Sets」で検索するとこんな感じで検索結果が出てきました。
意外と「UV Sets」という名前のメニューが多いですね。
「~.res.mel」という名前のファイルがたくさんあります。これは多言語対応用のファイルです。各「.res.mel」ファイルは「.res」を取り除いたファイル名のmelに対応します。例えば「myScript.res.mel」は「myScript.mel」の多言語対応ファイルとなります。
どれがUV Texture Editorかというのが問題なのですが、カンでそれっぽいファイル名を見つけます…。
「texturePanel.res.mel」が明らかに極めて怪しいので、開いてみます。テキストエディタで開いてみるとメニュー名とIDがずらっと記述されています。
UV Sets以外のメニュー名を見てみるとUV Texture Editorで見る名前ばかりなので間違いなさそうです。
「UV Sets」という名前が設定されているところは
displayString -replace -value "UV Sets" m_texturePanel.kUVSets;
と書かれています。
後ろの「m_texturePanel.kUVSets」という名前が、このメニュー名のIDです。
試しに「uiRes」コマンドにIDを指定して実行してみると「UV Sets」と正しく表示されるのが確認できます。日本語環境だと日本語で表示されます。
IDを使っているところを見つけ出す + 答え合わせ
「texturePanel.res.mel」に対応するファイルは「texturePanel.mel」(「.res」を取り除いたファイル名)です。ファイル内のテキストをID「m_texturePanelkUVSets」で検索すれば、メニューを作っている部分が出てきます。検索してみると二カ所でヒットしました。
なぜ二カ所で使われているかというと、UV Texture Editorのメニューと、右クリックした時のメニューの二カ所で「UV Sets」という名前が使われているからです。
「menu」コマンドがパネルとかメインウインドウに表示される親メニュー作成のコマンドですので、二番目に現れる方がUV Texture Editor上部のメニューです。
本当にここが「UV Sets」メニューなのかどうか確認してみましょう。単純にラベル名を適当な名前に変えます。
「texturePanel.mel」のテキストを全てコピーして、スクリプトエディタに貼り付け、実行します。これでUV Texture Editor作成スクリプトが更新されます。UV Texture Editorを立ち上げ直すと、無事「UV Sets」が「This is it!」に変わっているのが確認できます。
こういう風にGUIを作るスクリプトを、起動しているMayaで実行しても、どこかの設定ファイルに変更が保存されることはありませんので、安心して実行して下さい。
もし壊れたら?Mayaを起動し直すだけです。Mayaが起動しなかったら?誰か適当な人を捕まえて「texturePanel.mel」をもらってきましょう!壊しながら試して学んでいくのがMaya流です。
まとめ
今回はまず「現在のUVセット名を取る」方法と「GUIを作っている場所を探す」方法を見てきました。なんとなくもうツールの部品が揃っている感じがしてきました。メニューラベルの名前を変えることが出来たので、ここに現在のUVセット名を表示するだけですからね。
「texturePanel.mel」をガリガリ編集してツールを完成させることも出来ますが、もっとメンテナンスしやすく、分かりやすく改造する方法があります。
次回はその手順を見て行きたいと思います。