オレ的最強コンストレイントでウハウハ

やや調整してみた胸寄せ。
画像


LightWaveのFollowerプラグイン。
元々はパス制御のもので、リーダーのロケーションに対して相対的なずれを作ることで群衆制御をすることを目的としているようだけど、チャンネルを任意に入れ替えできる等SimpleConstraintよりも使い勝手がいいのでFKハンドルでボーン制御する時にコンストレイントの代わりに入れてます。
同じような人も多いんじゃないかと思います。

んが、手軽な分複雑なことはできない。

エクスプレッションの方が細かい設定ができるけど、チャンネル毎に入れるのとターゲットチャンネルを選択するのが結構面倒だし、角度制限とかをやろうと思うとかなり複雑な式になっちゃう。

ぼくとしてはコンストレイントを改良したいと思っていたわけです。

で、これを作らないと先に進めないような気がするので、満を持してオレFollower…とゆーかConstraintプラグインを作ることにしました。


特徴。

1. 複数のターゲットのブレンド
複数のボーンまたはNullに別々に係数を掛けて足し合わせることができる。
係数にはエンベロープも指定可能。

2. ターゲット毎にリミット
上限、下限を設定し、インフィニティのイーズイン/アウトも設定可能。

3. ターゲット毎に座標系指定
ターゲット毎にPosition/Rotationそれぞれで座標系を指定可能(Scaleはローカル固定)。
さらにターゲットのローカル/ワールド座標系から、操作対象の親座標系(ルートの場合はワールド座標系)に変換することも可能。

4. Aimコンストレイント
モーション設定の「目標を注視」と同等のAimコンストレイントが指定可能。
係数のエンベロープを設定すれば、「視線を泳がす」とかも可能。

5. ノンモーダルなパネル
FollowerやConstraintはモーダルなパネル(設定画面)なので設定中は結果を確認できないけど、ノンモーダルなパネルで逐次設定を取得更新するので結果を確認しながら編集可能。
(ただ、プレビューを更新する方法が分からないんでフレームを移るとかなんらかの操作しないと確認できないんだよね…。)

6. テンプレートの保存
設定をテンプレート名を付けて保存できるので、別のモデルでも呼び出せる。
(ターゲットは名前が一致すればロード時に復元)


とゆー6つの機能を兼ね備えていて、エクスプレッションと違いまとめて、且つノンモーダルで設定できるのでエクスプレッションをチャンネル毎に組んでいくよりも素早くセットアップができるっつーシロモノ。
あとアイテムの現在値を置換するほか、加算したりウェイトと補間することもできるようにしてます。


コントロールのレイアウトがしたくてPathTracerで使用したXPanelsからPanelsに変更したんだけど、Panelsのクラスラップするのにけっこう時間がかかっちゃいました。
まあラップしたんで、コントロールの追加はXPanelみたいにテーブルで設定できるようになってます。
加えてレイアウトもかなり簡単にできるんで、今後ももりもりプラグインが組めます。

で、何に使うかとゆーとFollowerの代わりに順次入れていくわけです。
例えばおっぱいの設定はこんな感じ(前回のFollowerと見比べてください)。
画像

まあほとんど一緒だけど、リミッターが設定できるのがミソ。
これによって、胸寄せしてない時におっぱいが逆方向に動くのを防いでます。
あと、寄せすぎも防止できる。
リミッターはもみあげが髪にめりこまないようにするのにも一役買ってます。

とりあえず必要なとこから少しずつ入れ替えてます。

使ってみて失敗したなーと思ったのが、リミットは出力値に対して行うんだけど、出力値よりも入力値にリミットとバイアスをかけるほうが使いやすいし応用が利きそう。
今は
(入力値→ウェイト乗算→出力範囲クリップ)→集計→定数加算→出力値
だけど、
(入力値→範囲クリップ→バイアス加算→ウェイト乗算)→集計→定数加算→出力範囲クリップ→出力値
みたいな流れだな。
また手間かかるけど改良したい。


とりあえずこれを使った「胸のボーンに一切キーを打たない胸寄せ」を動画にしてみました。
おっぱいの変形具合が分かるように上半身剥いてボディペイントにしてます。






前出の設定パネルでは、肩のボーン(chest)が35度以上前方に傾いたら胸が変形するようにしてます。
二の腕で寄せてるわけではないので、腕と肩をうまくタイミング合わせないと怪しい動きになったりするんだけどね…。


今回はプラグイン作成のほうに時間がかかってほとんど何も変わってないんだけど、悪魔ッ娘の微調整をしてます。目の周辺とか口元とかおっぱいとかおしりとか肩とか(意外といろいろいじってんじゃん)。


しかしこのプラグイン作ってて思ったんだけど、LightWave(v9.6)は、サーフェスにはノードエディタがあるのに、ロケーション(position/rotation/scaling)にはないんだよね。
MayaだとDGノードがあって、コネクション間にエクスプレッションノードとかが挟めるようになってる。(XSIは触ったことないのでわからない)。
最初、Panels内にノードエディタもどきを入れてロケーションに演算ノードを任意に組み込んで自由にいじれるようになったらいーなーと考えたけど、費用対効果で断念しました。(Panelsって実装の手間がかかる割にはやりたいことができなかったりするんで。)
v10ではどうなったのかわからないけど、v10でも特に進展がないようなら検討したいと思ってます。

その前にアップグレードするのか、オレ?!

"オレ的最強コンストレイントでウハウハ" へのコメントを書く

お名前
メールアドレス
ホームページアドレス
コメント