チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第35回:テクスチャの情報を調べてみよう(2/3)アトリビュートエディタの仕組み
- Maya
- ゲーム
- コラム
- チュートリアル
- マテリアル・シェーダー・UV
- 中級者
- 学生・初心者
- 教育
- 映画・TV
前回テクスチャの情報をスクリプトエディタに表示するところまで出来ました。ところでツールは使用者、つまりアーティストの作業に即していることが大切です。アーティストからは次のような要望がありそうです。
・シーン内でサイズの大きなテクスチャが無いか調べたい。
・アルファが抜けてない時に、テクスチャのアルファがちゃんとあるのか確認したい。
・ファイルのフォーマットが間違ってないか確認したい。
・などなど。
毎度テクスチャを選択してスクリプトを走らせるのも大変ですし、スクリプトエディタで情報を確認するというのもアーティストにやさしくありません。テクスチャを選択したらGUIのどこかに情報が出る、というのがよさそうです。
テクスチャをいじるときは大抵アトリビュートエディタを開きます。しかもあれ?スウォッチ(サムネイル)のところって、なんだかスカスカではないですか。ここに情報を出せばよさそうですね。
というわけでスウォッチの右側にテクスチャ情報を表示してみましょう!
ごっそりと
「C:\ProgramFiles\Autodesk\Maya2013\scripts\AETemplates」
に入っています。("~\Maya2013"のところまでは、みなさんの環境によって異なります)
実はこれらのmelファイルはこのフォルダ内になくても、スクリプトへのパスが通っているところにあればどこでも機能します。わかりやすいようにこのフォルダにまとめてあるだけです。(重要)
ファイル名にはルールがあります。こんな感じです。
「”AE”(Attribute Editorの略) + ノード名 + "Template.mel"」
これになっていないとアトリビュートエディタのスクリプトとして実行されません。
テクスチャはfileノードですので、AEfileTemplate.melがあるはずです。ありましたか?
早くファイルを開いてみたいところですが、これを書き換えるとMayaが起動しなくなる恐れがあります…。ではどうするか?いろいろなやり方がありますが、今回は以下のようにやってみて下さい。
1) AEfileTemplate.melをコピー。
2) スクリプトのパスが通った場所にペースト。
例えば「C:\Users\○○\Documents\maya\2013.5-x64\scripts」にペースト。
日本語版Mayaでは「C:\Users\○○\Documents\maya\2013.5-x64\ja_JP\scripts」にペースト。
(○○にはユーザー名が入ります。)
(2013.5-x64はMayaのバージョンです。適切なバージョンのフォルダを選んで下さい。)
3) ペーストしたAEfileTemplate.melを開いて加工していきます。
先ほど説明した通り、AETemplateのmelファイルの場所はMayaが見つけられればどこでも良いのです。上記のフォルダのようにスクリプトパスが通ったところにコピペすればOK。上記のフォルダはユーザースクリプト用のフォルダですので、ここにあるmelはMaya起動時にAETemplatesフォルダのmelより先に読み込まれます。
もしMayaが起動しない、表示がおかしい、となれば慌てず騒がずコピーしたmelを削除します。すると本来Mayaが使うmelが使われるようになって無事起動するようになる、という仕組みです。
今回のカスタマイズはMayaを終了する時にどこかに保存される様な内容はありませんのでご安心下さい。
常套手段としてまずは表示されているラベル名で検索します。日本語Mayaではスウォッチには「サンプル」、英語Mayaでは「sample」とラベルが表示されています。英語で検索しないと、コード内では引っかかりませんので「sample」で検索します。
…が、ない。
こういうこともあります。
では単語を変えて「swatch」で検索してみます。「AEswatchDisplay」というのが引っかかりました。これが何なのか、Mayaでスクリプトエディタを開き次のコマンドを実行します。
「C:/Program Files/Autodesk/Maya2013.5/scripts/AETemplates/AEswatchDisplay.mel」
と返ってきました。もちろんみなさんの環境によって微妙にパスが異なることがあります。
「whatIs」というMELコマンドは指定した関数名が何者か教えてくれます。melファイルであればその場所を表示します。
言われたAEswatchDisplay.melファイルをとりあえずユーザースクリプト用のフォルダにコピペしてから
AEswatchDisplay.mel を開いてみます。
また「sample」で検索してみましょう。今度はズラッと見つかりました。
Sampleという文字列が見つかったのは「defineLabel」という関数内です。どうやらこの関数はアトリビュートエディタのラベル名、「サンプル」とかを$labelに仕込んで返すようです。
では defineLabel という関数を使っているところはどこでしょうか。「defineLabel」で検索します。
ありました。
「AEswatchDisplayReplace」という関数内に「string $label = `defineLabel $node[0]`;」という部分があります。
その数行前には「swatchDisplayPort」というものがあります。名前が明らかに怪しいですね。このコマンドをMELのヘルプで調べてみると、どうやらこれがスウォッチの本体のようです。
「swatchDisplayPort -edit」と書かれています。編集モードで内容が更新されているということですので、別の場所で「swatchDisplayPort」が作られているはずです。
「swatchDisplayPort」で検索しましょう。
「swatchDisplayPort -wh 64 64 swatchDisplay;」
というところが見つかりましたでしょうか。ここがスウォッチを作成している瞬間です!
試しに「64 64」を「128 128」にしてAEswatchDisplay.melを保存し、Mayaを立ち上げなおしてみましょう。わくわく。
あれ!?なんか意図と違う?でもまあ、変更に反応してスウォッチのエリアが広くなっていますね;)
ちなみにマテリアルを選択したら、そちらもスウォッチのエリアが広くなっています。どうやらこの関数はfileノード以外にも影響があるようです。要注意です。
とりあえず「64 64」に戻しておいて下さい…。
・シーン内でサイズの大きなテクスチャが無いか調べたい。
・アルファが抜けてない時に、テクスチャのアルファがちゃんとあるのか確認したい。
・ファイルのフォーマットが間違ってないか確認したい。
・などなど。
毎度テクスチャを選択してスクリプトを走らせるのも大変ですし、スクリプトエディタで情報を確認するというのもアーティストにやさしくありません。テクスチャを選択したらGUIのどこかに情報が出る、というのがよさそうです。
テクスチャ情報を出す場所
一番理想的なところはどこでしょうか?テクスチャをいじるときは大抵アトリビュートエディタを開きます。しかもあれ?スウォッチ(サムネイル)のところって、なんだかスカスカではないですか。ここに情報を出せばよさそうですね。
というわけでスウォッチの右側にテクスチャ情報を表示してみましょう!
アトリビュートエディタってどう処理されているの?
アトリビュートエディタの表示はユーザーがMELでウインドウを作るのと同じような感じで、普通にmelファイルで書かれています。ごっそりと
「C:\ProgramFiles\Autodesk\Maya2013\scripts\AETemplates」
に入っています。("~\Maya2013"のところまでは、みなさんの環境によって異なります)
実はこれらのmelファイルはこのフォルダ内になくても、スクリプトへのパスが通っているところにあればどこでも機能します。わかりやすいようにこのフォルダにまとめてあるだけです。(重要)
ファイル名にはルールがあります。こんな感じです。
「”AE”(Attribute Editorの略) + ノード名 + "Template.mel"」
これになっていないとアトリビュートエディタのスクリプトとして実行されません。
テクスチャはfileノードですので、AEfileTemplate.melがあるはずです。ありましたか?
早くファイルを開いてみたいところですが、これを書き換えるとMayaが起動しなくなる恐れがあります…。ではどうするか?いろいろなやり方がありますが、今回は以下のようにやってみて下さい。
1) AEfileTemplate.melをコピー。
2) スクリプトのパスが通った場所にペースト。
例えば「C:\Users\○○\Documents\maya\2013.5-x64\scripts」にペースト。
日本語版Mayaでは「C:\Users\○○\Documents\maya\2013.5-x64\ja_JP\scripts」にペースト。
(○○にはユーザー名が入ります。)
(2013.5-x64はMayaのバージョンです。適切なバージョンのフォルダを選んで下さい。)
3) ペーストしたAEfileTemplate.melを開いて加工していきます。
先ほど説明した通り、AETemplateのmelファイルの場所はMayaが見つけられればどこでも良いのです。上記のフォルダのようにスクリプトパスが通ったところにコピペすればOK。上記のフォルダはユーザースクリプト用のフォルダですので、ここにあるmelはMaya起動時にAETemplatesフォルダのmelより先に読み込まれます。
もしMayaが起動しない、表示がおかしい、となれば慌てず騒がずコピーしたmelを削除します。すると本来Mayaが使うmelが使われるようになって無事起動するようになる、という仕組みです。
今回のカスタマイズはMayaを終了する時にどこかに保存される様な内容はありませんのでご安心下さい。
スウォッチの場所を見つけるには?
さて、アトリビュートエディタのスクリプトは発見しました。AEfileTemplate.melを開いてみましょう。スウォッチはどの行で作られているのでしょうか?常套手段としてまずは表示されているラベル名で検索します。日本語Mayaではスウォッチには「サンプル」、英語Mayaでは「sample」とラベルが表示されています。英語で検索しないと、コード内では引っかかりませんので「sample」で検索します。
…が、ない。
こういうこともあります。
では単語を変えて「swatch」で検索してみます。「AEswatchDisplay」というのが引っかかりました。これが何なのか、Mayaでスクリプトエディタを開き次のコマンドを実行します。
whatIs AEswatchDisplay;
「C:/Program Files/Autodesk/Maya2013.5/scripts/AETemplates/AEswatchDisplay.mel」
と返ってきました。もちろんみなさんの環境によって微妙にパスが異なることがあります。
「whatIs」というMELコマンドは指定した関数名が何者か教えてくれます。melファイルであればその場所を表示します。
言われたAEswatchDisplay.melファイルをとりあえずユーザースクリプト用のフォルダにコピペしてから
AEswatchDisplay.mel を開いてみます。
また「sample」で検索してみましょう。今度はズラッと見つかりました。
Sampleという文字列が見つかったのは「defineLabel」という関数内です。どうやらこの関数はアトリビュートエディタのラベル名、「サンプル」とかを$labelに仕込んで返すようです。
では defineLabel という関数を使っているところはどこでしょうか。「defineLabel」で検索します。
ありました。
「AEswatchDisplayReplace」という関数内に「string $label = `defineLabel $node[0]`;」という部分があります。
その数行前には「swatchDisplayPort」というものがあります。名前が明らかに怪しいですね。このコマンドをMELのヘルプで調べてみると、どうやらこれがスウォッチの本体のようです。
「swatchDisplayPort -edit」と書かれています。編集モードで内容が更新されているということですので、別の場所で「swatchDisplayPort」が作られているはずです。
「swatchDisplayPort」で検索しましょう。
「swatchDisplayPort -wh 64 64 swatchDisplay;」
というところが見つかりましたでしょうか。ここがスウォッチを作成している瞬間です!
試しに「64 64」を「128 128」にしてAEswatchDisplay.melを保存し、Mayaを立ち上げなおしてみましょう。わくわく。
あれ!?なんか意図と違う?でもまあ、変更に反応してスウォッチのエリアが広くなっていますね;)
ちなみにマテリアルを選択したら、そちらもスウォッチのエリアが広くなっています。どうやらこの関数はfileノード以外にも影響があるようです。要注意です。
とりあえず「64 64」に戻しておいて下さい…。