MayaでFKとIKブレンド(切り替え)方法

当ページのリンクには広告が含まれています。

MayaでFKとIKのブレンド(切り替え)方法を解説します。ブレンドと切り替えについては人それぞれ好みがあると思います。私は補間してくれるブレンドは嫌いではありませんが、キーを沢山打たなくてはならないアニメーターとしては数値をいれてキーを打つ(ブレンドの場合)という手間がかかるので切り替えのほうが好ましいという意見も痛いほどよくわかります。どちらにしてもやり方は同じです。違うのは最後のFKとIKを選択するチャンネルボックスを数値入力にしてブレンド方式にするか、FKとIKのプルダウンメニューにするかの違いだけです。

また、この記事はコントロールリグを作成する方法を解説したものです。スキニングしたキャラクターにいきなりこのようなことをしないでくささい。詳しくは以前の記事を参考にしてください。

目次

左腕のjointを作成

左腕のjoint

左腕のjointを作成します。この左腕をFKとIKのブレンド(切り替え)できるようにします。

名前は「L_upperArm_Jnt」「L_elbow_Jnt」「L_hand_Jnt」「L_handTip_Jnt」としました。

joint orientを揃えてください。揃える方法やどういったルールに基づいて揃えるかは以前の記事に書きましたので参考にしてください。

jointの複製

「L_upperArm_Jnt」 を複製します。Edit > Duplicate(Ctrl+D)します。

名前は 「L_upperArm_fk_Jnt」「L_elbow_fk_Jnt」「L_hand_fk_Jnt」「L_handTip_fk_Jnt」 としました。

さらにもう一本Duplicateします。

名前は 「L_upperArm_ik_Jnt」「L_elbow_ik_Jnt」「L_hand_ik_Jnt」「L_handTip_ik_Jnt」 としました。

名前を見ればわかるように「〇〇_fk_Jnt」はFK用のjointです。「〇〇_ik_Jnt」はIK用のjointです。

jointをグループにまとめる

これまでに作成した3本のjointを「Jnt_Grp」というグループにまとめます。

「L_upperArm_Jnt」と「L_upperArm_fk_Jnt」と「L_upperArm_ik_Jnt」を選択して「Ctrl + G」 でグループ化します。

コントローラーの作成

リグで使うコントローラーを作成します。

コントローラーの作成方法については以前の記事を参考にしてください。

FKコントローラーの作成

まずはFK用のコントローラーを作成します。

ここではnurbsCircleを使用します。

nurbsCircleを作成してチャンネルボックスの「INPUTS > makeNurbsCircle1」の「Normal X」に「1」を入れてください。「Normal Y」の値は「0」にしてください。するとjointと同じ方向にCircleが向きます。Edit > Delete by Type > History(Alt + Shift + D)でヒストリを消しておいてください。

次に「Ctrl + V」でスナップさせながらnurbsCircleを「L_upperArm_fk_Jnt」の所へ移動させます。

「Outliner」のDisplayからShapesにチェックを入れます。これでシェイプノードが表示されるようになります。

nurbsCurveのシェイプノードを選択し、次にCtrlキーを押しながら「 L_upperArm_fk_Jnt 」を選択します。その後MELのコマンドラインから

parent -r -s

と入力してEnterキーを押すと「L_upperArm_fk_Jnt」のシェイプノードが先程のnurbsCircleになります。 ゴミとして残ったトランスフォームノードは消しておいてください。

同様に「L_elbow_fk_Jnt」と「L_hand_fk_Jnt」についても同様にコントローラーをつけてください。

IKコントローラーの作成

IKコントローラーを作成する前にIKハンドルを作成します。

Riggingメニューに変えてから、Skelton > Create IK Handleの□(オプション)を開きます。

Current solverを「Rotate-Plane Solver」にします(Reset Toolの設定です)。

Outlinerから 「L_upperArm_ik_Jnt 」と 「L_hand_ik_Jnt」 をCtrlキーを押しながら選択します。

するとIKハンドルが作成されます。

もし、IKハンドルを動かしてもjointが意図した方向に曲がらなかったり、全く曲がらない場合はRiggingメニューのSkelton > Set Preferred Angleで優先角を設定しないといけません。

「L_elbow_ik_Jnt」を曲げたい方向にちょっとだけ曲げてから、 RiggingメニューのSkelton > Set Preferred Angle で優先角を設定します。そのあとは「L_elbow_ik_Jnt 」のrotateの値を「0」にもどします。

これできちんと曲がるようになったはずです。

手のコントローラーにはnurbsカーブのボックス「L_hand_ik_Ctrl」を使用しました。ピボットを手首の位置にあわせて設置しました。Modify > Freese Transformations(デフォルトの設定)でコントローラーの初期位置を「0」に設定します。

また、「Pole Vector」用に球のnurbsカーブ「L_arm_vector」を使用しました。まず肘の位置にスナップさせてからまっすぐ後ろに移動させてそこを初期位置にしました。こちらも Freese Transformationsします。

「L_arm_vector」 を選択し、次に左腕のIKハンドルを選択してConstrain > Pole Vectorをします。これでIKハンドルの設定ができました。

このIKハンドルを「L_hand_ik_Ctrl」で制御できるようにします。

「L_hand_ik_Ctrl」 を選択し、次に左腕のIKハンドルを選択してConstrain > Pointをします。

これで「L_hand_ik_Ctrl」でIKハンドルを制御できるようになりました。

次に「L_hand_ik_Ctrl」を選択肢、次に左手首の「L_hand_ik_Jnt」を選択してConstrain > Orientをします。すると 「L_hand_ik_Ctrl」を回転させると左手首 (「L_hand_ik_Jnt」)が回転するようになります。

最後にFKとIKの切り替えようのコントローラーを作成します。

「FK/IK」という文字を使用しました。この文字のコントローラーの作成方法を少しだけ説明します。名前は「FK_IK」としました。

Create > Typeで文字作成できます。

そこで作成した文字をModify > Convert > Type to Curveでカーブに変換できます

変換したカーブは過去の記事を参照にしてコントローラーにしてください。

FKとIKのブレンド

ここからついに本題(FKとIKのブレンド)に入ります。

「〇〇_Jnt」のjointを「〇〇_fk_Jnt」に合わせるか、それとも「〇〇_ik_Jnt」に合わせるかの割合をブレンドして決めます。

blendColorsノード

ブレンドするには「blendColors」というノードを使います。

blendColorsノードにはColor1(R,G,B)とColor2(R,G,B)という値を入れることが出来ます。このRGBをX,Y,Zと読み替えて利用します。それをBlenderという「0~1」の値でブレンドします(0.5ならColor1が50%、Color2が50%)。

Node Editorでノードを組む

Mayaのノードエディターでノードを組む

Node Editorに「L_upperArm_Jnt」と「L_upperArm_fk_Jnt」と「L_upperArm_ik_Jnt」を読み込みます(真ん中ボタンドラッグで読み込めます)。Node Editor上でTABキーを押して「blendcolors」と打ち込む途中でリストが出てくるので「blendColors」を選択して読み込みます。

次に上の画像のようにそれぞれを接続します。「unitConversion」というノードは勝手にできます。上の画像だと見にくいので下に接続したものを記しておきます。

L_upperArm_ik_Jnt.RotateX ----> blendColors.Color1.Color1R
L_upperArm_ik_Jnt.RotateY ----> blendColors.Color1.Color1G
L_upperArm_ik_Jnt.RotateZ ----> blendColors.Color1.Color1B

L_upperArm_fk_Jnt.RotateX ----> blendColors.Color2.Color2R
L_upperArm_fk_Jnt.RotateY ----> blendColors.Color2.Color2G
L_upperArm_fk_Jnt.RotateZ ----> blendColors.Color2.Color2B

blendColors.Output.OutputR ----> L_upperArm_Jnt.RotateX
blendColors.Output.OutputG ----> L_upperArm_Jnt.RotateY
blendColors.Output.OutputB ----> L_upperArm_Jnt.RotateZ

これを「L_elbow_Jnt」と「L_elbow_fk_Jnt」と「L_elbow_ik_Jnt」についても同様に行います。

FK / IKブレンド(切り替え)アトリビュートを追加する

「FK / IK」という文字をコントローラーにした「FK_IK」コントローラーにModify > Add Attribute…でアトリビュートを追加します。

その前に「visibility」以外はいらないのでチャンネルボックスで「visibility」以外を選択してチャンネルボックスのChannels > Lock and Hide Selectedで消してしまいます。

Add Attributeでアトリビュートの追加をする

Long name:を「FK_to_IK」にして、Data Typeは「float」、Minimum:は「0」でMaximum:は「1」、Default:は「0」にしてOKを押します。

Node Editorで「FK_IK」をblendColorsに接続する

FKとIKをblendColorsで接続する

再びNode Editorを立ち上げて、「FK_IK」の「FK_to_IK」と2つあるblendColorsの「Blender」に接続します。

動作の確認

「FK_IK」のAttribute Editorを開きます。

Attribute EditorのスライダーでFKとIKを切り替えられる

そこのExtra Attributeのなかに追加した「FK_to_IK」というスライダーがあるのでそれを左右に動かして動作を確認してください。

FKとIKを切り替えている動画
赤がIK、水色が腕のjoint、黄色がFK

このようにFKとIKの間を動いていれば成功です。

切り替えスイッチにするには

FKとIKを切り替え式にする場合の設定

ブレンドではなくて切り替えのほうが良いという場合は「FK_IK」を選択してアトリビュートを追加するときに次のように変更します。

Data Typeを「Enum」にします。

Enum Namesを「IK」「FK」にします。上にあるほうが「0」で下が「1」です。どちらの数値がIK側なのか確認してから入力してください。この場合はIK側が「0」でした。

次回は

次回はこのFKとIKのマッチング(位置合わせ)です。

マッチング(位置合わせ)ができればこのFKとIKのブレンド(切り替え)がより使いやすくなります。

今回の記事が気に入っていただけた場合、ぜひとも他の記事もチェックしてみてください。Mayaのリギングに関する記事をまとめたページです。

スポンサーリンク

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次