人気ブログランキング | 話題のタグを見る
2006年 03月 30日
FK・IKリグ その1
本日は、ひとつのスケルトンでFKとIKを同時に使えるリグのプロトタイプを作ってみて、その仕組みを説明してみようと思います。 リグの仕組み自体は結構簡単です。

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

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

では、4つのジョイントで下図のような腕のスケルトンを作りましょう。
FK・IKリグ その1_a0033035_20412354.jpg


次にそれぞれのジョイントにChest(胸)、UpperArm(上腕)、Elbow(肘)、Wrist(手首)と名前をつけます。 そしてElbowジョイントのX軸とZ軸の回転をロックしてY軸の回転だけが出来るように設定します。
FK・IKリグ その1_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スクリプトをダウンロードすると、色々な種類のコントローラーを簡単に作ることができて便利です。
FK・IKリグ その1_a0033035_5562158.jpg

FK・IKリグ その1_a0033035_23362957.jpgそして今度はikHandle1ノードをWristIKControllerノードにペアレントし、そのWristIKControllerノードをElbowControllerノードに、またEblowControllerノードとPoleVectorノードをUpperArmControllerにペアレントします。 

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

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

FK・IKリグ その1_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の切り替えができるようにしてみたいと思います。
# 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スケルトンの位置をお互いに合わせると、モーション制作の作業がだいぶ楽になるのでお勧めです。
FK・IKリグ 序章_a0033035_1834357.jpg

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

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

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


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

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

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

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

# by cgtak | 2006-03-02 16:14 | モデリング(Prad Bitt編)
2006年 02月 25日
プラッド・ビッドさん 11~13日目
プラッド・ビッドさん 11~13日目_a0033035_14143299.jpg


2~3日前より再開したブレンド・シェープ作り。
今日一応全部のシェープを作り終えました。

時間があれば明日にでも
フェイシャルのコントロール作りに入りたい。

まだモデルのテクスチャーを描いてないので、
このフェイシャル設定が全部終わったら
取り組もうと思っていますが、
ボーンにスキニングをした後に
テクスチャー貼りをしたら
ヒストリーが出来て
モデルが重くなってしまうかな。

一応UVは全部設定し終わっているけれど...

# by cgtak | 2006-02-25 14:21 | モデリング(Prad Bitt編)
2006年 01月 20日
プラッド・ビットさん 10日目
プラッド・ビットさん 10日目_a0033035_14361934.jpg


今日は午前中に靴のスキニングを終えて、
午後はやっと待望の頭部のブレンド・シェープ作りに入った。

まずは顎を引いたときのモデルの崩れを治すためのシェープ(上図の中段)を作り
エクスプレッションでHeadジョイントと関連付けをした。
これで、頭を上下したときに顎の下の部分が潰れてしまうのを
防ぐことができます。

その後に眉毛周りのブレンド・シェープを7つほど(上図下段)作り、
その次に口を大きく開けたシェープ(上図最上段)を作ったところで
今日は終わりでした。 
(テクスチャーを貼ってないと、シェープ同士の区別があまり良くつかないですね。)

明日は会社の仕事で、
次のプロジェクトのR&Dを少ししなくてはいけないみたいなので、
このブレンド・シェープ作りの続きができるかどうか、
ちょっと不安。

# by cgtak | 2006-01-20 14:55 | モデリング(Prad Bitt編)