基本のFKとIKをブレンドするリグを作ってみよう!

リグを始めて一番最初に作ることがたぶん多いFKとIKをブレンドするリグを作ってみましょう。
FKとIKのブレンドをリグを作るだけではなく自動化も考えながら解説していきます。

他にもブレンドする際にpairBlendノードの紹介や、
便利なスケールオプションの紹介といったリグで使える機能も紹介しています。

是非、見てみてくださいね。

Pythonしながらリグを作る理由

最初に言えることは、リグは量産は必須ということです。

例えば、10キャラ分のFKIKブレンドのギミックを作ることを考えてみます。

今回のFK/IKブレンドを手作業で作った場合、
スムーズかつミスなく進んで10分かかったとします。

10体だと100分ですね。
この100分をどう減らすか?を常に考える必要がありますね。

リグを組みながらPython化も進めると、
処理の順番もコードとして残るのでおすすめですよ。


リグのおすすめ勉強方法

1.何か1つのギミックを作る。
  ギミックがどうなっているか構造を検証し、作りを分解してみる。
2.1で構造検証されたものを手順化し、Pythonコードに落とし込む。

この流れが良いでしょう。

ここでいうギミックとは、1つ1つの仕掛けのことを指すことにします。
例えば、IK/FKブレンドという仕掛けをギミックと呼ぶことにします。

PairBlendが使える理由

1.double型であること
  blendColorsノードを使ったFK/IKもよく見ますが、
  blendColorsはfloat型なので精度が低いのです。

2.チャンネルがBlend状態でロックされるのでコネクトしてもコントロールできます。

3.TranslateとRotateが1つのノードで処理できるてわかりやすい!
  シンプルでわかりやすいアトリビュート構成になっていて扱いやすいです。

4.Quaternionの補完がついているので良いです!
  詳しくは聞かないで下さい。

雑多なサンプルコート一式

from maya import cmds

# ユニークネームで複製するDuplicateコマンド
cmds.duplicate(renameChildren=True)

## FK用のリネームスクリプトです。
nodes = cmds.ls(sl=True)
for node in nodes:
    new_name = node.split("_")[0] + "_l_fk"
    cmds.rename(node, new_name)

## IK用のリネームスクリプトです。
nodes = cmds.ls(sl=True)
for node in nodes:
    new_name = node.split("_")[0] + "_l_ik"
    cmds.rename(node, new_name)
    
# NurbsCurveのShapeをTransformノードにペアレントするコマンドです。
cmds.parent(shape=True, relative=True)


#  pairBlendを作って繋ぐ関数を作りました。
def create_blend_rot(in1, in2, tgt):
    pb = cmds.createNode("pairBlend")
    cmds.setAttr("{}.rotInterpolation".format(pb), 1)
    cmds.connectAttr("{}.rotate".format(in1), "{}.inRotate1".format(pb))
    cmds.connectAttr("{}.rotate".format(in2), "{}.inRotate2".format(pb))
    for i in "xyz":
        cmds.connectAttr("{}.or{}".format(pb, i), "{}.r{}".format(tgt, i))
    return pb

# pairBlendのウェイトをコントロールするアトリビュートを作って接続します。
thigh_pb = create_blend_rot("thigh_l_fk", "thigh_l_ik", "thigh_l")
calf_pb = create_blend_rot("calf_l_fk", "calf_l_ik", "calf_l")
cmds.addAttr("thigh_l", longName="fk_ik_blend", defaultValue=0.0, minValue=0.0, maxValue=1.0, keyable=True)
cmds.addAttr("calf_l", longName="fk_ik_blend", defaultValue=0.0, minValue=0.0, maxValue=1.0, keyable=True)
cmds.connectAttr("thigh_l.fk_ik_blend", "{}.weight".format(thigh_pb))
cmds.connectAttr("calf_l.fk_ik_blend", "{}.weight".format(calf_pb))

FK,IKブレンドができた!じゃあ次の課題は?

たくさんありますね。
FK/IKブレンドっていろいろできるんですよね。

・ストレットIKやソフトIK入れたり
・IK、FKのマッチ機能入れたり
・スペーススイッチ入れたり

といった各種ギミックの組み合わせ=リギングですね。

リグは小さな機能を調べる・理解する、
そして組み合わせるといった考え方がものすごく重要です。

いろんなギミックを調べて実装することがリグを上達させる近道だと私は思います。

Patreonでサンプルファイル配布中!

登録してもらえたら嬉しいです!頑張れます!

関連記事

  1. Bifrostでレイキャストしてみよう!

    2020-12-18

  2. アーティストのためのMaya Python入門 第12回「if文を使ってみよう」

    2020-10-11

  3. スキンウェイト効率のための神ツール!brSmoothWeights!

    2021-06-07

  4. Blend Shapeが壊れる?Transfer Vertex Orderで解決だ!

    2021-09-13

コメントをお待ちしています。

コメント

ABOUT

テクニカルアーティストの為のまとめサイトです。

本サイトでは、『YouTube ✕ Blog』を中心に
情報発信をしていきます。

また、テクニカルアーティストとしての様々な
ライフハック記事も投稿予定です。

限定情報会員

PATREONでは、限定情報やサンプルファイルの配布も行っています。登録頂けると更新頑張れます。支援の方よろしくお願いします。


免責事項

本ウェブサイト内で公開している全ての情報の有用性や安全性については当方は一切の保証を与えるものではありません。
利用したことによって引き起こる直接および間接的な損害に対して当方は一切責任を負うものではありません。
全て自己責任でご使用ください。

3DCGBOOK出版

BOOTHで技術書を販売利しております。







スポンサー

ページ上部へ戻る