2016年9月15日木曜日

【Tips】Motionbuilderでsoft/stretchIKのRigging

Motiobuilderでリグを組むときに基本的にはキャラクタライズしてFullBodyIK(HumanIK)を使いますが、時たま他のDCCツールと同じ様なオリジナルのリグを組む時があります。
オリジナルのリグではHumanIKで実現できない、soft/stretchIKの機能が度々使用されます。
ネットで色々調べるとSoftimage Blogでsoft/stretchIKを実現する魔法の式がありました。
今回はこの魔法の式を使用してMotionbuilderでsoft/stretchIKを実現する方法を紹介します。

まずは魔法の式からみていきます。


ネイピア数のところをプログラム的におとしこむと以下のような式になります。


dsoftを1、dchainを3にした場合をグラフにすると以下の画像のようになります。

つまり、
xが2未満のときまではy=xの式で、
xが2以上の時はy=1-exp(-(x-2))+2の式で指数関数的に減衰するようになっています。


これをMotionBuilderで実現していきます。
まずは、ChainIKを組みます。この時に、IK_HandleとIK_Ctrlを2つ用意し、ChainIKコンストレイントにはIK_Handleを登録します。



次に魔法の式の下準備として、da、dsoft、dchainを分かりやすくするために以下のようなvariableという名前でRelationコンストレイントを作成しておきます。



次にSoft_StretchIK_Solverという名前でRelationコンストレイントを作成し、魔法の式を以下のようなコネクションで作成します。variableのRelationコンストレイントはMy MacrosからD&Dで出す事が出来ます。



一番右はじのAddボックスからの出力は魔法の式で言うとこのyの値になりますがこれは根元の骨からIK_Hanleまでの距離でIK_HandleのTransになっていないので、さらに以下のようなコネクションを作成してあげて、IK_HandleのTrans値にしてあげます。




次に、魔法の式の条件で0≦x<daの時、y=xの式になるようにコネクションも作成します。





ここまでコネクションが作成出来ているとsoftIKが実現出来ています。
コネクションの全体像は以下のようになります。



次はStretch部分のRiggingです。
MotionBuilderのChainIKでは、ChainIKがONの時にコンストレインされている骨のTransやScaleを変更すると回転の計算が壊れてしまうので、Stretchさせる用のダミー骨階層を作成し、ChainIKで算出された骨からダミー骨階層へRotationコンストレイントしてあげます。


このダミー骨階層に対してStretchを仕込んでいきます。
Stretchを実現する式は以下のようになります。

上記の式のコネクションを作成します。


これでダミー骨階層でSoft/StretchIKが実現出来るようになりました。


0 件のコメント:

コメントを投稿