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

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のみのウェイトに変換します。
下図ではlatticeを仲介したバインドをskinClusterの直バインドに変換しています。

wrap制御されたジオメトリを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のレイヤリング機能も使用すると、更に効率よくスキニングを行う事ができます。
今回ご紹介した内製ツール以外にも、ちょっと気の利いたツールがあると時間の有効活用にもつながりますね。
他のツールもいずれご紹介できればと思います…!
ではまた。

 

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