DrivenKeyというのはあるオブジェクトAを動かしたら連動して別のオブジェクトBが動くというものです。MotionBuilderでこれが出来たら便利なので今回はRelationコンストレインを使ってその方法を紹介します。
1. Normalizeコンストレインの作成
まず、Relationコンストレイン1つ作成して名前をNormalizeなどのようにしてコンストレインの名前を変更しておき、MacroToolsから3つのMacroInputNumber、MacroOutputNumberを1つ作成し、以下のようなリレーションコンストレインをつなげます。
上図のRelationでやっていることは以下の計算をしていて、MinとMaxを設定したときInputされた値がどのようなウェイト値かを出力するものです。
2.DriverとDrivenとなるオブジェクトの作成
次にDriverとなるMarkerを1つ作成します。そしてDrivenとなるオブジェクトを今回はSkeletonを以下のように作成します。
今回、MarkerがX軸に動いたらSkeletonのZ軸が曲がるようにDrivenKeyを設定したいと思います。
3.DrivenKeyの設定
DriverのMarkerが0~50の間で動くときに、Skeletonが0~90曲がるように動作させるには以下のようにRelatoinをつなげます。
黄色枠で囲っているのが1番目の工程で作成した自作のMyMacroのNormalizeです。
これのMinに0を設定し、Maxに50、InputにはMarkerのTransXがつながるようにします。
そしてResultをInterpolateのCにつなげます。InterpolateのRaには0,0,0を設定、Rbには0,0,-90を設定し、そのResultにはSkeletonのRotationZ軸につなげます。
この例はでMarkerのTransでSkeletonのRotを制御するDrivenKeyの例です。これを応用すれば指を簡単に動かす構造を作れたりします。
今回はRotを制御するDriveKeyだったのでInterpolateを使用していますがTransを制御する場合にはMiddlePointのBoxを使用すれば大丈夫です。
つまりDrivenKeyというのはDriverのある値を0~1に正規化(Normalize)して、その値を受けてのDrivenが0~1での状態を制御されるという構造です。この入力値をNormalizeして0~1に置き換えてやるというのはかなり便利な方法で色々なところで応用されている考え方で覚えておくと色々な場面で役に立つかと思います。