カテゴリ:Mayaチュートリアル( 6 )
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チュートリアル
2004年 11月 10日
モデルのディスプレイ・オプションの設定の仕方について
Mayaを始めたばかりという方から、「Low-Polyモデルでモーション付けをしてSub-D(またはHi-Res Poly)モデルでレンダリングするというのはどういうことか」という質問を新たにいただきました。

Sub-DのモデルやHi-Resのポリゴンモデルなどだと、モデルのデータ量が多いためにモーション制作時などにMaya(またはパソコン)の反応が遅くなって作業がしずらくなるために、レンダリング用とは別にデータ量を軽くした低解像度のポリゴンモデルを使うわけですが、以前、アメリカの友達にも「Sub-Dとポリゴンモデルのリグはどう関連付けているのか」という質問をされて英語版のブログの方で自分の設定の説明をしたことがあるので、日本語のブログでもそれと似た説明を載せておこうと思いました。

ちなみに、こういった設定はやり方が色々とあって個人差があると思うので、ここに掲載する例もその中のひとつであると思ってください (と、言い訳をしておく)。

<モデルのディスプレイ・オプションの設定の仕方>


自分の場合は、初めSub-Dでキャラモデリングをしたあと、そのSub-Dモデルを複製して、MayaのメニューModify>Convert>Subdiv to Polygonsのオプションボックスを開いて、下図のようにレベル1ぐらいの解像度でポリゴンモデルを作りました。

a0033035_16445954.jpg

a0033035_17133380.jpgこのときに、Layerを使ってSub-Dモデルとポリゴンモデルを分けておくと、分割して表示できるので便利です。(実は、Layerを使うだけでもモデル間のVisibility設定としては充分なんですが、リグの一部としてモデルのVisibility切り替えを設定して置くのも、設定が整理されてそれなりに便利なときもあるような、ないような…)

ちなみに目玉だけ別レイヤーにしてあるのは、Sub-DとLow-Polyのモデルで共有しているからです。

そしてジョイントを設置し人型のボーン階層(スケルトン)を作った後で、Sub-Dモデルはスムース・バインド(またはRigid・Bindとラティスなど)でスキニングして、ポリゴンモデルは、(データ量を軽くしてモーション付けがしやすくなるように、)細かいパーツに切り分けて、それぞれ適したジョイントに(例えば前腕はElbowジョイントに、といった感じで)ペアレントします。 (パーツの数が多くて面倒くさいけど。)
a0033035_1714197.jpg


a0033035_16241039.jpgそしてIKなどのリグ設定を一通りしたあと、モデル自体や、モーション製作用に使う他のコントローラーの表示・非表示をコントロールできるVisibility Controller(右図で足元に緑色でハイライトされているコントローラー)を付け加えます。

ちなみにRigging101というサイトで、Free Stuffというページの下の方からrig101 Wire ControllersというMELをダウンロードできるのですが、それを使うとワイヤーで出来た色々なコントロール・オブジェクトが簡単に作ることができるので、お薦めですよ。

さて、話は戻りますが、Visibility Controllerには、不必要なアトリビュートチャンネルをWindow>General Editor>Channnel ControlからNon Keyableにして隠し、必要なチャンネルをModify>Add Attributeから付け加えています。

a0033035_17314035.jpgちなみにAdd Attributeツールで選択できるチャンネルのデータタイプの説明をすると…
Vector: 3つのFloatチャンネルを加えます。 一般的なXYZ座標のチャンネルを作りたいときに便利。
Integer: 0、1、-1など整数のみをインプットできるチャンネルをひとつ加えます。 ディスプレイオプションのサブメニューとして、Sub-DのディスプレイレベルやPolygonのスムース機能のサブディビジョンレベル表示に関連付けると便利。
String: データ入力用にファイル名などの英数字を受け付けるチャンネルを加える(らしいが、使ったことが無いので詳細不明。 すまん、見逃しておくれ)。
Float: 小数点以下を含む数値を入力できるチャンネルをひとつ加えます。 Set・Driven・Keyを使った指のリグを作る時などに良く使う。
Boolean: 1または0を入力することによって、On/Off設定が出来るチャンネルをひとつ加えます。 単純なVisibilityのOn・Off設定用に便利。
a0033035_17224093.jpgEnum: ドロップダウンリストが作れるアトリビュート・チャンネルをひとつ加える。 自分はこれでポリゴン、Sub-Dなどのドロップダウンリストをつくって、異なるモデル間のVisibility設定に使いました。(右図参照)

a0033035_20221662.jpg
そして右図が、Visibilityコントローラに付けたチャンネルの全てです。

モデルのVisibilityだけでなく、IKやFKのコントローラー、そしてFurやHairの表示・非表示も(というか、それらがメインですが…)ここから全て設定できるようになっています。

後にモーション制作用のインターフェース(GUI)も別に作ったので、今ではコントロール・オブジェクトのVisibilityをここで触る必要性はあまりなくなったのですが、ここに全てのコントロールを集約させて整理しておいたおかげで、MEL初心者の自分でもGUIを作る時にMELが書きやすかったです。

ちなみにそれぞれのオブジェクトのVisibilityチャンネルとの関連付けは、Set・Driven・Key、またはConnection Editorをつかいました。(下図参照)
a0033035_20254160.jpg

まとめると、この男の子のリグでは、Sub-DのモデルもLow-Polyモデルも同じスケルトンを使っていて、Visibility ControllerのGeometoryチャンネルからNone(スケルトンだけ)、Polygon(Low-Polyモデルだけ)、そしてSub-D(Sub-Dモデルだけ)の選択肢を選ぶことが出来るようにしています。(下図参照)
a0033035_223130100.jpg


実は現在では、全てのオブジェクトが一緒になっているために男の子のキャラのファイルサイズが大きくなりすぎて(17.3MB)ロード時間が長く掛かるようになってしまいました。

その解決法として、Sub-Dのモデルを消したLow-Polyだけのリグファイルを別に保存して、Mayaのリファレンス機能(File>Create Reference)を使ってそのLow-Poly版をSceneファイルに読み込んでモーションを作り、レンダリング時にリファレンスをSub-DとLow-Polyモデルが一体になっている元のファイルに切り替えるようにしています。

と、こんな感じで作業していますが、なんだか今日のブログは、今までの作業のおさらいのようになってしまいましたね。
[PR]
by cgtak | 2004-11-10 22:10 | Mayaチュートリアル
2004年 11月 08日
Reverse Foot Lockについて
Maya以外のソフトをお使いの方で、Reverse Foot Lockについてご存じない方がおられるようなので、自分のリグ作業を理解していただく為にも、ここで簡単な解説を記しておきます。 
ちなみにこの設定は、Mayaの特別なツールを使って作るわけではないので、MaxやLightWaveでも作ることは可能だと思います。


<Reverse Foot Lock の 設定 の 仕方>


a0033035_18341874.jpg


1) ますは、右図のようにHip, Knee, Ankle, Foot, Toeの5つのジョイントによって足のボーンを作ります。

a0033035_2113384.jpg2) 次に、HipからAnkleにかけてRPsolverタイプのIKを引き、
AnkleからFoot、そしてFootからToeまではSCsolverタイプのIkを引き全部で3つのIKを設置します。

このときIKは3つともStickyオプションをオンにして、キーを打って無くてもIKが一定の位置に張り付くようにします。(下図参照)  
こういった設定はMaxやLightWaveにもあるのかな?
a0033035_19465147.jpg

最初のIKにRPsolverを使うのは、膝の向きをコントロールするPole Vector(PV)コントローラーを、あとで設定するためです。 

ちなみにIKのタイプでRPとはRotatePlaneの略で、SCとはSigleChainの略です。
RPとSCのsolverの違いは、SCのエンドエフェクターがIKハンドルの移動値と回転値の両方から影響を受けるのに対し、RPのエンドエフェクターはIkハンドルの移動値だけに影響を受けるというところです。 
その分RPタイプのIKは、Pole Vectorによってエンドエフェクターの回転を独自にコントロールできるので、膝と足の向きを別々にすることが可能になります。


a0033035_1954518.jpg3)PV用のコントローラーを作り、それにRPタイプのIKからPVをコンストレインします。

これで、右図では白い三角のコントローラーを動かすことによって、膝の向きを自由に変える事が出来るようになりました。

Pole Vectorの設定はReverse Foot Lockの設定とは直接関係ないのですが、脚のリグ設定をするときの定番ですので、作業の進行上、ここで一緒に紹介しました。

a0033035_2055065.jpg4)次にかかとの辺りから、右図の順番で新しくジョイントを設置して、Reverse Foot Lock用のボーンを設置します。
ちなみにジョイントの2はToeジョイント、ジョイントの3はFootジョイント、そしてジョイントの4はAnkleジョイントにスナップさせて位置が同じになるようにします。

a0033035_20192085.jpg5) あとは、RPタイプのIKを4番のジョイント、AnkleからFootに引いたSCタイプのIKを3番のジョイント、そしてFootからToeに引いた2つめのSCタイプのIKを2番のジョイントにペアレントすれば完成です。

1番のジョイントを選択して移動、または回転させると、足が付随して動きます。 さらに2番や3番のジョイントを回転させると、爪先立ちの動きをするので、歩きなどのモーションを作るときに便利です。 エクスプレッションなどを使って2番や3番のジョイントをAnkleジョイントなど他のジョイントの動きと関連付けて動かすようにすると、以前男の子のキャラに付けたような足の設定を作ることも可能になります。

Reverse Foot Lockの設定は、普通の人型キャラでも十分使えますが、特にかかとの上がった状態が常である四足動物などに使うと、足のモーションが格段に付けやすくなります。 

ちなみにMaya5で作ったサンプルファイル(58KB)を用意しましたので、興味のある方は、下のイメージを(PCの場合)マウスで右クリックしてダウンロードしてください。
右クリックで「対象を保存」オプションを選んでダウンロードしてください。

[PR]
by cgtak | 2004-11-08 21:58 | Mayaチュートリアル
2004年 10月 08日
チュートリアル本について
先日、参考にしているMELのチュートリアル本をライフログで紹介したので、今回の自主制作で参考にしている他のチュートリアル本も、ライフログで全部紹介しておきます。

すべて洋書なのですが、Maya関係のチュートリアル本としてはどれも定番になっているようなものばかりなので、英語の判る方にはお薦めです。

MEL Scripting…」はMELを学ぶ参考に、「Maya Character Animation」はキャラ・モデリングを主としたMayaの総合書ですが主にSub-Dモデリングの参考に、そして「Stop Staring」は最新の顔のリグ設定術を学ぶために使っています。

ちなみに「Maya Character Animation」は最近改訂版が出たので(ライフログでは改訂版を紹介しています)、古い方を使っている自分は「何か新しい裏テクなど紹介されているのかな?」と、新刊を持っている人がちょっとうらやましく思えます。
[PR]
by cgtak | 2004-10-08 16:32 | Mayaチュートリアル
2004年 08月 16日
ちょっと、ひと息…
相変わらず髪の毛の修正をしていますが、ついでに眉毛とマツ毛もガンガン作っちゃうことにしました。  が、同じ顔のレンダー画像を連日のようにさらしていても見ている人は面白くないと思うので、今日は次にモデリングする犬キャラの参考として、ネットで見つけたチュートリアルサイトを紹介します。  下の画像をクリックすると、別ウインドウでチュートリアルサイトに行けます。  Divxでエンコードされた4つのビデオが無料でダウンロードできるようになっていました。

犬のモデリングのチュートリアル

なんか、このチュートリアルで使われている下絵が、自分のデザインした犬のキャラに結構似ているので、このまま真似て作れば使えちゃいそうですが、4つあるチュートリアルビデオを全部見た後で、幾つか気になったこともありました。

ビデオでは最初Nurbsの球体や円柱を変形させて、頭部を含めた各パーツの原型部分を作り、それらのパーツを一旦ポリゴンに変換して、COMBINEツールでひとつのオブジェクトにつなげた後、Sub-Dに変換してさらに細かいディテールを作り込むという作業の流れでした。

そこで作られた頭部、特に目の周りなどの部分は、そのまま真似るにはちょっと作りがシンプルすぎるので、自分の場合はやはり男の子の頭部を作ったときと同じように、最初からSub-Dで顔を含めた頭部全般を作り込むほうがよさそうでした。

もうひとつ気になったのは、チュートリアルの作り方だと後ろ足とお尻の辺りの造形にあまり一体感を感じないので動かしたときのディフォーメーションが上手くいかないのではないかということ。  まぁ、一度このチュートリアルのように作ってから後で形を整えることも出来るんでしょうが、 いっそのこと最初から鳥のモモ肉みたいな形を意識して、片方の足の太もも部分とお尻の半分の肉を一体的にとらえて作っていた方が、修正作業で形を整えるときに楽かもしれません。 

以前「グラディエーター」というゲームのオープニングムービーを作ったとき、 虎のアニメーションを作りましたが、 この虎も後ろ足とお尻の部分の造形に一体感がなく、お尻の割れ目が後ろ足の動きと連動しないために、真後ろから見ると、まるでオムツを履いているみたいな感じに見えてしまうということがありました。  このときの経験から、今回は犬の後ろ足のももからお尻の部分の形には気を配って作っていこうと思います。

その他の部分については、このビデオチュートリアルの通りにモデリングしていけば、ちゃんとできるでしょうね。  ディテールをちゃんと作り込んでオリジナルの要素が出るように、そしてなるべくパクリにならないように気をつけようと思います。   
[PR]
by cgtak | 2004-08-16 17:54 | Mayaチュートリアル