2023/06/30

SoftModでデフォーム表現の幅を広げよう

こんにちは。
BACKBONEの海老名です。

今回は、SoftMod(Soft Modification Tool)のコントローラについてご紹介します。
※Maya2022を使用しております。

 

はじめに

SoftModは、メッシュを伸ばす凹ませるといった、
皮膚の下を滑っているかのような表現ができるデフォーマです。

変形範囲や位置も調整できます。

具体的には、
・softModHandleでメ
ッシュをデフォーム
falloffRadiusアトリビュートで変形範囲を変更
・falloffCenter(X/Y/Z)アトリビュートで位置を変更
といった制御になります。

動画では、falloffRadiusの範囲とfalloffCenterの位置が分かりやすいように水色のnurbusCurveで表現しています。
softModHandleを動かすと、falloffRadiusの範囲内で形状がデフォームします。
falloffCenterの値を変えると、falloffRadiusの影響範囲の中心位置が変わります。


SoftModのデフォルト設定でも問題なく使用できるのですが、

falloffCenterの位置を変えても、softModHandleの位置は変わりません。

softModHandleを移動しても、falloffCenterが同じ位置に追従するように組み替えてみましょう。

 

1. SoftModをplaneに設定

① ポリゴンのplaneを用意します。
planeの名前を「testPlane」に変更します。

 

② Mayaメニューの
Deform(Modify > Transformation Tools) > Soft Modification Tool
のオプションを開き、t
estPlaneを選択後Preserve historyをONにして実行します。
※Preserve historyをONにすることで、testPlaneにSoftModのHistoryが残るようになります。

 

③ SoftModのハンドルが作成されます。
名前を
softModHandleに変更します。

これで、SoftModをtestPlaneに設定することができました。
softModHandleを動かすと、testPlaneがデフォームします。

 

2. SoftModの構造を確認

コントローラを設定する前に、SoftModの仕組みを確認してみましょう。
NodeEditorでsoftModHandleのネットワークを確認すると、下図のようになっています。

 

outlinerでDisplay→ShapesをOnにして階層を確認すると、
softModHandlesoftModHandleShapeがペアレントされています。

 

AttributeEditorでsoftModHandleを確認すると、
それぞれが別のノードであることが分かります。

softModHandle:transformノード

softModHandleShape:softModHandleノード

softModHandleSoftMod:softModノード

 

改めてノードネットワークを確認してみます。

softModHandleの(World)Matrix情報がsoftModHandleSoftModを介して、
testPlaneShapeに接続されています。

softModHandleShapeからは、Soft Mod Transformationという見慣れないアトリビュートが
softModHandleSoftModに接続されています。

良く分からないので一旦、Soft Mod Transformationの接続を解除して、
softModHandleShapeを動かして確認してみます。

 

・・・デフォームしなくなりました。
softModHandleを動かして確認してみます。

 

・・・デフォームしなくなりました。
元に戻して、、、
softModHandleのWorldMatrixの接続を解除するとどうでしょうか。

softModHandlesoftModHandleShapeどちらを動かしてもデフォームしますね。
どうやら、、、
形状のデフォームにはsoftModHandleShapeのSoft Mod Transformationが必要のようです。
ひとまず、内部処理は確認できたので次に進めます。

 

3. SoftModのコントローラを作成

softModHandleとfalloffCenterを制御するためのコントローラを作成します。
※コントローラのシェイプは任意の形状で問題ありません。

softMod_ctrl   softModHandleを制御するためのコントローラ
falloffCenter_ctrl falloffCenterを制御するためのコントローラ

 

softMod_ctrlfalloffCenter_ctrlにペアレントします。

 

softMod_ctrlsoftModHandleのtranslate、rotate、scaleを接続します。
softMod_ctrlsoftModHandle
を制御できるようになりました。

 

④ 次に、falloffCenter_ctrlのtranslateとsoftModHandleSoftModのfalloffCenterを接続します。
falloffCenter_ctrlでfalloffCenterを制御できるようになりました。

 

⑤ 各コントローラを動かして挙動を確認します。
softMod_ctrlを動かした後にfalloffCenter_ctrlを動かすと、
デフォームを維持して動いている(スライドしている)ように見えます。

しかし、softMod_ctrlのrotateやscaleを制御した後に
falloffCenter_ctrlを動かすと、デフォームが崩れてしまいます。

falloffCenter_ctrlを制御する事で子階層のsoftMod_ctrlも追従しますが、
softModHandleは原点に残っているため、
softMod_ctrlsoftModHandle軸のズレが発生しています。

 

⑥ falloffCenter_ctrlを制御した際に、softModHandleも追従するようにしましょう。
softModHandlefalloffCenter_ctrlにペアレントします。

 

⑦  falloffCenter_ctrlを制御するとsoftMod_ctrlも追従するようになりましたが、
ダブルトランスフォームが発生してデフォームが崩れています。

⑧ softModHandleからみて、この現象で不要な情報は「親階層のfalloffCenter_ctrlの動き」です。
親の動き、つまり「Matrix」を相殺できればダブルトランスフォームは解消します。

softModHandleSoftModBindPreMatrixfalloffCenter_ctrlInverse Matrixを接続します。
※BindPreMatrix についてはこちらの記事でご紹介しています。
https://backbone-studio.com/brog-bindprematrix/

 

⑨ 挙動を確認します。
ダブルトランスフォームも軸のズレも解消されています。
これで、falloffCenterの位置を変えてもsoftModHandleが追従するコントローラの完成です。

 

補足

今回は説明の都合上、「3. SoftModのコントローラを作成」の⑥で、
softModHandlefalloffCenter_ctrlにペアレントしていますが、
falloffCenter_ctrl
の親階層に更にコントローラ(例:falloffCenterOffset_ctrl)がある場合、
親のコントローラを制御するとデフォームが崩れる現象が発生します。

softModHandlefalloffCenter_ctrlにペアレントするのではなく、
親の階層の影響を受けないようにローカルセットアップで設定すると、
上記の問題は解決します。
ぜひ試してみてください。
※ローカルセットアップについてはこちらの記事でご紹介しています。
https://backbone-studio.com/blog-matrixlocalsetup/

 

まとめ

SoftModは、デフォームで柔らかい凹凸を付けたい、
制御するエリアを任意に変更したい、といった時にとても便利です。
SoftModを取り入れて、デフォームにひと味加えてみてはいかがでしょうか。

ではまた!

 

※免責事項※
本記事内で公開している全ての情報について、その完全性、正確性、適用性、有用性等いかなる保証も行っておりません。
これらの情報のご利用により、何らかの不都合や損害が発生したとしても、当社は何らの責任を負うものではありません。
自己責任でご使用ください。



ブログTOPへ戻る