2021/10/12

デフォーマをスキンクラスタウェイトに変換

こんにちは。
ゆはらです。
今回は、deformerを単一のskinClusterに変換する内製ツールをご紹介します。

 

1.ツール概要

skinClusterを含む様々なdeformerの変形を、1つのskinClusterに変換します。
ツール名は『ConvertSkincluster』です。
機能をそのままツール名にしました。

deformerをskinClusterに変換する機能としては、
maya2017以降で『BakeDeformerTool』が搭載されています。

Maya『BakeDeformerTool』公式ページ
Maya『BakeDeformerTool』使用方法公式ページ

BakeDeformerToolでもdeformerをskinClusterに変換できますが、
実行時に各ジョイントを回転して動かしながら計算を行うため、下記のような特性があります。

  • 指定したルート以下すべてのジョイントが処理対象になる。
  • ジョイント数が多いと処理に時間がかかる。
  • rotateがコネクション等で拘束されているジョイントは処理されない。
    または意図しない結果になる時がある。

とても便利な機能ですが、上記の仕様が少し窮屈に感じたため、
自社で使いやすいように開発したのが『ConvertSkincluster』ツールになります。

 

2.機能

ConvertSkinclusterツールには、大きく分けて2つの機能があります。

◆Custom convert

変換対象ジオメトリの上流ヒストリにあるskinClusterを参照し、
単一のskinClusterのウェイトに変換します。
上流ヒストリのデフォーマの種類や数には依存しません。

複数の異なるデォーマが設定されていても、単一のskinClusterのみのウェイトに変換します。
wrap制御されたジオメトリをskinClusterのデフォームに変換する時や、
靴をバインドする時などにとても便利です。

下図ではlatticeを仲介したバインドをskinClusterの直バインドに変換しています。

 

◆BlendShape convert

別々のskinClusterを持つジオメトリのウェイトをブレンドして、
単一のskinClusterのウェイトに変換します。

ブレンドする箇所は、Mayaの標準機能のPaintBlendShapeWeightsToolでペイントして指定します。
※ペイントした範囲だけウェイトがブレンドされます。

例えば、下図のように
「Ⓐ背骨にバインドされた青ジオメトリ」のウェイトを
「Ⓑスカート骨にバインドされた赤ジオメトリ」に移す場合、
ⒶをターゲットとしてⒷにブレンドシェイプを設定します。

Ⓐの腰付近のウェイトをⒷに移したいので、
腰以下の値が徐々に0になるようにペイントします。

この状態でBlendShape convertを実行すると、
ペイントした値を参照して単一のskinClusterのウェイトに変換します。

 

3.応用例

上記の2つの機能を使用し、まぶたのウェイトを調整してみます。

①wireデフォーマの変形をskinClusterに変換

上下のまぶたにジョイントを配置します。
ジョイントの位置にカーブ(赤)を作成します。
作成したカーブを使用して、顔のジオメトリにwireデフォーマを適用します。
カーブをジョイントにバインドします。
<構造>
  • 顔ジオメトリ ⇒ カーブにwireデフォーマで制御されている。
  • カーブ ⇒ ジョイントにバインド(skinCluster)で制御されている。

 

Custom convertでwireデフォーマの変形をskinClusterのウェイトの変形に変換します。

少しガタガタしていますね。


Mayaの標準機能のDeltaMushを設定して、滑らかにデフォームするように調整します。
再びCustom convertでDeltaMushの変形をskinClusterのウェイトの変形に変換します。

まぶたのジョイントでジオメトリ全体が動いていますが、ひとまずこれで良しとします。

 

②眉毛とまぶたのスキンクラスタウェイトをブレンド

次にBlendShapeConvertを使用して、
「まぶた以外のウェイトが調整されたジオメトリ(baseGeo)」に
先ほどの
「まぶたのみのウェイトが調整されたジオメトリ(wireGeo)」のまぶた回りのウェイトを移植します。

まぶたのブレンド範囲をペイントして実行します。

まぶたのウェイトを移すことができました。

 

4.おわりに

●参考ツール
2008年に公開されている素晴らしいフリーツールです。
ConvertSkinclusterツールはこちらの内部処理を参考にしています
是非チェックしてみてください。

 

まとめ

ngSkinToolのレイヤリング機能も使用すると、
更に効率よくスキニングを行う事ができます。

今回ご紹介した内製ツール以外にも、
ちょっと気の利いたツールがあると時間の有効活用にもつながりますね。
他のツールもいずれご紹介できればと思います…!
ではまた。

 

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



ブログTOPへ戻る