LightWaveで二次元キャラ系人物モデリング奮闘記 ―ボーンウェイト編―

最終更新:2016/09/06

ウェイト・マップと一口に言っても用途は多岐にわたるので、ボーンが移動又は旋回することによってモデルが変形する影響範囲を決めるウェイト・マップをボーン・ウェイトと呼ぶことにする。

ウェイトの設定には「マップ」メニューグループにあるVertex Paintを使用する。簡単なウェイト・マップの設定の場合は同じグループのエアブラシツールやMAP値指定などを使用して設定していくこともできるんだけど、それらのツールは結果がプレビューに反映されるまでに時間がかかり、関節が多く多数のボーン・ウェイトを調整しなければならない人物モデルの場合は作業効率が悪く、微調整くらいにしか使えない。

Vertex PaintがあるおかげでLightWaveはなんとか実用的な3DCGソフトウェアとしての地位を保っていられると言っても過言ではない。古いLightWaveではボーンの組み込みはレイアウトで一発勝負だったため、左右の足のボーンの影響範囲がお互いに干渉し合わないように保険をかける意味で大の字型に人物モデルを作らなければならなかったりなど、今では笑ってしまうような苦労が多かった。

もっとも、そのVertex Paintも動作を軽くするためにサブパッチを適用した状態での表示ができず、厳密を期そうとすればするほど熟練を必要とし、最後にはやはり勘に頼らざるを得ないところが欠点と言えば欠点。サブパッチ適用後の状態を想像しつつトライ・アンド・エラーで補うより他にない。それでも、Vertex Paintがなかった頃よりはセットアップは遥かに楽になった。

ボーン・ウェイトの自動算出

何はともあれVertex Paintを起動する。表示モードは「Weight Value」にし、「Weight」タブを選択する。透視投影の「Pers」モードよりは平行投影の「Ortho」モードのほうが細部は見やすいかもしれない。モデルにはまだウェイトが設定されていないので全体が灰色で表示される。

Weight000

今回扱っているモデルにはIK用のものも含めて68本のボーンが組み込まれていて、ひとつひとつ手作業でウェイトを設定していくのは非常に骨が折れる。そこで、ある程度まではボーンの情報を元にVertex Paintに自動でウェイトを計算してもらう。「Calc」タブでフォールオフを「Distance ^ 32」に設定し、「Calculate Weights」ボタンをクリックするとすべてのボーンのウェイトが計算され、ボーンと同数だけのウェイト・マップが作成される。

Weight001

ウェイトが設定された箇所は赤く染まる。ただし、ウェイトを算出するとすべてのボーンのウェイトが再設定され、手動で設定したウェイトは失われてしまうという点には注意しなければならない。

ボーン・ウェイトの手動修正

まずは小手調べにRootボーンのウェイトを変更する。

Weight002

Rootボーンはモデルの変形には関係がないので、ウェイトを消してしまう(消さなくても特に問題にはならないけれど)。「Paint」タブを選択し、「Operation」を「ERA」にして赤い部分をマウスでなぞってみる。ウェイトは頂点に設定されるものなので、頂点付近をなぞると赤い部分の面積が少なくなっていく。グラデーションはあくまでも目安で結構いい加減なので、面の色よりもどの頂点までウェイトの範囲が及んでいるかに注目してペイントするようにする。

Weight003

ペイント・オペレーションには5種類あり、動作は次のとおり。

  • ADD
    加算オペレーション。元のウェイト値にValueで設定したウェイト値を足す。
  • SUB
    減算オペレーション。元のウェイト値からValueで設定したウェイト値を引く。
  • REP
    置換オペレーション。元のウェイト値に関係なく、Valueで設定したウェイト値で置き換える。100%など一定の値で塗りつぶしたい時に便利。
  • ERA
    消去オペレーション。元のウェイト値に関係なく、Valueで設定したウェイト値で塗りつぶす。普通は「0%」に設定して使う。REPオペレーションで「0%」を指定しても同じ。
  • OVR
    上書きオペレーション。Valueで設定したウェイト値が元のウェイト値を上回っている場合だけValueのウェイト値で上書きする。使いどころがあまりない。

Strengthなどの設定はエアブラシのように少しずつペイントしていくためにあるものだけど、RGBAの4チャネルで設定した色をブレンドしていくカラー頂点マップとは異なり、ボーン・ウェイトではパラメータがひとつなのであまり意味がない。

なお、「Brush Size」の隣りにある「Front」ボタンをトグルしてオンにしておくと表面に見えている側だけペイントされる。オフにしていると直接見えていなくてもブラシの範囲内に入った頂点はすべてペイントされる。

「Object」の隣りにある「Save」ボタンをクリックすると実際にモデルのボーン・ウェイトに反映される。ウェイトを変更している状態でVertex Paintを終了しようとすると次の画像のような確認ダイアログが表示される。ここで「Yes」を押せば同様にボーン・ウェイトに反映されるけど、変更の反映は「Save」ボタンで、変更を破棄したい時はダイアログで、と使い分けるようにしておくとうっかり大事な変更を破棄してしまったり、必要ない変更を反映してしまったりするミスを防げる。

Weight004

Vertex Paintが終了したら、モデラーウィンドウ右下の「W」ボタンを押し、頂点マップ名を選択するとボーンと同名のマップが大量にできているはず。

可動部分のボーン・ウェイトの修正例

ひとまずボーン・ウェイトはできたけれど、あくまでも自動算出なので必ずしも想定どおりのウェイトになっていないことがある。ここでは左肩を例にあげてウェイトを修正する。

左上腕のボーンを選択し、スケルゴン回転(Rotate Skelegon)でヘディングを適当な角度まで回して腕を降ろしてみる。サブパッチ適用状態でマウスのドラッグで回転させようとすると動作が重いので、数値入力ウィンドウ(Nキー)を利用するといい。

Weight005

左腕を降ろしてみたところ、次の画像で赤い矢印で示した部分に不具合があった。まず、髪の毛にも左上腕のボーン・ウェイトが影響してしまっていて、想定外の膨らみができている。次に、肩章にあたる部分が強く引っ張られて伸びきってしまっている。伸縮性の高い素材という設定なのであればこれでも問題ないけど、制服のようにほとんど伸び縮みしない服装の場合は型崩れと捉えられる。更にもっと問題なのは、ジャケットの脇に大きな陥没が生じていてインナーが見えてしまっている。重ね着はこのような問題を生じることがあるため、できる限り避けたほうがいい。場合によってはインナーは襟と裾を残して際どいところは削除してしまったほうがいいかもしれない。

Weight006

アンドゥ(Ctrl+Z)でスケルゴン回転を元に戻し、再度Vertex Paintを起動する。スケルゴン回転を元に戻さないとスケルゴンが回転したままのモデルが表示されるので注意。左上腕のボーンを選択し、Shift+Aで当該ボーンを中心にして拡大する。確かにボーン・ウェイトの範囲がかなり広いことがわかる。髪の毛にもうっすらではあるけど赤い範囲がある。

Weight007

Ctrlキーを押しながら赤いリングを掴んでボーンを回してみる。LightWaveでは赤リングはヘディング(H)、緑リングはピッチ(P)、青リングはバンク(B)と統一されているので、この際レイアウトに移る前に覚えてしまったほうがいい。

プレビューで確認済みだけど、肩章が肩に食い込むように大きく沈み込んでいるのがわかる。髪の毛の変形やジャケット脇の陥没も見受けられる。この状態でサブパッチがかかった状態を容易に想像できるようになれればいいんだけど、慣れが必要なのでVertex Paintの起動と終了を繰り返すことになるのは最初のうちは仕方がない。

Weight008

ひとまず、肩章の端に設定されているウェイトを消去して所定の場所に戻す。ボーン・ウェイトを消去する度に変形が復元されていく様子は少し面白い。

Weight009

左上の「Edit」ドロップダウンメニューから「Reset All Bones」を選ぶか、Shift+Rでボーンを最初の位置に戻せる。ジャケット脇を陥没させた原因になっていたウェイトも消去すると同時に、左上腕のボーン・ウェイトの範囲を狭くする。ボーンを回してみて、様子を見ながら袖のポリゴンがジャケットにめり込まない程度にウェイトを少し足しておく。ほんの10%程度なので、スクリーンショットではわかりづらい。

Weight010

右側へのボーン・ウェイトの複製

左上腕のボーン・ウェイトが設定できたので、右上腕にウェイトを複製する。「Edit」ドロップダウンメニューから「Copy」を選ぶか、Cキーでボーン・ウェイトをコピーする。

Weight011

右上腕のボーンを選択する。ボーンを回すまでもなく、左上腕のボーン・ウェイトと同様の問題が起こっているのがわかる。

Weight012

左上腕のボーン・ウェイトを左右反転してペーストする。「Edit」ドロップダウンメニューから「Paste -X」を選ぶか、Shift+VでX軸対称ペーストができる。

Weight013

左上腕のボーン・ウェイトが右上腕のボーン・ウェイトにも反映された。ただ、右上腕のボーン・ウェイトはジャケットの襟も巻き込んでいるようなので、ERAオペレーションで消去しておく。

Weight014

ボーン・ウェイト修正の確認

「Save」でボーン・ウェイトをモデルに反映し、Vertex Paintを終了する。再度、スケルゴン回転で左腕を降ろしてみる。今度は髪の毛の変形、肩章の異常な伸長、ジャケット脇の陥没は見られなくなった。脇が若干苦しいけど、これ以上はボーン・ウェイトでなんとかするのは難しそうなので、どうにもならなくなった時はジャケットのオブジェクトを再検討して修正したほうが良いような気がする。

Weight015

このような作業を繰り返して全身のボーン・ウェイトを設定していくわけだけど、慎重な設定を要求されるのは可動範囲の広い肩関節と股関節くらいで、膝、肘、指など曲げ伸ばしが特定の方向のみに決まっている部分は最初の自動算出の時点で大体できてしまっている。

途中経過

ボーン・ウェイトの設定が終わってしまえばリギングはほとんど終わったようなもの。レイアウトでのIKの設定をしなくても次の画像のような簡単なポーズをとらせることはできる。ひとまず両手を水平に広げて両足を揃えた棒立ちの状態からは卒業できた。

Weight016

補足

話が混乱するのでボーン・ウェイトのみに絞って書いたけど、ウェイト・マップの応用範囲は広い。これまでにも軽く触れてきたエッジ・ウェイトやサブパッチ・ウェイトの他にも、軟体シミュレーションであるSoftFXを利用してプルプル震えるゼリーを作ったり、布地シミュレーションであるClothFXを利用して足の動きには影響されるけどボーン・ウェイトだけでは実現が難しいスカートの「裾捌き」の再現などの物理演算の影響範囲をウェイト・マップで文字通り「重み付け」することができる。

また、グラディエント・マップにウェイトを入力してサーフェースの各種パラメータに変化を加えることもできる。例えば、自己発光度にウェイトを入力することで、同一のサーフェースを割り当てられた平面上にありながら自己発光度の輝度が異なる部分を作ることができる。そうすることによって、電球のような発光体を奥に仕込んだり、半透明のポリゴンの屈折率を設定したりといった微細な加工を簡略化できる。大きく拡大して見ることが少ない灯火類や人型ロボットの目などの細かな部分に有効。

関連記事

参考記事