今回はjoint orient編です。キャラクターをスキニング(バインド)する前にjointをきれいな状態にしなければなりません。そうしないと後々やっかいなこと(問題ない場合もあるのでリガーがいない現場によってはこのようなことを考慮しないところも‥)になるかもしれません。
また、リガーとコミュニケーションをとるうえで最低限知っておかないといけない部分でもあります。これを機会にスキニング(バインド)されたjointにIKとコントローラーをつけるだけのリギングから一歩先に進む準備をしましょう。
実際はこうやってJoint orientを揃えたjointをコピーしてコントローラー作成用のjointをつくり、それをスキニング(バインド)用jointと接続します。このことについては以前の記事を参照してください。接続用のツールも用意しました。
joint の決まりごと
上に書いたように全く考慮されない場合もありますが、本来はすべての人がこのルールは守るべきです。今はなぜこうすべきなのか理解できなくても後になって理解できることがあります(私がそうでした)。
回転の値はすべて0にする
「0にすれば最初のポーズに戻ることが出来ます」
当然ですがこれは重要です。
translate は X のみに数値が入っている状態(例外あり)にする
「translateはXだけに数値が入っている状態」にしなければなりません。
例外はjointが二股、三股と分かれる場合です。
scale はすべて1にする
言うまでもないこととは思いますが、
jointが細すぎる場合にスケールで解決しようとしないでください。
jointが細すぎる場合は「Display > Animation > joint Size…」で変更してください。
X軸はジョイントの先(子)の方向に向ける
「Display > Transform Display > Local Rotation Axes」で表示することができます。
この設定はデフォルトでそうなっているので特に気にしなくても大丈夫です。しかし、一番先(子がない)jointの場合はそうなっていません(子がないため)。
つま先などに配置する(後で使わないので消してしまうような)jointもデフォルトでX軸を先(子)の方向に向けてくれるので引いておいたほうが良いでしょう。先っぽのjoint orientを変更する場合はAttribute Editorを開いてjoint orientの数値をすべて「0」にすればOKです(この記事の下の方で説明しています)。リバースフットなどを仕込む場合はつま先の位置が決まっていたほうが良いからです。
joint の引き方
jointを引くにあたって上にあげたようなルールを守らなければならないのでいろいろ制約のある中でjointを引かなくてはならないので、なにかと気を使います。
そこで私はとりあえずは自由にjointを引いて(jointを掴んで移動するのもあり)しまうことをおすすめします。その時点でしっかりjointの場所をしっかり決めてください。
そうやってjointの位置が決まったらLocatorをMatch Translation(Modify > Match Transformations > Match Translation(コンストレインの場合と選択する順番が違うので注意))してそれぞれのjointの位置に合わせます。そして、そのjointをすべて消してしまって、そのLocatorにスナップ(「v」を押しながらでスナップできます)させながらあらたにjointを引き直します。
ポイントコンストレインでも構いませんがpointConstraintノードを消す手間がかかります。
この方法できれいな状態のjointを引くことが出来ます。もっと良い方法があるとは思いますが確実な方法です。
【無料】cometJointOrient と LMrigger(ジョイントオリエントを変更するツール)
Mayaの標準機能だけだとjoint orientを変更するのがかなり厄介なのでツールを利用することにします。
「cometJointOrient」という私が昔から使っているツールを紹[介します。
「www.comet-cartoons.com」こちらからダウンロードしてください。
「MEL Script Suite」の中にある「cometScript.zip」の中にある「cometJointOrient」というmelを使ってください。Maya6.01と書いてあることから相当古いものなので今はもっと良いものがあるかもしれませんが、慣れているのでこれを使って説明します。
※2024年2月追記
「cometJointOrient」の上位互換ツールがあります。
今後は「LMrigger」を使用することをおすすめします。
LMriggerの使い方
「LMrigger」はjoint orientを整える機能だけでなく、FKのコントロールリグを作成する機能もあります。
くわしくは「【Maya tools and scripts】LMriggerの使い方【MEL】」の記事を御覧ください。
cometJointOrientの使い方
まず、ダウンロードしたzipを解凍して「cometJointOrient」を「C:\Users\ユーザー名\Documents\maya\バージョン\scripts」の中に入れます(mayaを起動する前、すでに起動している場合は再起動)。ユーザー名とバージョンはそれぞれの環境にあわせて変えてください。
Mayaのコマンドラインが「MEL」になっていることを確認して、「cometJointOrient」と打ってEnterキーでWindowが立ち上がります(シェルフに入れたい場合は「cometJointOrient」をシェルフまで真ん中マウスボタンでドラッグしてください)。
Window が立ち上がったら上画像のように設定します。
Aim Axis は「X」(X軸がジョイントの先(子)の方向)
Up Axis は「Y」
World Up Dir: は「0.0」「1.0」「0.0」
Tweak:は「45.0」「0.0」「0.0」(X軸を45度(45度でなくてもわかりやすい角度でOKです)ずつ回転(下のボタンで+方向か-方向の回転を選べます))
cometJointOrient以外の選択
cometJointOrientはかなり古いツールであり、英語です。その点に懸念を抱かれている方はAmaterasuという多機能プラグインの中にJoint Editorというものがあり、それを使うのも良いでしょう。無料です。
「Mayaでコントローラー作成」という以前書いた記事でこのAmaterasuを紹介しました。
<2022/06/24追記>
「Amaterasu」は現状Maya2020までしか対応していません。
そのために現状では古いとは言えMELで作られたツールであるために互換性に気をつけなくてもよい「cometJointOrient」の使用をおすすめします。もちろん他に良いツールがあればそれを使用してください。
<2024/02/19追記>
これからは「cometJointOrient」の上位互換である「LMrigger」を使いましょう。
【有料】Zoo tools Pro の「JOINT TOOL WINDOW」と「PLANE ORIENT(JOINTS AND HIVE)」(ジョイントオリエントを変更するツール)
有料のツール(Zoo tools Pro)の中に含まれている「JOINT TOOL WINDOW」と「PLANE ORIENT(JOINTS AND HIVE)」を使用するとより調整がしやすくなります。
詳しくは以下の記事を御覧ください。
jointを引いてみる(jointの位置を動かさないように注意)
上の画像のような人間の左半身のジョイントを引きました。
ジョイントを引くときに位置を動かさないように注意してください。
上に書いたようにあらかじめLocatorで位置を決めておいてそこにスナップして引く方法が安全です。
ジョイントの名前は上の画像のようにつけました。
左半身なので腕と足のジョイントの名前には「L_」をつけてあります(後で反転コピーをする際にこのような名前にしておくと便利です)。
ルールに従って joint orient を調整する
これからjoint orientを調整します。
まず、先程の「comeJointOrient」を立ち上げて、上で説明したような設定にします。
ジョイントをすべて選択して左上の「Show Axis」ボタンを押すと選択したjointの「Local Rotation Axes」が表示されます。Mayaのメニューから表示させるよりこちらのほうが便利です。
これから書くルールに従ってjoint orientを調整します。
上で紹介したツールを使ってLocal Rotation AxesをX軸を回転させて調整します。
X軸はジョイントの先(子)の方向に向ける
これはデフォルトでそうなっているので特に気にしなくても大丈夫です。しかし、引いたjointの先端は子がないためにX軸の方向が違います。指の先端などで回転しない (後で消しても問題ない) jointの場合はそのままでも構いませんが、私の場合は見た目が美しくないので揃えてしまいましょう。
先端のjointを選択してAttribute Editorを開き、joint Orientの値をすべて「0」にすればOKです。
Z軸は同じ向きに揃える(Y軸との兼ね合いで絶対条件ではない)
Z軸の向きを揃えることによって、すべてのjointを選択して曲げるときに同じ方向に曲がります。
上の画像はRotate Yですが、Rotate Zも同じように曲がります。
Y軸は曲がる外側に向ける
膝と肘の場合は一方向にしか曲がらないのでわかりやすいです。曲がらない方(膝と肘の側)にY軸を向けます。指の第一関節と第二関節の場合も同じです。肘と膝だけの軸を変える必要はないでしょう。
わかりづらいのは背骨の場合です。この場合は背中側にY軸を向けるのが一般的です。
私はなぜこのようなルールなのか意味がわかりませんでした。しかし、Rotate Orderのことを考えてみると繋がりました。Y軸を曲がる方向の外側に向けるとRotate Zで回転することになります。Rotate Orderが「XYZ」の場合は最も強いZ軸を使用することになります。背骨の場合も背中を前屈する場合の回転軸がRotate Zになります。
Rotate Orderについての記事は以下を御覧ください。
Mirror Joints で反対側を作成する
Riggingメニューで、Skelton > Mirror Joints のオプションを上の画像のように設定します。
Mirror across: はYZにして、Mirror function をBehavior にします。
Search for: に「L_」をいれます。jointの名前をつけるときに左腕や左脚に当たる部分にこの「L_」をつけたのはこのためです。反転した側はReplace with:の「R_」に置き換えられるようになります。
反転したものはX軸が逆方向(親の方向)に向かっていますが、これで大丈夫です。
左右の脚を両方選択して左右対称に曲がるようになっているか確認します。腕についてもおなじように確認してください。
二股以上にjointが分岐する場合の注意点
上にも書いたように二股以上に分岐する場合はtranslate X以外のtranslateにも値が入ってしまいます。
これは仕方がありません。
問題は手首から指のjointを引いた場合。「親指、人差し指、中指、薬指、小指」といった順番にjointを引いた場合には、手首のjointのrotate axisは親指の方を向いてしまいます。
そこで、各々の指を手首からペアレントを解除してから、Attribute Editorを開いて手首のjoint orientの値をすべて「0」にします。
そして、再び各々の指を手首とペアレント化すればX軸が本来あるべききれいな方向に向きます。
二股以上に分かれているわけではありませんが、足首のrotate axisもそのままいっぺんにjointを引いてしまうと斜めになってしまいます。このように対処しましょう(この記事で使っている人体のjointでは対処されていませんが…)。
リグのコントローラーはどうすれば良いのか?
「Joint Orient」を整えた後はアニメーションをつけるためのコントローラーをつけなければなりません。
しかし、どうしたわけか、Mayaにはリグのコントローラーを作成する機能が標準ではついていません。
コントローラーの作り方については以下の記事に書きましたので、よろしかったら続けて読んでみてください。
今回の記事が気に入っていただけた場合、ぜひとも他の記事もチェックしてみてください。Mayaのリギングに関する記事をまとめたページです。
コメント