チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第33回:ジョイント数を調べてみよう:本気の実装編(3/3)

  • Maya
  • キャラクター・リグ
  • ゲーム
  • コラム
  • チュートリアル
  • 中級者
  • 学生・初心者
  • 教育
  • 映画・TV

前回まで作ってきたツールは、単にジョイント数を調べるだけのツールだから簡単に作れるものと思いながらやっていましたが、いいツールに仕上げるにはなんとも手間のかかるものだと思えてきたのではないでしょうか。だからこそテクニカルアーティストの価値が高いわけです。

これまでのアーティストのフィードバックで、ようやく本当に必要なツールが見えてきました。つまり、

「選択は変えないで、選択したオブジェクト以下のジョイント数を調べるツール」

が求められていたわけです。

まだまだある選択肢

よくよく考えてみると、他にもツールに実装した方が良いのではないかと思える機能があります。一つ一つ見ていきましょう。

・選択したオブジェクトより上の階層にあるジョイントは考慮すべきか?



これに対応すれば手のジョイントを選択していても全身のジョイント数を出せて便利では!?と思えます。でもこれに対応してしまうと、肩から下のジョイント数を調べたい、というような要望を満たせなくなります。

今のツールは、選択したオブジェクト以下のジョイント数を表示できるので、それはそれで汎用性が高いのです。またその方がアーティストにとっても何が起きているかわかりやすいです。というわけでこれには対応しません。

・シーン全体のジョイント数を出すようにするべきか?



この機能に対応するとシーン内にキャラが一体だけなら、オブジェクト選択をしなくてもジョイント数が表示できて便利です。でも複数キャラがいたり、テンプレートのジョイントがあった場合に、それらのジョイントも数に含んでしまうので問題が起こります。シーン全体のジョイントは出さない方がよさそうです。

・ヘッドアップディスプレイに表示した方がいい?



常にジョイント数が表示されると便利、ということです。これは実装に手間がかかります。ツールの実行頻度が低ければ単発で実行するツールで十分です。なので対応はしないことにします。

・決められたジョイント数以上のジョイントが見つかった場合、エラーを出して警告する?
ジョイント数は1キャラ64本まで!など決まっている場合に、ジョイント数がオーバーしていたら警告を出すのは便利かもしれません。しかし、何度も何度も警告が出るのは気持ちが悪く、それが嫌でアーティストがこのツールを使わなくなることもあります。プログラマが作るツールではこの点がおざなりになりがちですが、「ツールの使用感」はものすごく重要です!

制限は入れれば入れるほど良いように思えますが、何もしない方が本当はよいのです。ジョイント数制限を決めなければ、このツールをあらゆるプロジェクトで使用してもらえますし、ここはアーティスト任せにしましょう。

こんな風に本当に様々な選択肢があります。方針としては、なるべくシンプルにしておく、というのがよいです。今回作るツールを基本として、後々必要が出てくれば改良していきます。いきなり高機能なツールを作っても、そのほとんどの機能が使われなかったら意味ないですから。

いよいよ最終実装

これですっかり必要とされるツール像が見えました。では、実装してみましょう。

SelectHierarchy で階層を選択すると、それまでのオブジェクト選択がなくなってしまいます。これの対処方法として、ツール実行時のオブジェクト選択を記録しておいて、ツール終了時にselectコマンドで始めのオブジェクト選択に戻す、という方法もあります。しかし、あまりスマートな方法には思えません。

ここでカンがものを言います。lsコマンドで選択しているオブジェクト以下のオブジェクトリストを返す機能はないのか?これに気づけばしめたものです。

-dag というフラグがあります。これはまさにその機能。選択したものがあれば、それ以下のオブジェクトをリストとして返します。このフラグを追加してみましょう。

size( `ls -sl -type joint -dag` );





オブジェクトの選択はそのまま、階層内のジョイントの数を調べることができました!これが欲しかった機能です!!

「カン」といいましたが、考え方の方法として、あるコマンドを使用したらそのコマンドでできる限りのことをする、と考えるとよいです。今回の場合で言えばlsコマンドを使用するので、フラグをすべてチェックして「選択したものをリストにする」「指定したノードタイプのものをリストにする」「階層をリストにする」という機能が提供されていないかチェックします。なければ他の方法を考える、というわけです。

最終テスト

ではアーティストに使ってもらいましょう。

「オブジェクト選択は保たれたままになったんだねー。腕を選択すれば、腕のジョイント数もわかるし、これは便利!」

「選択をしてない時に実行したら、0と表示されると。なるほど、選択がないんだもん、そりゃそうだよね。」

「複数のキャラでジョイント数を調べたい時は?複数キャラのルートを選択して実行すればいいのね。なるほど。」

なんとなくでっち上げたストーリーのように感じるかもしれませんが、どうやらテクニカルアーティストとアーティストが思い描く【ツールの想像図】も一致したようです。これはよいツールとして使われていきそうです。

まとめ

ジョイント数を調べるツールの解説に三回もかかってしまいましたが、それほどツール制作は奥が深いものです。小話を通してテクニカルアーティストの必要性や、素晴らしさを感じて頂けたのではないでしょうか。

せっかくなのでしばらくはこのような「シンプルだけど便利なツール制作」の話をしていきたいと思います。スクリプトをそのままコピーして、スクリプトエディターで実行していただければどなたでも利用できるようにしますので、テクニカルアーティストを目指してないよ、という方もツールをコピペで利用してもらえると幸いです。

製品購入に関するお問い合わせ
オートデスク メディア&エンターテインメント 製品のご購入に関してご連絡を希望される場合は、こちらからお問い合わせください。