チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第53回:自動でセットプロジェクトを行うようにしよう!(2/2)
- Maya
- ゲーム
- コラム
- チュートリアル
- 中級者
- 学生・初心者
- 教育
- 映画・TV
さて、前回の続きです。今回は自動セットプロジェクト機能をMayaに組み込みます。早速続きを始めていきましょう。
「シーンを保存」するのなら、保存後にセットプロジェクトをしなければいけません。保存の前にセットプロジェクトをしてしまうと、保存するシーンが別のプロジェクトとして保存されてしまいます!するとテクスチャなどのパスに問題が出ます。
そんな風にちょっとややこしいので、ファイルを開くまでを簡単なフローチャートにしてみましょう。
シーンを開くあたりは割愛していますが、大体こんな感じです。ずいぶん難しそうに見えますが、順にたどっていけばやっていることは単純です。
黒丸で囲んであるところが、今回作る機能の部分です。これを見てみると、今回コールバックを仕込むべきは「saveChanges.mel」の中というのが分かります。
どのような方法でシーンを開こうとしても、必ず「現在のシーンを保存しますか?」と聞いてきますので、ここに仕込んでおけば間違いが無く、安心です。
安全に編集を行うために、ちょっとしたテクニックを利用します。まずは次の手順を行ってみてください。(Maya2014の場合)
1)「C:\Program Files\Autodesk\Maya2014\scripts\others\saveChanges.mel」をコピー。
2)Mayaのプリファレンスディレクトリにペーストします。パスは
「C:\Users\ユーザー名\Documents\maya\2014-x64\scripts」
です。
日本語でMayaを使っている場合は
「C:\Users\ユーザー名\Documents\maya\2014-x64\ja_JP\scripts」
にペーストします。
(「C:\Users\ユーザー名\Documents\maya\scripts」に入れてもとりあえず動きますが「maya\scripts」はどのバージョンのMayaでもアクセスしますので、誤作動する可能性があり、ちょっと危険です)
3)コピーした「saveChanges.mel」を改変します。
こうすればMaya起動時にプリファレンス内のスクリプトが、オリジナルのスクリプトより早く読み込まれます。もし何か問題が起きたら、プリファレンス内の 「saveChanges.mel」を削除するか、オリジナルのスクリプトをコピーしなおして上書きしてしまえばOKです。
さて、改変は簡単です。コードの一番最後あたりに、今回作るツールの関数をちょっと仕込むだけです。現在のシーンを破棄してよいか、保存するのかの確認がひと通り終わった後、この場所に処理がやってきます。
自動セットプロジェクトの確認機能を差し込んで、確認が終わったらいざシーンを開く、という流れに変更するのです。作るツールの関数名は「autoSetProject」にしておきます。次のように変更してみてください。
引数で使っている「$saveChangeAction」変数には「performFileAction.mel」で作られたコマンドが入っています。どういうコマンドかというと「file –force –open ○○」的な、何かしらファイルを操作するコマンドです。コールバックとして、現在のシーンの保存確認後に「saveChanges.mel」内で実行されるようになっています。
「autoSetProject」自体のコードは次の様にしています。
コメントを見てもらえれば大体何が起きているかは見当がつくと思いますので、ちょっと注意が必要な点だけ補足します。
「autoSetProject」関数で、本当にプロジェクトをセットしてよいか確認ダイアログを表示し、プロジェクトをセットしています。キャンセルされない限りは、シーンを開く処理が続行されるので1を返します。キャンセルされれば0を返して、シーンを開く処理自体中断します。
セットプロジェクトは、もともとMayaに「setProject.mel」という物がありますので、それにディレクトリを指定すると必要な処理をしてくれます。ナイス!
(C:\Program Files\Autodesk\Maya2014\scripts\others\setProject.mel)
「saveChanges.mel」から「autoSetProject.mel」に渡してもらえる情報である
「$saveChangeAction」はファイルを開くコマンドです。この中にファイル名が含まれているので「autoSetProject.getProjectDir」で抜き出しています。
おまけとして「inViewMessage」コマンドを使って、セットプロジェクトした場合はモデリングビュー上にメッセージを表示するようにしています。
「saveChanges.melの改変」と「autoSetProject.melの作成」が終わったら、Mayaを立ち上げてみてください。シーンを開こうとすると「現在のシーンを保存するかどうか」の確認の後に、セットプロジェクトの確認ダイアログが出てきましたか?
ああ、これでずいぶんと作業が楽になりました。自分で毎回セットプロジェクトをやっていたあの頃が思い出せなくなるぐらい楽です。費用対効果が非常に高い改良ですね。
他にもっといじるするとすれば、プロジェクトが無いファイルを開くときに、プロジェクトディレクトリをユーザーに指定させたり、プロジェクトを作ったりするようにすると完璧です。
あとはMayaのバージョンが上がった時の対応です。Mayaのバージョンが上がっても
「saveChanges.mel」の変更はほとんどありませんから、新しいMayaの
「saveChanges.mel」を今回と同じように変更すればOKです。
新しい機能を作った時は、Mayaのどのスクリプトを改変したか覚えていますが、一年後に覚えているかどうか、怪しい限りです。しかも他の人がアップデート対応するとすれば、状況はよりややこしくなります。
ゲーム作成の現場でよくあることとして、アーティストが「あの機能を新しいMayaに持って行きたい」とリクエストしても、対応するプログラマが「ファイルの依存関係がよくわからないから、面倒なのでやだな」とアップデートしない、ということです。
今回のスクリプトの管理方法ならこの問題がずいぶんと解消されます。
始めに「saveChanges.mel」をプリファレンスディレクトリのscriptsディレクトリにコピーしました。ということは、このディレクトリを見れば、Mayaの何のスクリプトを改変しているかすぐに分かるのです。オリジナルのスクリプトと差分を比べれば、どこを移植すれば良いかもすぐに分かります。ちょっとした事ですが、このような管理方法が後々効いてくるわけです。
でもお弁当におてふきがついていればとりあえず手を拭くように、シーンを開くときに「プロジェクトはこちらでございますか?おセットいたしましょうか?」と親切な店員風ダイアログが出れば、誰もがミスなく確実にプロジェクトをセット出来ます。こうしてヒューマンエラーが減ることで製作効率がまた一段と向上します。
見ていただいたとおりツール自体はとてもシンプルですが、効果はとても大きいですので、ぜひお試し下さい。
どのタイミングでセットプロジェクトを行うべきか?
シーンを開くのに現在のシーンが保存されていない場合「saveChanges.mel」で保存するかどうかの確認が行われます。「シーンを保存」するのなら、保存後にセットプロジェクトをしなければいけません。保存の前にセットプロジェクトをしてしまうと、保存するシーンが別のプロジェクトとして保存されてしまいます!するとテクスチャなどのパスに問題が出ます。
そんな風にちょっとややこしいので、ファイルを開くまでを簡単なフローチャートにしてみましょう。
シーンを開くあたりは割愛していますが、大体こんな感じです。ずいぶん難しそうに見えますが、順にたどっていけばやっていることは単純です。
黒丸で囲んであるところが、今回作る機能の部分です。これを見てみると、今回コールバックを仕込むべきは「saveChanges.mel」の中というのが分かります。
どのような方法でシーンを開こうとしても、必ず「現在のシーンを保存しますか?」と聞いてきますので、ここに仕込んでおけば間違いが無く、安心です。
saveChanges.melの改変
今回はMayaに初めからついてくるスクリプトを改変します。安全に編集を行うために、ちょっとしたテクニックを利用します。まずは次の手順を行ってみてください。(Maya2014の場合)
1)「C:\Program Files\Autodesk\Maya2014\scripts\others\saveChanges.mel」をコピー。
2)Mayaのプリファレンスディレクトリにペーストします。パスは
「C:\Users\ユーザー名\Documents\maya\2014-x64\scripts」
です。
日本語でMayaを使っている場合は
「C:\Users\ユーザー名\Documents\maya\2014-x64\ja_JP\scripts」
にペーストします。
(「C:\Users\ユーザー名\Documents\maya\scripts」に入れてもとりあえず動きますが「maya\scripts」はどのバージョンのMayaでもアクセスしますので、誤作動する可能性があり、ちょっと危険です)
3)コピーした「saveChanges.mel」を改変します。
こうすればMaya起動時にプリファレンス内のスクリプトが、オリジナルのスクリプトより早く読み込まれます。もし何か問題が起きたら、プリファレンス内の 「saveChanges.mel」を削除するか、オリジナルのスクリプトをコピーしなおして上書きしてしまえばOKです。
さて、改変は簡単です。コードの一番最後あたりに、今回作るツールの関数をちょっと仕込むだけです。現在のシーンを破棄してよいか、保存するのかの確認がひと通り終わった後、この場所に処理がやってきます。
自動セットプロジェクトの確認機能を差し込んで、確認が終わったらいざシーンを開く、という流れに変更するのです。作るツールの関数名は「autoSetProject」にしておきます。次のように変更してみてください。
引数で使っている「$saveChangeAction」変数には「performFileAction.mel」で作られたコマンドが入っています。どういうコマンドかというと「file –force –open ○○」的な、何かしらファイルを操作するコマンドです。コールバックとして、現在のシーンの保存確認後に「saveChanges.mel」内で実行されるようになっています。
「autoSetProject」自体のコードは次の様にしています。
autoSetProject.mel
ファイル名を「autoSetProject.mel」として、スクリプトパスの通ったところに置いてください。中身は次のとおりです。コメントを見てもらえれば大体何が起きているかは見当がつくと思いますので、ちょっと注意が必要な点だけ補足します。
「autoSetProject」関数で、本当にプロジェクトをセットしてよいか確認ダイアログを表示し、プロジェクトをセットしています。キャンセルされない限りは、シーンを開く処理が続行されるので1を返します。キャンセルされれば0を返して、シーンを開く処理自体中断します。
セットプロジェクトは、もともとMayaに「setProject.mel」という物がありますので、それにディレクトリを指定すると必要な処理をしてくれます。ナイス!
(C:\Program Files\Autodesk\Maya2014\scripts\others\setProject.mel)
「saveChanges.mel」から「autoSetProject.mel」に渡してもらえる情報である
「$saveChangeAction」はファイルを開くコマンドです。この中にファイル名が含まれているので「autoSetProject.getProjectDir」で抜き出しています。
おまけとして「inViewMessage」コマンドを使って、セットプロジェクトした場合はモデリングビュー上にメッセージを表示するようにしています。
「saveChanges.melの改変」と「autoSetProject.melの作成」が終わったら、Mayaを立ち上げてみてください。シーンを開こうとすると「現在のシーンを保存するかどうか」の確認の後に、セットプロジェクトの確認ダイアログが出てきましたか?
ああ、これでずいぶんと作業が楽になりました。自分で毎回セットプロジェクトをやっていたあの頃が思い出せなくなるぐらい楽です。費用対効果が非常に高い改良ですね。
他にもっといじるするとすれば、プロジェクトが無いファイルを開くときに、プロジェクトディレクトリをユーザーに指定させたり、プロジェクトを作ったりするようにすると完璧です。
あとはMayaのバージョンが上がった時の対応です。Mayaのバージョンが上がっても
「saveChanges.mel」の変更はほとんどありませんから、新しいMayaの
「saveChanges.mel」を今回と同じように変更すればOKです。
新しい機能を作った時は、Mayaのどのスクリプトを改変したか覚えていますが、一年後に覚えているかどうか、怪しい限りです。しかも他の人がアップデート対応するとすれば、状況はよりややこしくなります。
ゲーム作成の現場でよくあることとして、アーティストが「あの機能を新しいMayaに持って行きたい」とリクエストしても、対応するプログラマが「ファイルの依存関係がよくわからないから、面倒なのでやだな」とアップデートしない、ということです。
今回のスクリプトの管理方法ならこの問題がずいぶんと解消されます。
始めに「saveChanges.mel」をプリファレンスディレクトリのscriptsディレクトリにコピーしました。ということは、このディレクトリを見れば、Mayaの何のスクリプトを改変しているかすぐに分かるのです。オリジナルのスクリプトと差分を比べれば、どこを移植すれば良いかもすぐに分かります。ちょっとした事ですが、このような管理方法が後々効いてくるわけです。
まとめ
「シーンを開く前にセットプロジェクト!」というのを徹底しようとしてもなかなか実際には難しいものです。「ごはんを食べる前には手を洗って!」といってもなかなか面倒なものです:(でもお弁当におてふきがついていればとりあえず手を拭くように、シーンを開くときに「プロジェクトはこちらでございますか?おセットいたしましょうか?」と親切な店員風ダイアログが出れば、誰もがミスなく確実にプロジェクトをセット出来ます。こうしてヒューマンエラーが減ることで製作効率がまた一段と向上します。
見ていただいたとおりツール自体はとてもシンプルですが、効果はとても大きいですので、ぜひお試し下さい。