ほぼ破綻しないPBスカートの作り方 2024/10/25更新
VRChat向けにほぼ破綻しないPBスカートを作っていきます。2024/9/23現在の知見のまとめです。
細かい説明や画像はありませんので解読する気合いのある人向けの記事です。
今回使う技術(リンク先は参考文献)
①insideコライダー
②ねじり打ち消し機構https://booth.pm/ja/items/1819470
③PhysBoneの中のLimitsType(Polar)の設定
④PhysBoneの中のImmobileType(World)の設定
⑤RotationConstraint
⑥補助ボーン(膝下より長い丈の場合のみ)
わかる人向けのざっくり説明:
スカート丈が膝上以上の場合は、ねじり打ち消し機構を用いてinsideコライダーを脚に追従させることで、足を捻っても自然な動きをするスカートを作る。
膝下以下の場合は、スカートのボーンの根本をコピーして補助ボーンとし、そこにねじれ打ち消し機構を用いたinsideコライダーを設定してRotationConstraintの参照元とする。
どちらの場合も予めblenderでスカートボーンのボーンロールを適切に設定しておき、physboneのLimitsType(polar)やImmobileType(World)を調整して適度に揺れるようにする。
では、早速作っていきましょう。
まずはblenderから。
スカートのモデルができたら、スカートのボーンのボーンロールを再計算してワールド原点を向くようにしておきます。
また、ロングスカートの場合はここでスカートの根本のボーンをコピーして、補助ボーンを作っておきます。
Unityに持っていきます。
まずはねじり打ち消し機構のセットアップをします。これはinsideコライダーの親を作る作業です。
脚のボーンを直接親にすると、脚をねじった時にinsideコライダーもそれに追従してしまい、結果スカートも一緒にねじれてしまいます。ねじり打ち消し機構とinsideコライダーを組み合わせることで、脚に対するスカートの挙動がかなり正確になります。ちなみに、人間の脚は後ろ方向には思ったよりも上がらないものなので、スカート前面はinsideコライダー、後面は通常のコライダーで対応するのがおすすめです。
膝下以下の丈のスカートの場合は膝の曲げにも対応しなければなりませんので、スカートのボーンで直接insideコライダーを参照することができません。そこで、最初に作っておいた補助ボーンにinsideコライダーを参照してもらい、スカートの根本のボーンからRotationConstraintでその動きをコピーする形式をとります。
これに加えて通常のコライダーを併用することで、太ももの上がりに合わせてかなり正確にスカートが持ち上がるようになります。
最後の仕上げ、physboneの設定に移ります。細かい数値は好みもあると思いますので参考程度にしてください。
まずはImmobileTypeをWorldに設定し、数値を0.9あたりにしておきます。こうすることで、VRC上でスティック移動した際にスカートが激しく動きすぎるのを防ぐことができます。
次に、LimitsTypeをPolarに設定し、横方向の動きを10°程度まで制限します。縦方向については、スカートの外側に向かってかなり大きめに動くように数値を調整します。スカート丈が膝上以上の場合は、内側への動きは5〜10°程度まで制限してしまっても大丈夫ですが、膝下丈以下の場合はある程度余裕を持たせないと座った時にスカートの裾が跳ね上がってしまいます。
重力については全体としては0.05〜0.1程度がちょうど良いですが、ロングスカートの前面については0.3程度で数値を設定し、膝の辺りまでは重力が軽くなるようにグラフを設定すると座った時にスカートの裾が綺麗に降りてくれます。
以上です。
追加で得られた知見があれば随時更新して参ります。
2024/10/25 追加
・補助ボーンの位置が悪くてスカートがうまく持ち上がらない場合は、単純に位置を少し下に下げると反応が良くなる傾向にある。