2018/03/13

クラスターの軸を変えてみる

ご無沙汰しております。
BACKBONEの福本です。

先日はセミナーへのご参加、ありがとうございました!
たくさんの方々とお会いできてとても刺激になりました。

後日、ボーンデジタルユーザーの方限定でセミナー動画が公開されるようです。
ご興味のある方は是非ご覧ください。

 

クラスターのメリット・デメリット

さて、今回はクラスターに関するテクニックをご紹介します。

私はこれまでクラスターを
・めり込み修正のコントローラ作成
・スプラインIK
などで使用していましたが、
ラティスやクラスターなどのデフォーマーはゲームエンジンへの出力が困難、
といった理由から、最近はジョイントで対応することが多くなりました。

クラスターには、良い点と悪い点がありますが、

良い点

  • お手軽。
  • スキンクラスターと共存できる。
  • クラスターのウェイト値が個々に依存しない。
  • Relativeアトリビュートで親の動きを相殺できる。など

悪い点

  • World軸で作成されるので軸の変更が面倒くさい。
  • FreezeTransformationsが実行された状態で作成される。
  • ゲームエンジンへの出力が困難。
  • 流用や移植が面倒。など

軸の変更ができないのはとても不便ではないでしょうか?
また、FreezeTransformationsされた状態で作成されるので、
matrixを取得する際にとても厄介です。

その他にも、
クラスターの格納場所を変更する度にデフォームが壊れる、
親に自動でトランスフォームノードが作られる、
など、なかなかの曲者です。

今回は、これらの問題の解決方法をチュートリアル形式でご紹介します。

 

クラスターの軸を変えてみる

① 任意の個所にクラスターを作成します。
クラスターのトランスフォームノード名をclusterHandle、
クラスターノード名をclusterHandleClusterに変更します。
トランスフォームノードであるclusterHandleのアトリビュート値を確認すると、
Translate、Rotateが0に設定されておりFreezeTransformationsが実行された状態です。


② 任意のコントローラを作成し名前をctrlに変更します。
PointConstraintを実行してコントローラをクラスターの位置に移動します。


③ コントローラを好きな角度に変更し、
親にトランスフォームノードを作成してコントローラの値を移植します。
親ノード名をctrl_spaceに変更します。
※セミナーでもご紹介しましたが弊社ではスペースノードと呼んでいます。


④ クラスターをドラッグ&ドロップでctrl_space内に格納します。
クラスターのウェイトを調整していた場合、デフォームが壊れますが無視してそのまま進めます。


⑤ clusterHandleのTranslate、Rotate値を0に変更します。

その後、clusterHandleにFreezeTransformationsを実行します。
クラスターのウェイトを調整していた場合、再度Translateに値が設定されるので0に変更します。


⑥ クラスターノード (clusterHandleCluster) にはbindPreMatrixというアトリビュートが存在します。
こちらのアトリビュートを使用して初期値をリセットします。
ctrl_spaceのinverseMatrixをclusterHandleClusterのbindPreMatrixに接続します。


⑦ デフォームが初期状態に戻りました。
この時点でbindPreMatrixへの接続は必要なくなったので、
接続は解除しておきましょう。


⑧ クラスターのピボットがコントローラの位置からずれています。
位置を合わせましょう。
clusterHandleのLocalRotatePivot、LocalScalePivotの値を全て0に変更します。
※下図は0に変更する前の状態です。


⑨ クラスターハンドルがコントローラの位置からずれています。
位置を合わせましょう。
clusterHandleShapeのOriginの値を全て0に変更します。
※下図は0に変更する前の状態です。


⑩ 最後にコントローラとクラスターのTranslate、Rotate、Scaleを接続して完成です!

 

まとめ

クラスターは工夫次第で色々と活用できます。
これを機にクラスターで色々と検証してみましょう!
次回はセミナーでご紹介したmatrixについてご紹介する予定です。

 

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



ブログTOPへ戻る