長年Mayaを使ってきて疑問に思うことがあります。
それは「なぜこんな簡単な(技術的に難しいわけでもない)ことが標準機能として搭載されていないのか?」ということです。
その筆頭格といえるのが今回紹介する「リグのコントローラーを作成する」機能です。
このことこそがMayaでRiggingの敷居を高くしている最たるものだと思います。
例えばsoftimage(XSI)ではNull(MayaでいうLocatorのようなもの)のシェイプを立方体や球、矢印などのいくつかの形状に変更することが出来ました。いずれMayaにも‥と期待していた時期もありましたが、もう諦めました(笑)。とはいえ、ネットで探せばコントローラーを作成するスクリプトを(いくつも)見つけることが出来るので問題ないと言えないこともありません。
おそらくMaya側の言い分としては「Empty Groupというtransform nodeだけのものを用意してあるので、そこにユーザーが独自に作ったshape nodeを使って自由にコントローラーを作ってつかってください。」ということなのでしょう。長年Mayaをつかってきた今となってはその言い分も理解できなくはないですが、しかしながら面倒で使い勝手が悪いことには事実です。
そこでこの記事では、コントローラーを作るスクリプトを紹介するだけではなく、ユーザーが独自にコントローラーを作成する方法を解説します。自分でコントローラーを作成できるようになれば、Mayaをより理解することにもなりますし、自分でコントローラーを作成するツールを作ることもできるようになるからです。
shape nodeをまとめる方法
リグのコントローラーにはNURBS Curveを使います。Create > NURBS Primitive > Circle で作成される一本のカーブで作成されたものは問題なくそのままコントローラーとして使用できます。しかし、 Create > NURBS Primitive > Square で作成されたものは4本のカーブをグループにまとめたものが作成されるのでこのままでは利用できません(カーブを選択しても1辺しか選択されません)。そこで1辺を選択してもひとつのNURBS Curveとして選択されるようにしなければなりません。つまり、ひとつのTransform nodeに複数のShape nodeをまとめなければなりません。
OutlinerでShape nodeを表示できるようにする

OutlinerのDisplayメニューでShapeにチェックを入れます。これでTransform nodeとShape nodeが表示されるようになります。
コントローラーのもとになるカーブを作成
今回はnurbs sphereを作成(Create > NURBS Primitive > Sphere)してそれをコントローラーにします。出来たnuurbs sphereを選択してコントローラーになるNURBSカーブを複製します( (menuをModelingに切り替えて) Curves > Duplicate Surface Curves) 。
そしてnurbs sphereは必要なくなったので消します。
カーブをまとめるためのEmpty Groupを作成
Create > EmptyGroupでnull(空グループ)を作成します。
melコマンドでnullにカーブをまとめます
念の為すべてのカーブのTransform nodeにModify > Freeze Transformationをかけておきます。

上の画像のようにコントローラーにしたいカーブのシェイプノードだけを選択し、最後にまとめるためのnull(トランスフォームノード)を選択します。
以下のmelコマンドを左下のMELという欄に入力して実行します。-rはrelative、-sはshapeです。詳しくは公式のヘルプを御覧ください。
parent -r -s
mel版よりも記述する文字数は多いですが、「今更melは‥」という方はPython(maya.cmds)版をご利用ください。 コマンド入力欄がPythonになっていることを確認して以下のよう入力してください。
maya.cmds.parent(r=True, s=True)

上の画像のように残ったゴミは消します。

ひとつのTransform nodeに複数のカーブのShape nodeがあるのがわかります。
ここまで書いておいて言うのもあれですが、シェイプノードだけを選択する場合はHypergraphのほうが楽でした。Hypergraph HierarchyのOption > DisplayからShape Nodesにチェックを入れてください。
これでどのようなコントローラーも作成できるようになりました。テキストを使ったものなどいろいろ作ってみてください。
ボックスコントローラーを作成する場合
上に書いたShape nodeをまとめる方法でどのようなコントローラーも作成可能ですが、よく使うボックス型のコントローラーを作成する場合にはもう少しスマート(というほどのことではありませんが)な方法があります。

上のShape nodeをまとめる方法(Create > NURBS Primitives > Cube で作成したnurbsCubeのShapeをまとめた場合)だと上の画像で赤字で囲ったようにShapeの数が多すぎになってしまいます。見た目としてとても美しくないものが出来上がってしまいました。
しかし、polygon cubeを作成してその頂点にEPカーブ(1 Linear)をcubeの頂点にスナップさせて一筆書きでカーブを作成すれば当然のことながらShapeは1つで済みます。
このようにcubeを一筆書きすると同じところを通らなければなりません。もしかしたら、線(nurbsカーブ)が太くなったり、2本になったりしないかと心配する人がいるかもしれませんが、その心配はありません。
そんなことをしなくても‥
非常にタイムリーなことに、そのような面倒なことをしなくても3D人さんのブログに無料スクリプトが紹介されていました。これを使えば万事解決ですが、Transform nodeとShape nodeなど、Mayaを使う上で重要な仕組みを理解できるので一度は自分自身で作成することをおすすめします。
実作業では
実作業ではコントローラーをいちいち作っていては手間がかかってしまうので、コントローラーを作成するスクリプトを利用することをおすすめします。
mocoさんが「rig101 Wire Controllers(MEL SCRIPTSの「rig101 Wire Controllers」をダウンロードしてください。)」を紹介されています。
追記(2022/06/17)
残念ながら上のサイトは閉鎖されてしまいました。
かわりに「MOX-MOTION」さんの「MoxRigController」をご紹介させていただきます。
もともとは以前紹介した「rig101 Wire Controllers」がもとになっているようです。
コントローラーを作成するスクリプトは他にもいろいろあるので探してみると面白いかもしれません。
「Amaterasu」について(2020/06/21追記)
「Amaterasu」は素晴らしいツールですが、2020年6月現在Maya2020までのバージョンまでしかないため今までの記載を一部修正しました。
MayaがPython3へ移行したために今までのツールが使えない場面が増えています。そう考えると時代遅れだと思われていたMELでのツール作成というものは互換性を気にしなくてもよいのだと改めて再認識させられました。
「海外のサイトだと英語が‥」という方も多いかと思います。「やはり国産のもののほうが安心」という方はAmaterasuというMayaのプラグインがおすすめです。
Amaterasuは以前はBorndigitalさんでサブスクリプション契約をしていないと使用できなかったのですが、今は無料で公開されています(すばらしい!!)。
Amaterasuはコントローラーを作成する機能以外にも無料とは思えないほどの機能が盛りだくさんです。使い方ももちろん日本語で書かれているので安心です。
Amaterasuのような高機能プラグインの紹介の後に書くのもあれですが、スクリプトの勉強をしている人はコントローラーを作るツールを作ると勉強になると思います。Windowの作り方や、ボタンを押したときにコントローラーが作成されるようにするなど、勉強になる要素ばかりです。向学心のある方はぜひ挑戦してみてください。

今回の記事が気に入っていただけた場合、ぜひとも他の記事もチェックしてみてください。Mayaのリギングに関する記事をまとめたページです。
コメント