チュートリアル / 読んで触ってよくわかる!Mayaを使いこなす為のAtoZ
第23回:素早くスキンウェイトをつける方法1/2
- Maya
- キャラクター・リグ
- ゲーム
- コラム
- チュートリアル
- 中級者
- 学生・初心者
- 教育
- 映画・TV
「今日の作業はスキンウェイトの設定。心弾む瞬間!わくわくしてたまんないな~。」
未だかつてこのように三度の飯よりスキンウェイト調整が好きという人の話を聞いたことありませんので、普通はイヤイヤやっているという感じでしょう。
個人的にはこの作業は散髪のような感じで、基本的な部分、技術を抑えれば誰もがある程度上手く早く行えると思っています。当然仕上げに腕の良し悪しが絡んでくるのですが。
というわけで、今回はスキンウェイトの調整技術を紹介してみたいと思います。スキンウェイト調整って案外すっきりできるものなんだあなと感じてもらえればよいのですが、さてどうなることか。素早く終わってなおかつきれいに仕上がる様をみると、スキンウェイトもなかなか楽しいものです。ぜひ実践してみてください。
ちなみに今回取り上げるのは昔からあるSmooth Bind(Classic Linear)です。Dual QuaternionやInteractive Skin Bindには触れませんのであしからず。
毎回それを考えるのは面倒なので、個人的には常に一定のクオリティラインを決めています。それは、
「体積と輪郭を保つ」
という事です。
スキニングで変形して形状がしぼんだりとかすると、途端に古いCGっぽくみえリアリティにかけます。なぜなら現実のものは曲がってしぼむということはないからです。例えば足の変形で見てみましょう。
左の足が変形前で、膝を90度曲げると真中と右の様になります。真中はひざの内側がへこんでしまっています。右はへこまず体積を保っています。輪郭も見てください。真中はいかにもジョイントで曲がっている感じでCGっぽく感じませんか?右は輪郭が保たれ、中身が詰まっているように見えます。ちょっと離れて見ても違いがよくわかります。
体積と輪郭が保たれると遠くから見ても近くから見てもきれいな形が保たれます。また、細かい変形がうまくいっていなくても全体として写実性を感じられるようになります。本当にそこにあるような説得力、これが現代の3DCGに必要なことです。
まあ、そもそも離れて見てきれいに変形していなければ、近くによってもディテールに接近してもきれいには見えないはずですしね…。
デッサンやモデリング、テクスチャの様に大まかなところを決めて、段々と細かいところへ移っていく、大まかな形状がうまく変形できてから細かいディテールまで追求する方が良いと思います。時間があれば細かく作り込めばいいですし、時間がなければそこまでで終わり。途中でやめても全体的な品質は保たれる、という魂胆です。
ゲームのデータとしてもこの作り方は都合がよいです。大まかなところから作っていくので、最低限必要なスキンウェイトを割り当てることになり、データの節約ができます。またLODモデルで低ポリゴンのモデルにスキンウェイトを転送する時にも上手く転送できます。
というわけで、基本的なアプローチの指針が決まったところで、細かいところを見ていきましょう。
答えは、親子付したオブジェクトの様に「完全に形を保って変形」します。ジオメトリは「伸縮しません」。つまり体積が完璧に保たれます。工業製品などは基本的に伸縮しないので、1ウェイトのスキニング設定します。
人体のスキンウェイトを調整する場合、太ももやひざ、二の腕は”あまり”伸縮しません。ウェイトはそれぞれ対応するジョイントに100%割り当てます。実際は微妙に伸縮していますね。そういう細かい調整は後ですればよいので、始めは無視します。
1ウェイトと異なりジオメトリ形状を大きく変化させるので調整が必要となります。スキンウェイトの品質が問われるのはココのスキンウェイトなのです。
というわけで人体ならまずは関節近辺に2ウェイト、それ以外は1ウェイトになるように調整します。それから細かい作業を始めます。
スキンウェイトをいくら調整しても変形がうまくいかないなら、ジョイントの位置があってないか数が足りてないのでそちらでの調整を検討します。もしかしたらエッジの切り方が悪いのかもしれません。
ゲームでは処理速度やハードの制限上ジョイント数を増やせなかったりします。そういう時は頭をひねってなんとか上手くやる方法を考え出します。が、大体大したアイディアは出ないです…。だって品質比は「ジョイント7:3スキニング」ですもの。3はいくらがんばっても10にはなりません。ほどほどであきらめて家に帰って新作ゲームで遊んだほうがためになることが多いかもしれませんよ。
・Normalize Weights
これはInteractiveにしておきます。そうすればスキンウェイトをペイントするたびにウェイト値の合計が1.0になるように補正されます。これがオフだとウェイト値が1.0以上になり意図しない変形が起きてしまいます。
・Max Influences
これは2にしています。意外かもしれませんが4など大きな値をいれるとかえって作業効率が悪くなります。後で詳しく説明します。
・Maintain max influences
オフにします。オンにすると強制的にMax influencesの数だけウェイトが割り当てられてしまいます。つまりMax influencesが2の時、1ウェイトのスキニングをしようとするとどこかのジョイントの値が2つ目のウェイト値として設定されてしまい、問題を起こします。
・Remove unused influences
これもオフにします。これがオンだと大抵スケルトンの末端のジョイントがバインドされず、あとで手動でインフルエンスとして追加しないといけなくなるので、必ずオフにします。後からFile > Optimize Scene Sizeで同様の機能を実行できます。
二の腕には変形に使いたいジョイントが1つあるだけです。にもかかわらず、強制的に4つのジョイントが影響するようにされてしまっています。こうなると、各頂点がどこのジョイントからどういう影響を受けているかよくわかりませんので作業がしにくくなります。
次に別のモデルで、Max influencesを1にしてバインドしてみます。
ウェイトが1つだと関節部分での補間が無いので、モデルの変形がきつすぎて作業しにくくなります。また、ウェイトが1つの状態でスキンウェイトをペイントでスムースすると、どこか適当なところのスキンウェイトとブレンドされてしまい、意図しない結果となってしまいます。
以上のことが理由で、何が割り当てられているか把握しやすく、作業の支障にならないスキンウェイト数は2なのです。2ウェイトから作業を始めるとそれだけで作業の効率がよくなります。
なので、いろいろ考える必要もなく、単に近くのジョイントにスキンウェイトを割り当てれば終わりなのです。
もし離れた場所にあるジョイントのスキンウェイトを割り当てようとすることがあれば、それはスキンウェイト以外の問題ですので、立ち止まってよく原因を考えて見ましょう。
次回は実践編です。簡単にスキンウェイトのペイント技術を見ていただきます。
未だかつてこのように三度の飯よりスキンウェイト調整が好きという人の話を聞いたことありませんので、普通はイヤイヤやっているという感じでしょう。
個人的にはこの作業は散髪のような感じで、基本的な部分、技術を抑えれば誰もがある程度上手く早く行えると思っています。当然仕上げに腕の良し悪しが絡んでくるのですが。
というわけで、今回はスキンウェイトの調整技術を紹介してみたいと思います。スキンウェイト調整って案外すっきりできるものなんだあなと感じてもらえればよいのですが、さてどうなることか。素早く終わってなおかつきれいに仕上がる様をみると、スキンウェイトもなかなか楽しいものです。ぜひ実践してみてください。
ちなみに今回取り上げるのは昔からあるSmooth Bind(Classic Linear)です。Dual QuaternionやInteractive Skin Bindには触れませんのであしからず。
まず何を重要視するか決める
とりあえずスキニングして動けばいいというキャラクターもいるでしょうし、まばたきや皮膚の動きまで完璧な細かいディテールまで追求することもあるでしょう。キャラクターによって必要とされるレベルは異なります。毎回それを考えるのは面倒なので、個人的には常に一定のクオリティラインを決めています。それは、
「体積と輪郭を保つ」
という事です。
スキニングで変形して形状がしぼんだりとかすると、途端に古いCGっぽくみえリアリティにかけます。なぜなら現実のものは曲がってしぼむということはないからです。例えば足の変形で見てみましょう。
左の足が変形前で、膝を90度曲げると真中と右の様になります。真中はひざの内側がへこんでしまっています。右はへこまず体積を保っています。輪郭も見てください。真中はいかにもジョイントで曲がっている感じでCGっぽく感じませんか?右は輪郭が保たれ、中身が詰まっているように見えます。ちょっと離れて見ても違いがよくわかります。
体積と輪郭が保たれると遠くから見ても近くから見てもきれいな形が保たれます。また、細かい変形がうまくいっていなくても全体として写実性を感じられるようになります。本当にそこにあるような説得力、これが現代の3DCGに必要なことです。
まあ、そもそも離れて見てきれいに変形していなければ、近くによってもディテールに接近してもきれいには見えないはずですしね…。
デッサンやモデリング、テクスチャの様に大まかなところを決めて、段々と細かいところへ移っていく、大まかな形状がうまく変形できてから細かいディテールまで追求する方が良いと思います。時間があれば細かく作り込めばいいですし、時間がなければそこまでで終わり。途中でやめても全体的な品質は保たれる、という魂胆です。
ゲームのデータとしてもこの作り方は都合がよいです。大まかなところから作っていくので、最低限必要なスキンウェイトを割り当てることになり、データの節約ができます。またLODモデルで低ポリゴンのモデルにスキンウェイトを転送する時にも上手く転送できます。
というわけで、基本的なアプローチの指針が決まったところで、細かいところを見ていきましょう。
1つのジョイントにスキンウェイト100%だと何が起きる?
スキンウェイトはジョイントの影響数、もしくはウェイト数と言った方がわかりやすいでしょうか、その数で変形の傾向が変わります。一つのジョイントに対して100%スキンウェイトが割り当てられている状態、いわゆる1ウェイトのスキニングでは、変形にどういう特徴があると思いますか?答えは、親子付したオブジェクトの様に「完全に形を保って変形」します。ジオメトリは「伸縮しません」。つまり体積が完璧に保たれます。工業製品などは基本的に伸縮しないので、1ウェイトのスキニング設定します。
人体のスキンウェイトを調整する場合、太ももやひざ、二の腕は”あまり”伸縮しません。ウェイトはそれぞれ対応するジョイントに100%割り当てます。実際は微妙に伸縮していますね。そういう細かい調整は後ですればよいので、始めは無視します。
2つのジョイントへのスキンウェイトでは何が起きる?
これを2ウェイトのスキニングと呼びます。2つ以上のジョイントにスキンウェイトを割り当てると「伸縮します」。体積が変化します。人体の変形で主に伸縮するのは関節ですので、関節部分には2つ以上のスキンウェイトを割り当てることになります。1ウェイトと異なりジオメトリ形状を大きく変化させるので調整が必要となります。スキンウェイトの品質が問われるのはココのスキンウェイトなのです。
というわけで人体ならまずは関節近辺に2ウェイト、それ以外は1ウェイトになるように調整します。それから細かい作業を始めます。
スキンウェイトをいくら調整しても変形がうまくいかないなら、ジョイントの位置があってないか数が足りてないのでそちらでの調整を検討します。もしかしたらエッジの切り方が悪いのかもしれません。
ゲームでは処理速度やハードの制限上ジョイント数を増やせなかったりします。そういう時は頭をひねってなんとか上手くやる方法を考え出します。が、大体大したアイディアは出ないです…。だって品質比は「ジョイント7:3スキニング」ですもの。3はいくらがんばっても10にはなりません。ほどほどであきらめて家に帰って新作ゲームで遊んだほうがためになることが多いかもしれませんよ。
バインドのオプション設定
最近はスムースバインドのオプションが増えていますが、ほとんどのケースでこの設定を使用しています。以下のオプションに注意してみてください。・Normalize Weights
これはInteractiveにしておきます。そうすればスキンウェイトをペイントするたびにウェイト値の合計が1.0になるように補正されます。これがオフだとウェイト値が1.0以上になり意図しない変形が起きてしまいます。
・Max Influences
これは2にしています。意外かもしれませんが4など大きな値をいれるとかえって作業効率が悪くなります。後で詳しく説明します。
・Maintain max influences
オフにします。オンにすると強制的にMax influencesの数だけウェイトが割り当てられてしまいます。つまりMax influencesが2の時、1ウェイトのスキニングをしようとするとどこかのジョイントの値が2つ目のウェイト値として設定されてしまい、問題を起こします。
・Remove unused influences
これもオフにします。これがオンだと大抵スケルトンの末端のジョイントがバインドされず、あとで手動でインフルエンスとして追加しないといけなくなるので、必ずオフにします。後からFile > Optimize Scene Sizeで同様の機能を実行できます。
なぜスキンウェイト数2から始める?
バインドするとき、Max influencesを4にしたら何が起きるでしょうか?人体をバインドしてみて、二の腕の頂点のスキンウェイトを確認してみましょう。二の腕には変形に使いたいジョイントが1つあるだけです。にもかかわらず、強制的に4つのジョイントが影響するようにされてしまっています。こうなると、各頂点がどこのジョイントからどういう影響を受けているかよくわかりませんので作業がしにくくなります。
次に別のモデルで、Max influencesを1にしてバインドしてみます。
ウェイトが1つだと関節部分での補間が無いので、モデルの変形がきつすぎて作業しにくくなります。また、ウェイトが1つの状態でスキンウェイトをペイントでスムースすると、どこか適当なところのスキンウェイトとブレンドされてしまい、意図しない結果となってしまいます。
以上のことが理由で、何が割り当てられているか把握しやすく、作業の支障にならないスキンウェイト数は2なのです。2ウェイトから作業を始めるとそれだけで作業の効率がよくなります。
スキンウェイトの影響範囲
単純に近くのジョイントから影響を受けます。遠く離れたジョイントから影響を受けることは普通ありません。なので、いろいろ考える必要もなく、単に近くのジョイントにスキンウェイトを割り当てれば終わりなのです。
もし離れた場所にあるジョイントのスキンウェイトを割り当てようとすることがあれば、それはスキンウェイト以外の問題ですので、立ち止まってよく原因を考えて見ましょう。
まとめ
今回はスキニングに関するウンチクと、スキニングウェイト数が変形に与える影響を見てきました。当たり前のことといえばそうなのですが、改めてクセを知ることで余計なことを考えずに作業できるようになったのではないでしょうか。次回は実践編です。簡単にスキンウェイトのペイント技術を見ていただきます。