ページトップへ戻る

DIGITAL DNA
3dsMax メモ
2007.2.24 - 2019.10.14
双方向から伸縮するボーン
ここで解説する方法では、ボーンの始点側と終点側、どちらからでも伸縮できます。

3dsMAX の DVD のMoviesフォルダに「Head_BonesRig.mov」というフェイシャルリグのサンプルムービーが収録されています。このサンプルでは、くちびる部分のボーンが自在に伸縮しています。
このようなボーンの作り方です。

実際のところ、ダミーなどを配置してボーンオブジェクトとして設定すればよいので、必ずしも標準ボーンを使う必要はなかったりします。
ここでは実数スクリプトを使用していますが、このような方法を使わなくても実現できる方法があるようです。でも、やり方が分からなかったので……。


手順
:始点のボーンとエンドを配置して、HIソルバを設定。
:始点のボーンの親にヘルパーのダミーを設定。
:ヘルパーのダミーを配置し、IKの親に設定(※実際には不要ですが、便宜上配置しています)。




:エンドのボーンの[X位置]を実数スクリプトにし、以下のような式を書きます。
[X位置]に式を書くだけで、X,Y,Z各方向の移動に対して伸縮します。
dependsOn $[IK名].pos.controller $[伸縮するボーン名].pos.controller;
dependsOn $[始点側のポイントヘルパ名].pos.controller $[終点側のポイントヘルパ名].pos.controller;
d = distance $[IK名].pos $[伸縮するボーン名].pos;
st = (d - [元々のボーンの長さ※]);
orig = [元々のボーンの長さ※];
p = orig + st;

※スクリプトコントローラのウィンドウが開いた時、式の欄に表示されている数値です。


式の例:
dependsOn $IK_Chain001.pos.controller $Bone001.pos.controller;
dependsOn $Dummy001.pos.controller $Dummy002.pos.controller;
d = distance $IK_Chain001.pos $Bone001.pos;
st = (d - 53.4679);
orig = 53.4679;
p = orig + st;

IK Chain001 は IK[スペース]Chain001 ですが、式に記述する際は IK_Chain001 と書きます。