チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第31回:ジョイント数を調べてみよう(1/3)
- Maya
- キャラクター・リグ
- ゲーム
- コラム
- チュートリアル
- 中級者
- 学生・初心者
- 教育
- 映画・TV
みなさんいかがお過ごしでしょうか。しれっと著者プロフィールが変わってお気づきの方もいらっしゃることでしょう。これまでセガの築島としてコラムを書いておりましたが、これからはオートデスクの築島としてコラムを書くことになりました。
肩書は「オートデスクコンサルティング ソフトウェアエンジニア」ということで、すっかりアーティストからテクニカル寄りになりました。コラムは今までの通りゲーム開発で活かせそうな話をアーティスト面から、そしてテクニカル面からしていきたいと思っています。職種柄、せっかくですのでテクニカルアーティスト向けの情報も取りそろえたいと考えています。
というわけで景気よく行きたいので、前々からやりたかった「MELについての話」をしてみたいと思います。
テクニカルアーティストとは何?
MELの話の前に、まずテクニカルアーティストとは何ぞやという話をしたいと思います。
CGの技術的な部分に明るいアーティストをテクニカルアーティストと呼びます。アーティストの感覚を持ってプログラムを理解できる開発者で、難しいCGの話や技術的な内容をかみ砕いてアーティストに説明できます。特にゲームはアートとプログラムが綿密に、高度に組み合わさった先端技術を行く分野ですので、プログラマとアーティストの間に立って意思疎通をスムーズに行える人材が必要とされています。最近は特にプログラマ寄りのテクニカルアーティストと、アート寄りのテクニカルアーティストの二種類が生まれてきている感じもします。
ちなみに先ほどから「デザイナー」ではなく「アーティスト」という言葉を使っているのには意味があります。日本のゲーム業界が意識を変えなければいけないところで、海外では日本でいう「デザイナー」を「アーティスト」と呼んでいます。海外でいう「デザイナー」は「ゲームデザイナー」、つまり「企画・プランナー」を意味します。もしくはインターフェースデザイナーを意味します。
デザイナーとは本来「設計者」を意味するわけで、3Dのモデルを作ったり絵を描くのは「アーティスト」です。海外では一般的にデザイナーはアーティストより格上で扱われます。
この名称の齟齬が意識面で様々な問題を生んでいますので、今回からコラムではいわゆる日本のゲーム制作での「デザイナー」を「アーティスト」と呼んでいきたいと思います。慣れるとわかりやすくていろいろ便利なのです。
取り上げるスクリプトの内容
MELの基本は沢山の良書がありますので、ここで取り上げるのはMELの基本を終えて、ちょっとツール作り始めているテクニカルアーティスト見習い的な方から読んで楽しめる感じにしたいと思います。もちろん変なツールや、マニアックなやり方もご紹介します。
MayaではPythonも使用できます。こちらもかなり便利で、特に文字列を扱う時はMELより処理が簡単です。しかしPython自体の知識が事前にないと話が分からなくなりますので、基本的には取り上げないようにします。
「ノード」「オブジェクト」という言葉を混在させながら説明を行います。Maya内部では「オブジェクト」という言葉を使わず、正式には「ノード」と呼びます。でも、モデリングビューに出ているキャラクターとか、地形や壁や岩などは「ノード」と言われてもいまいちピンときません。わかりやすくするため、モデリングビューで見えているものは適当に「オブジェクト」と呼びますので、ご了承ください。
(オブジェクトはDAGノードのことです。この話もそのうち取り上げたいと思います)
というわけで、なにはともあれ早速始めていきましょう!
「ジョイントの数を調べるスクリプト」の必要性
ジョイントの数を調べる、これはゲーム制作で頻繁にあることです。一人のキャラにつき、何本までジョイントを使ってよいのか、決まりがあるなら自力で本数を数えるよりも、スクリプトで数えた方が簡単で早くて間違いがないわけです。
同じ作業を繰り返すのならスクリプトでツールにしてしまえば作業の反復が簡単にできてとても効率が上がります。さらに数え間違えたりというヒューマンエラーを抑制することができます。この点はとても重要です。「ツール化」すればヒューマンエラーを減らせて品質が向上するのです。ということはゲームの品質を上げようと思ったら、なるべくツールを取りそろえて作業するとよいわけです。ツール化の利点についてはこれから何度も同じことを言ってしまうかもしれませんが、それだけ重要な話とお考えください。
とりあえず実装してみましょう。いきなり出来上がったコードをお見せして解説するのもよいのですが、テクニカルアーティストを育てるためには考え方も知っておいていただくとよいと思いますので、順を追って説明していきます。
どうやってジョイント数を調べたものか…
MELを勉強された方なら、まず初めにlsを覚えたことでしょう。シーン内のノードをリストとして返すコマンドです。
ずらっとあらゆるノードの名前が表示されているのがわかります。
-slというフラグを足すと、選択しているオブジェクトをリストとして返すことができます。
今はメッシュとジョイントを選択しています。選択しているジョイントだけをリストとして返せれば、何とかなりそうな気がしませんか?選択対象のノード種類は-typeフラグで指定できます。
これで選択しているジョイントがきました。これの数を表示できればよいのです。確か配列の数はsizeコマンドで表示できたはずなので、こんな感じにしたらどうでしょうか。
お、数が表示されました。これで完成です!なんとも簡単なものですね。いままでちくちくジョイントの数を数えていたのがなんだったのか…とさみしくなります。
アーティストの反応を見てみよう!
さて無事作ったスクリプトをアーティストに使ってもらいましょう。
「今までジョイント数を確認するのが面倒で適当にコンバートしてたけど、これでわかりやすくなった!」
等とお褒めの言葉(?)をもらえると、テクニカルアーティスト冥利に尽きるのではないでしょうか。
しかし、アーティストの手元をよく見てください。
ジョイントを一つ一つ選択して、スクリプトを実行しているではありませんか。そう、選択したジョイントの数を表示するスクリプトなので、ジョイントをすべて選択しなければいけません。これでは何が良くなったのかわかりません。
不満も言わず「そういうもんかな」と思いながら作業をしているアーティストの様子を見て、不便そうなところを改善したツールに仕上げていく。それこそアーティストがツールを作る意味、テクニカルアーティストの価値なのです。
では次回、改善案を考えてみることにしましょう。実はこれが深みにはまる原因となります…。