リグを始めて一番最初に作ることがたぶん多い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のマッチ機能入れたり
・スペーススイッチ入れたり
といった各種ギミックの組み合わせ=リギングですね。
リグは小さな機能を調べる・理解する、
そして組み合わせるといった考え方がものすごく重要です。
いろんなギミックを調べて実装することがリグを上達させる近道だと私は思います。
コメント