チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第26回:スキンウェイトのコピーと保存

2012.04.09

  • Maya
  • キャラクター・リグ
  • ゲーム
  • コラム
  • チュートリアル
  • 中級者
  • 学生・初心者
  • 教育
  • 映画・TV
キャラを作った、骨を作った、バインドもした。で、キャラのモデリングを修正した、いつの間にかスキンウェイトが壊れた、もう一度始めからスキンウェイトを付け直した…。

ありがちです。スキンウェイトを保存しておいて、あとから読み込めたら便利ですよね。シーン間でスキンウェイトを移す時も、スキンウェイトを保存して持っていけたら便利です。でも微妙にどうやったらいいかわかりにくいところなので、今回幾つかの方法を紹介したいと思います。

ついでにスキンウェイトのコピーについてもおさらいをしつつ、スキンウェイトの話を締めたいと思います。

スキンウェイトのコピー

スキンウェイトのコピーはメッシュ同士の形状やポリゴン数が異なってもいい具合に補間してコピーしてくれるので、ハイポリゴンモデルとローポリゴンモデルでのデータのやり取りがとてもスムーズに行えます。もちろん全然形が違う者どうしでもそれなりに補間してコピーできます。

方法も簡単で、バインドしているメッシュ同士でコピー元、コピー先を選択してSkin > Edit Smooth Skin > Copy Skin Weightsを実行すれば終わりです。

同じスケルトンにバインドしているのなら、一番手っ取り早く、デフォルトのオプションでうまくコピーできます。



スケルトンが異なっても大体これで大丈夫ですが、ジョイントの位置が同じだったり、名前が同じだったりと、共通している部分が多いほどInfluence Associationオプションの設定次第で結果が良くなります。

頂点が似ていれば似ているほどSurface Associationの設定で結果が良くなります。下図のように、骨の位置は同じで、数が違ったりモデルの形状が違ったりする程度なら、きちんとスキンウェイトがコピーされます。



あまりにジョイントの数、位置が異なる場合や形状が違う場合はさすがに完璧にはコピー出来ないので、大体うまくコピーできたら御の字という感じで気軽にやるのが良いでしょう。

スキンウェイトの保存:Attribute Map

さて、本題のスキンウェイトの保存です。

スキンウェイトを保存、読み込みする作業が必要になるのはどういう時でしょうか。異なるシーン間でスキンウェイトを行き来する時や、一旦モデルのヒストリを削除してFreeze Transformationsをしたりとかデータをさっぱりさせて、改めてバインドしなおす時にも、スキンウェイトが読み込めると便利です。

まずはMaya本来の機能を紹介します。ペイント系のツール(つまりアルチザンツール)ではどのツールでもAttribute Mapsという機能が利用できます。Paint Skin Weights Toolでは気づかない人が多かったからなのか、Attribute Mapsがメニューとして抜き出されて、Skin > Edit Smooth Skin > Export Skin Weight Maps...とImport Skin Weight Maps...に置かれました。



これは各頂点でのペイント情報(ここではスキンウェイト)をテクスチャとして読み書きする機能です。実はフォトショップなどでテクスチャとしてスキンウェイトを描いて、Mayaに読み込むこともできるのです!まあ、やらないですけど。

では実際に書きだす手順をお見せします。

1)書き出したいスキンウェイトを持っているメッシュを選択します。



2)Skin > Edit Smooth Skin > Export Skin Weight Maps...のオプションを開きます。とりあえずデフォルトの設定で進みます。



3)Exportボタンを押して書き出し先のフォルダ、名前を指定します。



4)何枚マップを出すか確認のダイアログが出るので、Yesを押します。



この親切さに、なんとなく不穏さも感じるのは気のせいでしょうか…。

で、指定した名前のついた.weightMapファイルが保存され、同じ名前のフォルダにテクスチャがまとめられて書き出されます。テクスチャ名はメッシュとジョイント名から付けられます。



さて、その.weightMapファイルを開くと、こんな感じになっています。



メッシュ名と、ジョイント名と、それらに使われるテクスチャ名が書かれています。後でこれをいじればムフフなことができそうですね。

では書き出されたテクスチャを開いてみます。iffで書きだしたので、MayaのFile > View Image...を使ってプレビューします。



見ての通りUVとスキンウェイトの画像が一致しています。各頂点でのスキンウェイトを、テクスチャとして出しています。

インポートは簡単で、先ほどの逆です。

1)バインドしているメッシュを選択します。
2)Skin > Edit Smooth Skin > Import Skin Weight Maps...を実行。
3)先ほど書きだした.weightMapファイルを選択して開きます。(なんか、Files of typeをAll Filesにしないと.weightMapが表示されないようなので、ここを変えてください)



4)すごい事が起きながらマップが読み込まれるので、眺める…。ぜひ試してみてください。

UVが同じなら、形が変わっても問題なく読み込めるのが良いところです。ただし色々と問題があります。

「テクスチャで書きだす」ということは、UVが重なっていたりすると、重なっているところの頂点のスキンウェイトは同じ値になってしまうのです。つまり、キャラで顔とか体とかのテクスチャを左右反転にして使っている場合、片側のスキンウェイトしか書き出されません。

このキャラでは、腕のテクスチャは左右で使い回しています。なのでスキンウェイトを読み込むと、左右の腕のウェイトが左の腕のジョイントに割り当てられて、壊れます。



またUV空間の0-1範囲以外にUVがあるのもダメです。0-1範囲以外はテクスチャとして書き出されないので、スキンウェイトが0になります。



そのため、書きだす前にはAutomatic Mappingとかで重複しないUVを作ってから書き出さないといけないわけです。例えば次の図のように、新しくskinWeightというUVセットを作って、その中に重複しないUVを展開し、このUVを使ってウェイトを書き出します。



しかしまだ問題があって、昨今のポリゴン数では1024*1024のテクスチャだと精度が低く、ピクセルが足りなくてうまく書き出せなかったりもします。テクスチャを2048*2048など大きくしても良いのですが、高ポリゴンのモデルはえてして沢山のジョイントを持っているもので、2048*2048*ジョイント数(100とか?)だと、すごく処理が重くなり、ファイルサイズも馬鹿になりません。

というわけで、実際のところこの機能でスキンウェイトを保存する方法は、最近は使ってません。長々と説明しておいてアレなんですけど…。

実は今から10年前、NURBS全盛期、このツールをよく使っていました。NURBSは特性上、ジオメトリは必ずパッチとして独立して「UVは0-1範囲」「UVがジオメトリと連動し、連続する」等あったので、このAttribute Mapsはうまく機能していました。当時でもテクスチャが500枚とか書き出されて、Indigo2のHDD容量がなくなったり…。いや良いんです、昔話は。

では、他にどういう方法があるのか見てみましょう。


スキンウェイトの保存:フリーのMEL

結局こうなるのですが、Creative Crashなど海外サイトを見てみれば、色々とスキンウェイト関連のツールが上がっています。無料で利用できるものばかりですので、それを利用してスキンウェイトの保存、読み込みをするのが、手っ取り早くて確実です。

スキンウェイトを頂点の位置として出したり、頂点番号で出したり、いろいろとオプションが選べると思います。テキストデータとして保存するものばかりなので処理もデータ容量も軽くとても使い勝手が良いです。ぜひ好みのものを見つけてください。

頂点番号で書きだせれば頂点数が変わらない限り100%完璧にスキンウェイトを再現できますので、とても安心です。

そもそもスキンウェイトって

始めに見ていただいたとおり、一昔と違ってMayaのCopy Skin Weights機能はとても高機能で高速になりました。ユーザーが意図したようにスキンウェイトを行き来できます。

ふと考えてみると、そもそもスキンウェイトを持っているオブジェクトのあるシーン、mb/maそれ自体がスキンウェイトを保存しているわけです。ですから、単純にシーンをインポートしてきてCopy Skin Weightを使えばスキンウェイトの読み込みになります。

つまりmb/maとしてスキンウェイトを保存できるのです。なんのこっちゃないですね。シーンそれ自体をスキンウェイトのデータとみなせばいいのです。



インポートすると、スキンウェイト情報以外に、色々なモノ(マテリアルとか)がついてきちゃうのが気になりますので、変わらずフリーのMELのツールは利用しています。でも最近はこの技をよく使っています。


まとめ

なんだかよくよく考えてみるとあまり使ってない機能の説明をたっぷりしてしまいましたが、Mayaにはいろいろな機能があるのです。3DCGのトレンドに応じて新しく追加されたり、使われなくなったり、CG業界の歴史を垣間見ることができます。

さて、これでひと通りジョイント、スケルトン、スキニングに関するあれこれを見ていくことが出来ました。またもや一つのトピックが長くなってしまいましたが、どうでしたでしょうか。ここまで来ればいよいよリグについてお話できます。

でもなんだか頭が疲れてくるので、次回からしばらくはリラックスしながらナナメ読みできる内容にしたいと思います。春になれば新しくMayaなど3DCGを始める方も増えますでしょうからちょっと早めに、Mayaのとっても当たり前だけれど、意外と始めにつまづきやすい基本操作について話したいと思います。これを読めば安心してMayaをいじり始められるのでは?と内心期待しております。


Maya Learning Channel
製品購入に関するお問い合わせ
オートデスク メディア&エンターテインメント 製品のご購入に関してご連絡を希望される場合は、こちらからお問い合わせください。