「背骨のセットアップなんてものはすべてFKでええじゃないか」という(アニメーターの)意見があることは存じています。しかも、そのような意見が少なくないことも。
リグを作る立場からすれば楽なので良いのですが(退屈だと思われる方もいらっしゃるかもしれませんが‥)、海外のリグを触ってみると様々なギミック(リバースフットには感動しました)に興味をもって自分でもそのようなものを作ってみたいと思います。コントローラーすらなくIKハンドルにキーを打っていた時期もあるそんな海外のリグに憧れを抱いていた私が「いいな」と思った背骨のセットアップ方法を解説します。
たかが背骨と思われるかもしれませんが、このセットアップではこのブログのリグについての記事の集大成と言えるほど今までに解説した手法をほぼすべて使用したものになります。つまり過去最高に複雑な内容になります。そして手順もたくさんあるので完成まで長いです。今までのリグの記事はこの記事を書くために存在すると言っても過言ではないです。よって過去の記事の内容をだいたい理解してから試してみてください。
海外リグかぶれの私ですが、この背骨のセットアップは『マヤ道!!』の著者であるEske Yoshinob氏の出版記念のセミナー(だったと記憶しています)でこの背骨のセットアップ方法を知ったのが最初です。しかし、その時の大事なノートが見つからずセットアップ方法がわからなくなってしまいました。が、運良く英語で同じようなことを解説しているものを発見することができました。したがってそれら2つの内容を参考にして自分なりに再構築したものです。
リグ用のjointとスキニング用のjointを用意する
スキニング用のjointとリグ用のjointをわけなければいけないと「MayaでRigging(Basic編)」に書きました。
しかし、今までの記事ではリグ用のjointにあれこれするとこうなるといった説明が多かったので、今回はスキニング用のjointを使用してシーンの階層構造までしっかり解説します。
jointを原点から上(Y方向)に向かって6つまっすぐに引きます。
そしてjoint orientを子の方向(Y方向)にXが向くようにし、背中側にYが向くようにします。
joint orientの揃え方は以前の記事を参考にしてください。
リグ用のjointをスキニング用のjointに接続する
そのjointをDuplicateして上の画像のようにグループわけします。
「joint_Grp」というグループを作ります。この中にはjointが入ります。
その中に「skin_joint」と「rig_joint」というグループを作ります。
「skin_joint」グループのほうは実際にスキニングするjointを入れます。
「rig_joint」とその中にあるjointを「skin_joint」とその中にあるjointにそれぞれ「tx」「ty」「tz」「rx」「ry」「rz」「sx」「sy」「sz」のアトリビュートを接続します。
接続の仕方はNodeEditorやConnectionEditorを使用しても良いですが、数が多いので私が作成したスクリプトを使用すると簡単に接続することができます。
私のスクリプトを使用する場合は、「rig_joint」とその中にあるjointをすべて選択して「get A」ボタンを押し、「skin_joint」とその中にあるjointをすべて選択して「get B」ボタンを押します。そして接続したいアトリビュートにチェックがついていることを確認して「connect」を押せば完了です。
スキニング用のjointにスキニングし、リグ用のjointにspline_IK(IK_spline)を引く
「rig_joint」グループのほうにはリグを作るためのjointをいれて、「spine_01_Jnt」から「spine_06_Jnt」にspline_IK(IK_spline)を引きます。
spline_IK(IK_spline)については過去の記事を参考にしてください。
「torso_Geo」というcylinderを作成して「skin_joint」グループの中の「spine_skin_**_Jnt」すべて(先端を除く)にスキニングします。
そして「geo_Grp」というグループを作成してその中に入れます。ここはスキニングしたジオメトリを入れるところにします。
カーブにjointをBindする
「dnt_touch_Grp」を作ります。ここにはアニメーターに触られてはいけないものを入れます。spline_IK(IK_spline)のIKハンドルとカーブをこの中にいれます。
「rig_joint」の中の「spine_01_Jnt」をDuplicateすると階層ごとコピーされるので、そのコピーされた一番根本の「spine_01_Jnt」と一番先端の「spine_06_Jnt」をこの「dnt_touch_Grp」の中に入れます。
上の画像ではこの2つのjointのサイズを大きくして見やすくしています。
上のjointを「chest_bind_Jnt」、下のjointを「hip_bind_Jnt」とリネームします。
そしてその2つのjointをspline_IK(IK_spline)でできたカーブにbind(スキニング)します。
この部分がこの背骨のセットアップの大きなポイントです。
はじめてこの手法を知ったときは「その発想はなかった‥」と感動しました(感動してばかり(笑))。
ちなみにこれらの2つのjointはコピーしなくてもスナップして作成しても良いですが、その場合はjoint orientを背骨のjointと同じにしてください。
spline_IK(IK_spline)のツイストを制御する
spline_IK(IK_spline)のツイストの制御の方法は以前の記事で紹介しました。
spline_IK(IK_spline)のAttribute Editorを開いて上の画像のように設定してください。
World Up Type: Object Rotating Up(Start/End)
Forward Axis: Positive X
Up Axis: Positive Y
World Up Object: 「hip_bind_Jnt」
World Up Object 2: 「chest_bind_Jnt」
joint orientを綺麗に揃えているのでほぼデフォルトの設定でいけます(Xが子の方向を向いていて、Yが背中側を向いているため)。
「hip_bind_Jnt」と「chest_bind_Jnt」にコントローラーを作成する
先程作った2つのjointを操作すれば背骨を制御できるようになりました。
そこでその2つのjointを動かすためのコントローラーを作成します。
コントローラーの作成方法は過去の記事を参照してください。
「ctrl_Grp」という新しいグループを作成します。コントローラーはこの中に入れます。
ここでコントローラーの回転軸とjointの回転軸が違うためrotate orderを調整する必要があります。
rotate orderについては過去の記事を参照してください。
上の画像を見比べるとわかるようにjointの回転軸とコントローラーの回転軸が違います。jointはXが上を向いている状態で、コントローラーはYが上を向いている状態です。
jointのrotate orderは「XYZ」です。この回転軸の違いを考慮してコントローラーのrotate orderを考えなければなりません。
jointのX軸に対応するのはコントローラーのY軸、YはZ、ZはXといった具合にjointの回転軸と同じものを表にいれていくと以下のようになります。
jointのrotate order | X | Y | Z |
コントローラーのrotate order | Y | Z | X |
このようになるのでコントローラーのjoint orientを「YZX」にします。
2つのコントローラーを両方ともこのように設定します。
次につづく(まだまだ先は長い‥)
とりあえず背骨のSpline_IK(IK_spline)の部分はあるていど形になったので今回はここまでです。
今回の記事が気に入っていただけた場合、ぜひとも他の記事もチェックしてみてください。Mayaのリギングに関する記事をまとめたページです。
コメント