チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第24回:素早くスキンウェイトをつける方法2/2
- Maya
- キャラクター・リグ
- ゲーム
- コラム
- チュートリアル
- 中級者
- 学生・初心者
- 教育
- 映画・TV
前回に引き続き今回もスキンウェイトをつける時のテクニックを紹介していきます。実践例の紹介をすることで、今まで感じていたスキンウェイト調整の”?”が解消すればよいのですが…。では早速見ていきましょう。
スキンウェイトのペイントはReplaceとSmoothだけで行う
これが意外と知られていないようですが、というか自分で勝手にそう思っているだけなんですけど、スキンウェイトのペイントはReplaceとSmoothだけで行います。
作業効率を上げるには自分が行う操作がどういう結果をもたらすか、確実に予想しながら作業することが大切です。Replaceは選択しているジョイントのウェイトをValue*Opacityの分割り当てるので、どんどん塗れば最後にはValueの値と同じウェイトが付きます。結果がわかりやすいわけです。Valueが1.0なら塗るほどに選択しているジョイントについてくるようになる、と。筆圧感知のペンタブレットを使えばOpacityを自動で変えられるので、塗りの強さでValueをコントロールします。
Smoothはすでに割り当ててあるスキンウェイトの値同士を平滑化しますのでわかりやすいですね。変形で尖ったところとかに使えばよいのです。
逆にAddやScaleは結果がわかりにくいので、試行錯誤しながらウェイトを付けているとかえって時間がかかります。普段の作業の中で使うことはありません。
スキンウェイトのジョイント影響数はあまり気にせずに…
ゲームではスキンウェイトの影響数を2もしくは4にします。かといって作業中にスキンウェイト数がオーバーしないように気を付けながら作業するのは困難で、時間がもったいないです。
好きなだけスキンウェイトをペイントして、最後にスキンウェイト数を制限して、それで変形がおかしくなったらおかしくなった場所だけ修正すればよいのです。このほうがはるかに作業効率がよくなります。
Skin > Edit Smooth Skin > Set Max Influences...は指定したスキンウェイト数に「無理やり」設定する機能なので、これを使うとちょっと問題が起きます。例えばスキニングされた各頂点が1~3のジョイント影響数を持っているとして、Set Max Influencesを2で実行すると、3ウェイトは2ウェイトへ、2ウェイトはそのまま、そして1ウェイトが2ウェイトになります。つまり1ウェイトの頂点では影響数が増えてしまい、0.0001とか小さなウェイト値が何処かしらのジョイントから割り当てられてしまいます。
というわけでスクリプトの出番です。MELの教材を兼ねて簡単なスクリプトを用意しました。以下のスクリプトを実行してみてください。setSkinWeightMaxInfluences.melファイルを開いてスクリプトエディターにコピペしてもいいですし、スクリプトエディターにファイルを読み込んでも大丈夫です。
setSkinWeightMaxInfluences.mel
オプションウインドウが立ち上がるので最大ウェイト数を設定します。
メッシュやコンポーネントを選択して実行します。このツールではスキンウェイト値の大きなもの順に、指定した数だけ残します。余分なウェイトが追加されるということはありません。簡易的なものなので、複数のバインドが行われていると動きませんので、余裕があれば機能拡張してみてください。
ゲームではあまりスキンウェイト影響数を1や3にしません。GPU処理の関係でウェイト1なら2でも、3なら4でも処理に大差ないからです。
実際にやってみると…
ではこれまでの話を全て生かして実践してみます。
1) まず前回紹介したオプション設定でバインドします。
バインド仕立ての状態では下図のようなスキンウェイトの割り振りになります。
2ウェイトでバインドしているので、ウェイトが混ざって灰色のところが多めになっています。
2) スキンウェイトをペイントします。ペイントのオプションはReplaceでValueを1.0にします。まずはルートのジョイントからペイントしていきます。
選択しているジョイントに100%影響を受ける部分を先に塗りつぶします(図中A)。この階層の下の階層にあるジョイントの部分も少しの範囲100%のウェイトを設定しておくのがポイントです(図中B)。
3) ルートのジョイントから順々に階層を下りながらペイントしてきます。先ほどと同様で、まずは選択しているジョイントに100%影響を受ける部分を先に塗りつぶします。
4) 下の階層にあるジョイントの部分も少しの範囲100%のウェイトを設定します。
5) 親ジョイントとの関節部分を軽くペイントし、Smoothも使ってなじませます。
6) また一つ下の階層へ移動します。3~5を繰り返していく感じです。
ふくらはぎ近辺はValue1.0にし、足首の方も若干塗っておきます。ジョイントを動かして様子を見ながら膝にSmoothをかけてなじませます。関節部分のみ微調整が必要です。
ところで、なぜ子ジョイントの範囲も軽くペイントしておくかというと、そうしておけば子ジョイントをペイントする時に親ジョイントとの間にある関節部分をReplaceで軽く塗るだけで、確実に親子でウェイトを折半できるからです。
もしあらかじめペイントしておかなければ、どこのジョイントのウェイトが来ているかわからないので思ったように変形しない場合がありますし、うっかりすると2ウェイト以上のウェイト数になってしまうこともあります。
7) 足のウェイトはややこしいので、先に足首の骨で足全体が動くようにしておきます。
8) 最後につま先を回転させて、スキンウェイトを調整します。
と、こういう感じに仕上がります。
体積と輪郭はクールに保たれているでしょうか?
ルートから順々にたどっていくだけなので、今回のスキンウェイト調整なら数分で終わります。マウスで作業する場合は適宜Opacityを変えながらペイントするのでなかなか大変です。ペンタブレットをおすすめします。全然効率が違います。
9) ゲーム用には先ほど紹介したようなツールでスキンウェイトの最大数を制限します。
今回は最低限量でのスキンウェイトを割り当てているので、2ウェイトに制限しても特に変化は起きません。形が変わったらウェイトを微調整します。
というわけで、これまでの知識を総動員すればあっという間にスキンウェイト調整は終わってしまいます。頂点数が多いともっと大変ですけどね!
まとめ
数回にわたりスケルトンとスキニングのあれこれを紹介してみました。ゲーム制作での場合を考えながら紹介していたので、映像系ではまた異なったアプローチが必要です。が、すごく基本的な部分ばかりなので修得すれば様々な場面で役に立つと思います。使用する3Dソフトが変わってもここで紹介したアプローチは変わりませんので、ぜひ試してみてください。
次回はお残り的な、スキニングにまつわるちょっとしたあれこれについて話してみたいと思います。