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
のオプションを開き、testPlaneを選択後Preserve historyをONにして実行します。
※Preserve historyをONにすることで、testPlaneにSoftModのHistoryが残るようになります。
③ SoftModのハンドルが作成されます。
名前をsoftModHandleに変更します。
これで、SoftModをtestPlaneに設定することができました。
softModHandleを動かすと、testPlaneがデフォームします。
2. SoftModの構造を確認
コントローラを設定する前に、SoftModの仕組みを確認してみましょう。
NodeEditorでsoftModHandleのネットワークを確認すると、下図のようになっています。
outlinerでDisplay→ShapesをOnにして階層を確認すると、
softModHandleにsoftModHandleShapeがペアレントされています。
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の接続を解除するとどうでしょうか。
softModHandle、softModHandleShapeどちらを動かしてもデフォームしますね。
どうやら、、、
形状のデフォームにはsoftModHandleShapeのSoft Mod Transformationが必要のようです。
ひとまず、内部処理は確認できたので次に進めます。
3. SoftModのコントローラを作成
① softModHandleとfalloffCenterを制御するためのコントローラを作成します。
※コントローラのシェイプは任意の形状で問題ありません。
・softMod_ctrl : softModHandleを制御するためのコントローラ
・falloffCenter_ctrl : falloffCenterを制御するためのコントローラ
② softMod_ctrlをfalloffCenter_ctrlにペアレントします。
③ softMod_ctrlとsoftModHandleのtranslate、rotate、scaleを接続します。
softMod_ctrlでsoftModHandleを制御できるようになりました。
④ 次に、falloffCenter_ctrlのtranslateとsoftModHandleSoftModのfalloffCenterを接続します。
falloffCenter_ctrlでfalloffCenterを制御できるようになりました。
⑤ 各コントローラを動かして挙動を確認します。
softMod_ctrlを動かした後にfalloffCenter_ctrlを動かすと、
デフォームを維持して動いている(スライドしている)ように見えます。
しかし、softMod_ctrlのrotateやscaleを制御した後に
falloffCenter_ctrlを動かすと、デフォームが崩れてしまいます。
falloffCenter_ctrlを制御する事で子階層のsoftMod_ctrlも追従しますが、
softModHandleは原点に残っているため、
softMod_ctrlとsoftModHandleの軸のズレが発生しています。
⑥ falloffCenter_ctrlを制御した際に、softModHandleも追従するようにしましょう。
softModHandleもfalloffCenter_ctrlにペアレントします。
⑦ falloffCenter_ctrlを制御するとsoftMod_ctrlも追従するようになりましたが、
ダブルトランスフォームが発生してデフォームが崩れています。
⑧ softModHandleからみて、この現象で不要な情報は「親階層のfalloffCenter_ctrlの動き」です。
親の動き、つまり「Matrix」を相殺できればダブルトランスフォームは解消します。
softModHandleSoftModのBindPreMatrixにfalloffCenter_ctrlのInverse Matrixを接続します。
※BindPreMatrix についてはこちらの記事でご紹介しています。
https://backbone-studio.com/brog-bindprematrix/
⑨ 挙動を確認します。
ダブルトランスフォームも軸のズレも解消されています。
これで、falloffCenterの位置を変えてもsoftModHandleが追従するコントローラの完成です。
補足
今回は説明の都合上、「3. SoftModのコントローラを作成」の⑥で、
softModHandleをfalloffCenter_ctrlにペアレントしていますが、
falloffCenter_ctrlの親階層に更にコントローラ(例:falloffCenterOffset_ctrl)がある場合、
親のコントローラを制御するとデフォームが崩れる現象が発生します。
softModHandleをfalloffCenter_ctrlにペアレントするのではなく、
親の階層の影響を受けないようにローカルセットアップで設定すると、
上記の問題は解決します。
ぜひ試してみてください。
※ローカルセットアップについてはこちらの記事でご紹介しています。
https://backbone-studio.com/blog-matrixlocalsetup/
まとめ
SoftModは、デフォームで柔らかい凹凸を付けたい、
制御するエリアを任意に変更したい、といった時にとても便利です。
SoftModを取り入れて、デフォームにひと味加えてみてはいかがでしょうか。
ではまた!
※免責事項※
本記事内で公開している全ての情報について、その完全性、正確性、適用性、有用性等いかなる保証も行っておりません。
これらの情報のご利用により、何らかの不都合や損害が発生したとしても、当社は何らの責任を負うものではありません。
自己責任でご使用ください。