<   2006年 03月 ( 3 )   > この月の画像一覧
2006年 03月 30日
FK・IKリグ その1
本日は、ひとつのスケルトンでFKとIKを同時に使えるリグのプロトタイプを作ってみて、その仕組みを説明してみようと思います。 リグの仕組み自体は結構簡単です。

a0033035_20433841.jpg
まず始めに Animation> Skeleton> Joint ToolのオプションボックスからTool Settingのウィンドウを開いて、Orientationの選択肢の中から「None」を選びます。

None」を選ぶことによって、それ以降に新しく作られるジョイントの回転軸が全てグローバル・オリエンテーションと同じ方向に設定されます。(下図参照)
(この設定は、後にFKやIKのコントローラーと関連付けるときに必要となります。)

では、4つのジョイントで下図のような腕のスケルトンを作りましょう。
a0033035_20412354.jpg


次にそれぞれのジョイントにChest(胸)、UpperArm(上腕)、Elbow(肘)、Wrist(手首)と名前をつけます。 そしてElbowジョイントのX軸とZ軸の回転をロックしてY軸の回転だけが出来るように設定します。
a0033035_20515995.jpg

その後UpperArmジョイントからWristジョイントにかけてRPSolverのIKを加え、同時にFKとIKのコントローラーを下図のように加えます。 それぞれのコントローラーは移動や縮小などをして位置と大きさを調節した後、Modify> Freeze Transformationをしてそれぞれのアトリビュートが0になるように設定することを忘れないでください。 そしてElbowControllerのX軸とZ軸の回転もElbowジョイントと同じくロックして動かないようにしておきます。 

ちなみに下の図のようなコントローラーを作るには、Rigging101のサイトの「Free Stuff」というページの下から4つめにあるrig101 Wire ControllersというMelスクリプトをダウンロードすると、色々な種類のコントローラーを簡単に作ることができて便利です。
a0033035_5562158.jpg

a0033035_23362957.jpgそして今度はikHandle1ノードをWristIKControllerノードにペアレントし、そのWristIKControllerノードをElbowControllerノードに、またEblowControllerノードとPoleVectorノードをUpperArmControllerにペアレントします。 

そして最後に、UpperArmControllerノードをChestジョイントにペアレントして、FKとIKを両方同時に使えるプロトタイプ・リグの第一段階が完成です。(右図参照) 

UpperArmControllerElbowControllerを回転させるとFKの要領で腕のスケルトンを動かすことができ、WristIKControllerPoleVectorを使うとIKの要領で同じ腕のスケルトンを動かすことができます。
 

a0033035_2226190.jpgところが、ここでひとつ問題が生じます。 左図を見ると一目瞭然ですが、WristIKControllerを使ってIKで腕のスケルトンを動かすと、階層の構造上WristIKControllerの親であるElbowControllerElbowジョイントの動きに付随しません。 その上UpperArmControllerUpperArmジョイントの回転値、そしてElbowControllerElbowジョイントの回転値も異なってしまっています。

そこでMELスクリプトを使って以下のことをする必要がでてきます。

1)UpperArmジョイントのXYZ回転値をUpperArmControllerのXYZ回転値にコピーする
// store the uppper arm joint xyz rotation
float $UpperArmJointRotationXYZ[] = `getAttr UpperArm.rotate`;

// apply the upper arm xyz rotation to the upper arm controller
setAttr UpperArmController.rotate $UpperArmJointRotationXYZ[0] $UpperArmJointRotationXYZ[1] $UpperArmJointRotationXYZ[2];

2)ElbowジョイントのY軸の回転値をElbowControllerのY軸の回転値にコピーする。
// get the y rotation from the elbow joint
float $ElbowJointRotationY = `getAttr Elbow.rotateY`;

// apply the elbow joint y rotation to the controller y rotation
setAttr ElbowController.rotateY $ElbowJointRotationY;

3)PoleVectorのXYZ移動値をゼロにする。
// zero out the pole vector's trans
setAttr "PoleVector.translateX" 0;
setAttr "PoleVector.translateY" 0;
setAttr "PoleVector.translateZ" 0;

4)WristIKControllerのXYZの移動値をゼロにする。
// zero out the wrist controller's trans
setAttr "WristIKController.translateX" 0;
setAttr "WristIKController.translateY" 0;
setAttr "WristIKController.translateZ" 0;

5)UpperArmControllerのXYZ軸の回転値と、ElbowControllerのY軸の回転値にKeyを打つ。
// set key to fk controllers of upper arm and elbow
setKeyframe "ElbowController.ry";
setKeyframe "UpperArmController.rx";
setKeyframe "UpperArmController.ry";
setKeyframe "UpperArmController.rz";

完成したプロトタイプ・リグと専用のMELスクリプトは、下のリンクから(PCの場合)右マウスクリックで”対象を名前を付けて保存”を選ぶとダウンロードできます。 MELと一緒に使い具合を試してみてください。

FKIKArm.ma (Maya6.5)
snapandkeyFkarm.mel

次回はこのプロトタイプ・リグの第二段階として、Chestジョイントが動いても手首の位置が固定されるWristStickyIKControllerをリグに加え、それに合わせてMELも改良してStickyIKNon-StickyIKの切り替えができるようにしてみたいと思います。
[PR]
by cgtak | 2006-03-30 00:10 | Mayaチュートリアル
2006年 03月 27日
FK・IKリグ 序章
テクスチャー作業を相変わらず放って置いたままですが、キャラのリグ開発を開始。

リグ開発にあたって一番に思いつくのがFK・IKスイッチのシステムの構築ですが、一般的な3種類のスケルトン(FKスケルトン、IKスケルトン、モデルがスキニングされた本スケルトン)の組み合わせを使うと、FKとIKを混ぜてモーションを作ったときに、FKとIKの切り替え時にスケルトンの位置を合わせたり、スケルトン同士を補間させたりと手間がかかります。 

その手間を解消するために、Highend3Dのサイトからダウンロードできる「jsIkFkSnap.mel」のようなMELスクリプトを使ってIKまたはFKスケルトンの位置をお互いに合わせると、モーション制作の作業がだいぶ楽になるのでお勧めです。
a0033035_1834357.jpg

しかし今回は、もうちょっと違った試みをしてみようと思い、ひとつのスケルトンでFKとIKを同時に使えるように設定してみます。

この新しい方法も、実は専用のMELスクリプトを使いながらモーション付けすることになるのですが、3種類のスケルトンを使う方法とは別の独特な利点もあると思うので、今回のプラッド・ピッドさんのキャラクターで試してみることにしました。

(眠くなってしまったので、)基本的な設定の説明もかねたプロトタイプ・リグの作り方、及びそれに付随するプロトタイプ・MELスクリプトの詳細は次回のブログ書き込みにします。 失礼。
[PR]
by cgtak | 2006-03-27 19:10 | Mayaチュートリアル
2006年 03月 02日
プラッド・ビットさん 14日目
a0033035_1645546.jpg


仕事のR&Dをしつつ時間を見つけて、
今日やっとフェイシャルのコントローラー設置まで
たどり着けました。

男の子のフェイシャルを作った時と比べると
ブレンド・シェープの形があまり気に入っていないので
後でもう少し修正するかもしれません。

本当はGifファイルにして
動画をブログに載せたかったのですが、
そこまでする時間さえもありませんでした。

さて次はいつ更新できることやら...

[PR]
by cgtak | 2006-03-02 16:14 | モデリング(Prad Bitt編)