髪のウェイトについて リギング編
今回はUnityのDynamicBone向けのリギングについて解説します。
こちらも自分用のメモを兼ねるので参考程度に御覧ください。
作業内容
・DynamicBoneなどを用いた、コライダーを適用する前提の揺れる髪を作る。
使用ソフト
Blender
Unity + DynamicBone(有料)
髪のトポロジー
ウェイトペイントを考慮すると画像のようなZ軸(横に対して)に水平な流れで作ると楽。
もちろんカーブで作ったのならそのままでも良いし、揺らし方や造形次第ではウェイトペイントよりもトポロジーを優先するべきだと思う。
あくまでこのやり方は1例。
ボーンの数とコライダー
ボーンの数は、多ければ多いほど歪みの少ない動きになるし少ないと歪みが大きくなる。
長い髪には複数本で構成して、短い髪は1本でも問題ない。
長い髪は複数のボーンで構成する。
近い髪などは1本のボーンでまとめても良い。
実装先のアプリケーションなどに、使える揺れものボーン数などが明記してある場合は合計数に注意。
DynamicBoneでは、ボーンの末端にコライダーを設定できる。
これは多ければ多いほど細かい設定ができる反面、パフォーマンスに大きく影響するので注意が必要。
画像は実験的にボーンをギチギチに詰め込んだものだ。
親子設定
髪ボーンは基本的にヒューマノイドボーンで言うHeadを親とする。
この時、パフォーマンスを向上させる目的でHair_rootを作る場合があるのだが、これはスクリプトの使用数を抑えてパフォーマンスを向上させる目的がある。
ただし、rootボーンを基準に揺れるので歪みが大きくなり成約もある。
実装可能であれば、親となるボーンに対してそれぞれコンポーネントを適用するのが良い。
root基準で揺らした場合。
rootから離れれば離れるほど歪みが大きくなる。
親ボーンで揺らした場合。
大きな歪みが起こりにくくなる。
髪に大きなリボンなどの別の揺れる物がある場合は、髪と一緒に揺らしながらリボンも揺らす必要があるかも知れない。
こんな時は、近い髪のボーンを親にしてリギングすると良い。
揺れる髪の上に揺れものを付ける場合、これをHeadを親にすると髪に追従しないので注意。
ロングヘアの例。
末端は髪が別れているので、そこからボーンを分岐させて揺らしても良い。
ウェイトペイント
ボーンが1本の場合は、まずは1で塗る。
それからHeadを髪全体を1で塗った後に、髪の末端から0でグラデーションをかける。
グラデーションツールはこの場合はリニアで。
ウェイトペイントの頂点選択でマスクしながら塗る。
Blenderの仕様で範囲がよくわからない。
複数のボーンのウェイトは、ボーンを中心に塗る。
これを繰り返す。
こちらもグラデーションツールで塗ると良い。
必ず隣接するボーンと均等になるように塗ること。
ボーンの真ん中から塗るので、隣接ボーンの真ん中までグラデーションさせれば良いだけ。
付け根の揺れ方の制御はHead側でやる。
Head全体はこんな感じだ。
髪ボーンが入る部分に対してすべてグラデーションをかけよう。
このグラデーション範囲が大きければ大きい程、コライダーによる制御が難しくなるので、グラデーション区間は短ければ短いほど良い。
ただし、短すぎると根本から折れるように髪が曲がるので注意。
グラデーションをかけないと…
このように折れ曲がってしまうという訳だ。
正規化を自動で行っていない場合は、手動でHeadを選択して"すべてを正規化"を実行しよう。