キャラクターを動かす上でどうしても必要となる面倒な作業「ウェイト調整」。そのウェイトの調整によく使われるスキンウェイトペイントツールですが、意外と知られていない機能があるんです(たぶん)。
公式のヘルプを見ればわかることですが、実際の作業で重要な機能や考え方を中心に紹介していきます。
コンテンツ
ウェイト値の足し算引き算・推移法則
ウェイトの正規化
まず、ウェイトの正規化の欄をチェックしてください。「インタラクティブ」以外になっていたら直しましょう。これはある頂点に登録されているインフルエンス(ジョイント)のウェイト値の合計が必ず1になるようにリアルタイムで調整されるモードです。ポストとオフを使うことはほぼないです。
最大インフルエンス数の保持をオフ
バインドするときは「最大インフルエンス数の保持」をオフにしましょう。もしすでにバインドしてしまっている場合はメッシュのアトリビュートからskinClusterタブを選択し、その中に同じく項目があるのでオフにします。
これは一つの頂点に登録できるインフルエンス数をリアルタイムで制限するもので、予想外にウェイトが消えたり知らないウェイトが付いたりするので混乱の元です。
足し算引き算・推移法則
ウェイトをペイントしたときにウェイト値がどのように推移するか説明された文章というのは意外とありません。そして、それがウェイト調整を混乱させ苦手としてしまう要因だと思います。
基本は「どこから持ってくるかどこに逃がすか」
インフルエンスリストの中から編集したいインフルエンスを選択することで、そのインフルエンス(ジョイント)のウェイト値を編集することができます。その時ウェイト値を「どこから持ってくるかどこに逃がすか」ということを考える必要があります。一つの頂点のウェイト値は必ず合計が1.0になるという設定なので、あるインフルエンスのウェイト値を上げたら他のインフルエンスのウェイト値はその分差し引かれるし、またあるインフルエンスのウェイト値を下げたら他のインフルエンスのウェイト値がその分増加します。
頂点に付いているインフルエンス間でウェイト値が推移する
例えば、
jointAからjointDまであるスケルトンをメッシュにバインドしたとき、ある頂点にjointA、jointB、jointCのウェイトが付いたとする。
jointAのウェイト値を上げたり下げたりした場合ウェイト値はjointBとjointCの中で推移し、元々ウェイト値が付いてなかったjointDにはウェイト値は流れない。
推移するウェイト値は各インフルエンスが持ってるウェイト値の割合
上記の例で言うなら、各インフルエンスのウェイト値がjointAが0.2、jointBが0.2、jointCが0.6の場合(計1.0)、jointAのウェイト値を0にするとjointBは0.25(0.05増)、jointCは0.75(0.15増)になります。
jointA以外のインフルエンスが持っているウェイト値合計0.8を100%とし、各インフルエンスが保有しているウェイト値はBが25%でCが75%なので、jointAのウェイト値0.2の25%=0.05はjointBへ、75%=0.15はjointCへ流れます。
ロックして推移する先をコントロール
リストのインフルエンスの横にはロックボタンそれぞれ付いています。ウェイト調整に伴うウェイト値の推移をロックしたインフルエンスにおいて制限することができます。
基本的な挙動は以下の2つです。
■ロックしたインフルエンス(ジョイント)のウェイトは、他インフルエンスからの影響を受けない。
■編集状態(リストで選択した状態)のインフルエンスはロックをオンにしても編集できる。つまり、編集はできるが他からの影響は受けない。
これに伴うウェイト値の推移例は以下の通りです。
■jointAのウェイト値を0.0と入力したとき、jointBがロックされているならウェイト値はすべてjointCへ
■jointAのウェイト値を0.0と入力したとき、jointB、jointCがロックされているならウェイト値はjointDへ
■jointAのウェイト値を0.0と入力したとき、jointB、jointC、jointDがロックされているならウェイト値は変化せず現状維持。
■jointAのウェイト値を1.0と入力したとき、jointBがロックされているならjointCが保有しているウェイト値のみ移動。
■jointAのウェイト値を1.0と入力したとき、jointB、jointCがロックされているならウェイト値は変化せず現状維持。
■jointAのウェイト値を1.0と入力したとき、jointB、jointC、jointDがロックされているならウェイト値は変化せず現状維持。
ちなみに、ロックするときは「選択範囲の反転」を有効活用しましょう。
ウェイト値の移り先がない状態に注意
ある頂点のあるインフルエンスのウェイト値が減少したとき、ウェイト値を保有し推移できるインフルエンスが他にない場合、頂点の近くにある適当なジョイントにウェイト値が飛びます。
具体的に言うと以下の場合です。
■ウェイト値が1.0のインフルエンスを編集
■ウェイト値が付いたインフルエンスを全てロック、それ以外にロックされてないインフルエンスがある。
大抵の場合頂点には複数のインフルエンスが付いており、あるインフルエンスを増減させてもいい感じにウェイト値を振り分けてくれるため何も考えずに編集してしまうが、同じ感覚で1.0のウェイト値がついた頂点をウッカリ触ってしまいいつの間にか変なウェイトが入っているというのが前者の場合です。
後者によくあるのは、基本的にウェイト値が付いたインフルエンス内で値が推移するので、ウェイト値が付いたインフルエンスだけ気にしてロックを入れてると、いつの間にかウェイトの流れる先を全て塞いでしまい氾濫してしまう場合です。
このミスによっていつの間にか変なウェイトが入ってしまい、何か特定の動きをしたときにはじめてミスに気が付くというのはよくある話です。特にジョイントが多かったりメッシュが細かかったりした場合は原因を探すのは大変です。
このトラブルを防ぐには、
「調整に関係ないインフルエンスを全てロックする」ということを心掛けることです。
これにより少なくとも全く予想外なインフルエンスが入ってくるということは防ぐことができます。
調整に関係あるインフルエンスとは、以下の2つです。
■ウェイトペイントで調整するインフルエンス
■ウェイトが移る先orウェイトを引っ張ってくる先のインフルエンス
つまり、
- ウェイトの調整をするときはこの2種類のインフルエンスを選択(ロックされてる場合は解除)
- 「選択範囲の反転」ボタンで関係ないインフルエンスを全て選択
- ロックボタンでロックする。
- 他のインフルエンスを調整する場合も1~3の手順を守る。
この流れを癖にして必ず守れば最悪な事態は回避できるはずです。
「使用インフルエンス選択+クリップ」のコンボ
インフルエンス(ジョイント)が多いキャラクターなどの場合、インフルエンスの数が数十個、数百個とかになることがあります。そうなるとペイントツールのインフルエンス一覧の中から目的のインフルエンスを毎回探すのは骨の折れる作業です(スケルトンだけに)。
スムーススキンバインドなどである程度近くのジョイント(インフルエンス)のウェイトがメッシュについているなら、調整したい頂点のインフルエンスをこの方法で効率的にインフルエンスを探すことができます。
手順は以下の通りです。
- 調整したい頂点を選択
- 「選択した頂点のインフルエンスを表示」ボタンを押す
- ピンボタンで選択中のインフルエンスだけ表示
ピンはペイントツールを閉じても保持されるので、作業中はインフルエンスを探す手間が省けます。
ちなみに頂点選択状態を解除する場合「ジオメトリの選択」ボタンを押すと頂点選択からジオメトリ選択に切り替わるので、いちいちツールを閉じる手間が省けます。
カラーランプの使用
ウェイトの表示の仕方です。デフォルトでは白黒のグラデーションですが、ウェイト値がどれくらい入っているか視認しにくいと思います。カラーランプを使用すると彩度のある細かいグラデーションでウェイト値を表現するので調整し易くなります。
ウェイトハンマーツールボタン
調整をしていると間違えて変なところにウェイト値を振ってしまったり、もしくは一部消してしまったりすることがあると思います。そんなときとりあえず良い感じでウェイト値を調整してくれるのがハンマーツールです。
選択した頂点に適用するとその周辺のウェイト値を拾って馴染ませてくれます。
ただインフルエンス数制限のあるプロジェクトでは余計にインフルエンスが増えてしまったり、もしくは広い範囲で適用したときに予想外に馴染ませすぎる場合もあるのでご注意ください。