引き続き、ウェイトマップ修正アプローチについて説明します。
Vertex Paint の Falloff Distance は全てのウェイトマップに対して適用されてしまうため、こつこつ修正したウェイト値が元に戻ってしまいます。そのため、ウェイトマップを修正する前に Falloff Distance 適用で良い結果が得られるようにしておく必要があります。
修正したウェイトマップをなるべく壊さずに特定のスケルゴンに対して Vertex Paint の Falloff Distance を実行してウェイトを得たい場合は、面倒ですがスケルゴンの名称を変更して新たにウェイトマップを作成させる事で可能です。(スマートな方法は後述)
手首の箇所のスケルゴン回転位置を修正したいとします。先ず、関節位置を修正します。赤で示した二つのスケルゴンに対してウェイトマップ Vertex Paint の Falloff Distance でウェイトマップを得るようにします。
スケルゴンの位置を修正したらスケルゴン毎、オブジェクトを別レイヤにコピーします。どちらでもかまいませんが、コピーしたレイヤに対して修正をかけます。
“スケルゴンエディタ” でウェイトを修正したいスケルゴン以外のスケルゴンを選択し、名称を変更します。
接尾辞に _m をつけて一括変更します。
次にスケルゴンに定義されているウェイトを none に変更します。
OK ボタンを押してスケルゴンエディタを終了します。左の下画面が結果です。
Vertex Paint で Falloff Distance ^16 を実行します。修正したいスケルゴンとウェイトマップは変更していませんので、従来のウェイトマップは変更されます。
スケルゴンエディタで修正した箇所は新しくウェイトマップが適用されますので、以前のウェイトマップはそのまま残ります。
Falloff Distance を実行すると極端に低いウェイト値が適用されますので忘れないように削除しておきます。(こちらで説明)
追加したもう一つのウェイトマップ(スケルゴン)に対しても同様の処理を行ないます。それ以外の新規に作成されたウェイトマップは削除するので、この処理は必要ありません。
これで必要なウェイトマップは得られていますので後は整理するだけです。レイヤ1にあるオリジナルのポリゴンメッシュだけを削除しスケルゴンは残します。Vertex Paint で修正したレイヤ2にのポリゴンメッシュをレイヤ1にカット、ペーストして差替えます。
レイヤ2に残った名前を変更したスケルゴンは “スケルゴン回転” ツールで確認後に削除します。問題があった場合はお世話になりますので。
ここで作成しておいたスケルゴン回転ツール用スケルゴンを使って確認します。
スケルゴン回転ツールでの確認は Normalize オプションの有効、無効も確認しします。必要があれば Vertex Paint で Normalize を実行します。
レイアウト上の Bone で確認して問題があれば、直接ウェイトを修正するか再度同じ事を繰り返します。
作成したウェイトマップに問題がなければ、作成した接尾辞 _m が付くウェイトマップを削除します。ウェイトマップの削除は ”頂点マップ” パネルで行えます。
既存のウェイトマップが置き換えられないよう修正したくない箇所は別のウェイトマップを作成するという方法ですが、手間が掛かり面倒です。
同様の処理をもっと簡単に行なう方法です。先に以下のサイトで配布されている Transfer Any Vmap というスクリプトを入手してインストールしておきます。
http://www.neko.ne.jp/~asagi/P2P/LScript/mod.html
頂点マップ編集関連のスクリプトが多数公開されています。お勧めです。
スケルゴンの位置を修正してから別レイヤにスケルゴン、メッシュ共にコピーします。ここまでは同じです。
コピーしたメッシュに対して Vertex Paint で同条件である Falloff Distance ^16 を実行します。
オリジナルレイヤをアクティブにして “Cull マップ” で修正したスケルゴンに割り当てられているウェイトマップが適用されたポイントを選択します。Cullマップを実行する前にポイントモードにしておきます。
Threshold Magnitude を 1 にすると100%以下のウェイト値が割り当てられたポイントが対象になり、Select にチェックを入れると該当するポイントが選択された状態になります。
このケースではウェイトマップは二つですので、実行後、Vertex Map を変えて再度実行します。
左は二つのウェイトマップが適用されているポイントが選択された状態です。
次にオリジナルのレイヤ1をアクティブにし、先ほど Vertex Paint の Falloff Distance ^16 実行したレイヤをBG表示します。
先に入手しておいた Transfer Any Vmap を実行します。
コピーするウェイトマップを選択、頂点マップに Weight を選択して OK します。
このスクリプトは同一位置にある別オブジェクトの頂点(Vertex)に適用されているウェイト情報を同期する(置き換える)ことが出来ます。
同期元はBGレイヤに配置する事が条件となっています。
以下結果です同一メッシュの頂点情報のコピーではなく、他のメッシュオブジェクトから頂点情報を持ってくる事が出来て使いようによっては大変便利です。
他のメッシュサーフェイスからウェイト値を持ってくる事が出来るので、Vertex Paint の Falloff Distance を活用する幅も広がると思います。
隣接する頂点のウェイト値は合計100%にはなっていませんので、先ほどと同様、スケルゴン回転の Normalize オプションを有効、無効を切り換えると影響を確認し、必要があれば Vertex Paint で Normalize を実行 しておきます。
本来なら、こうならないようにウェイトマップを調整する前にスケルゴンのサイズ・位置を詰めておくべきですが、Vertex Paint の Falloff Distance はそこそこ狙ったスキニング結果が得易いので修正アプローチの一つとしてはありだと思います。