チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第82回:スキンウェイトの書き出し、読み込みの今
- Maya
- キャラクター・リグ
- ゲーム
- コラム
- チュートリアル
- 学生・初心者
- 映画・TV
久しぶりにスキンウェイトについてです。皆さんスキンウェイトの書き出し、読み込みはどうされていますか?
しれっとMaya 2016頃から機能追加されているのですが、スキンウェイトと関係なさそうなところに追加されているため見逃されている方が多く、コラムでお伝えできれば良いなと思いつつも、すっかり忘れておりました…。
第26回でスキンウェイトの保存についてご紹介しました。当時はフリーのスクリプトを使うか、画像でウェイトを書き出すかの二択しかありませんでした。現在は「デフォーマウェイトの読み書き」機能を使用できます。スキンウェイトもデフォーマですので、同じ機能でウェイトを読み書き!ざっと手順をご紹介します。
スキンウェイトの書き出し
Mayaのドキュメントでは、次のページに「デフォーマ ウェイトの書き出しと読み込みを行う」という見出しで説明があります。
http://help.autodesk.com/view/MAYAUL/2020/JPN/?guid=GUID-A3079688-8A42-4C82-A3CF-070D95A9CE6F
Skinメニューではなく、Deformメニューの一番下にある機能ですので、気づかないんですよね…。スキンウェイトとは関係なさそうに見えますし。
スキンウェイトを持ったキャラクタのジョイントかメッシュを選択したのち「Deform > Export Weights…」を選びます。次の画像の様に書き出したいスキンクラスタ(スキニングの履歴)を選んだり、ファイルフォーマットをXMLかJSONか選べるオプションウインドウが表示されます。
あとは、書き出し先を指定して書き出すだけです。
書き出すと次のようなファイルが出てきます。ここではXMLで書き出しました。
各頂点の座標とウェイト値が出力されます。
スクリプトで実行したい場合は、次のように実行できます。
deformerWeights -export -deformer "skinCluster38" -format "XML" -path "D:/temp/" "test.xml";
これならツール化しやすいですね!
スキンウェイトの読み込み
読み込むときは、スキンクラスタ(スキンウェイトの履歴)に対してウェイトを読み込みますので、事前に何かしらスキニングしておく必要があります。
その後、スキンウェイトを読み込みたいメッシュを選択して「Deform > Import Weights…」を選びます。次の画像の様に、メッシュに割り当たっているスキンウェイトが表示されます。先ほど書き出したファイルを読み込みます。
読み込むときにMapping methodを変更することで、ウェイトの適用方法を変えられます。
Indexは頂点インデックス順、Overは現在のウェイト値をそのままにしつつ、同じインデックスがあれば上書きします。Nearestは近い位置の頂点のスキンウェイトを採用します。
実は、MELコマンドのドキュメントでdeformerWeightsの-methodの項目を見ていただくと、他にも設定出来ることがわかります。
単純にウェイト値をインポートするのではなく、補間する方法もありますので、高解像度・低解像度メッシュ間でウェイトを受け渡す場合は、ドキュメントもご確認ください。
ちなみに、コマンドで実行するとこんな感じです。
deformerWeights -import -method "index" -deformer "skinCluster46" -path "D:/temp/" "test.xml";
skinCluster -e -forceNormalizeWeights "skinCluster46"; // オプション設定でNormalize weightsがオンだった場合この行も実行。
スキンウェイトのファイルがXMLもしくはJSONですので、独自のインポート方法を実装をされても面白いと思いますよ:)
まとめ
早くお伝えすればよかったのですが、なんとなくおざなりになっていたスキンウェイトの書き出し・読み込み。実はこんなに簡単にできるようになっています。うまく使っていただくとキャラクタ制作がぐんと楽になりますので、ぜひご活用ください。
スキニングの数が多いキャラクタを扱われている方は、ぜひスクリプトを書いてツール化にチャレンジしてみてください!