[VRM0.x]SpringBoneの個人的Tips
VRM0.x系スプリングボーン(Spring Bone)設定の個人的なメモ
自分はこうやっているというだけで、これが効率的かはわかりません
Stiffness Force と Drag Force の解釈
Shiffness = 揺れる範囲
Drag = 揺れる時間
基本的にこの解釈で考えるとやりやすいと思います
まず Drag を弄って揺れる時間をイメージに合わせ、それからStiffness を弄って揺れる範囲を決めていくのが自分流です
実際には双方が影響しあうので、たとえば Stiffness が4付近だと Drag は1.0付近まで上げてようやく揺れる感じになります。逆に Stiffness が0に近い場合、Drag は小さくても十分揺れます
各人の好みによりますが、胸の Drag の数値はさほど高くない場合が多いです。たとえばセレスティアちゃんは同梱の公式VRMだと、胸の Drag の値は0.113となっています
当たり判定の球はどこにできるか?
スプリングボーンの当たり判定となる黄色い球は、ルートボーンにしたボーンの子オブジェクトの座標に発生していきます。ただしルートボーン自体も影響を受けて回転します
ボーンの位置=関節の位置として、曲がる節目の部分に当たり判定が発生するという認識で差し支えないです
極力枝分かれさせない
SpringBone は枝分かれさせての使用を想定していません。不具合なく動くこともあるので"絶対"という程でもないのですが、想定外の使い方なので、やむを得ない場合を除いて避けるようにしましょう
よくある間違いが、スカートや髪のルートボーンを指定してしまう方法です。これをやると挙動がおかしくなる可能性が高いので、房の根本を一本ずつルートボーンに指定するようにしましょう
実際には衣装を組み込むときに胸のボーンが二重になる、髪や紐の揺れ物の先にボーン付のアクセサリがあるなど、避けようのない場合もあります、そういうときは諦めてお祈りしましょう。ダメなら泣きながら該当部分のメッシュとボーンを消しましょう
Gravity は0から始める
Gravity、つまり重力は扱いが難しいので最初は0で一度完成としています。必要なら他の揺れ物の設定後に改めて調整していきます
なぜなら、重力を効かせると必然的に全てが中央下に収束して地味になるからです。とくに横に広がるタイプの髪型など顕著です
ただ、上手く設定できると素晴らしいのは確かです。復元力 Stiffness と重力の兼ね合いに注意しつつ、場合によっては重力がかかった状態で意図した見た目になるようボーンを動かすなど、地道に調整していきましょう
スカートが破綻するときの対処
スカートの Hit Radius を大きくする
Stiffness を上げて硬くする。Drag も高くして揺らす
スカートのルートボーンのスケールを弄って全体を大きくする
スカートのルートボーンを動かして全体を持ち上げる
脚のコライダーを徐々に大きくする
脚のコライダーを逆側の足の方向にも追加して板状にする
スプリングボーンを小分けにして巨大コライダーで対応
Clothにする(VRM化は不可なのでネタ枠)
スカートの Hit Radius を大きくする
もっとも基本的な対処法です。ここが大きいほど脚のコライダーとの隙間が大きくなり、破綻が発生しづらくなります。ただしスカートは外側に開いていくし、内側に押し込むこともできなくなります
個人的には、直立状態で再生してテストしたときに、ほんのちょっとだけスカートが膨らむ程度まで Hit Radius を大きくするようにしています
別の目安としては、当たり判定となる黄色い球同士の縁がくっつくまで大きくするというのもあります。もしスプリングボーンかコライダーの球体のどちらかが極端に大きい(小さい)場合には、大きい方を小さくして、そのぶん小さい方を増やして双方を同程度の大きさにすることもあります
Stiffness を上げて硬くする。Drag も高くして揺らす
逆効果になることもありますが、Stiffness を上げると改善することがあります。当然揺れづらくなるので、苦し紛れに Drag の値も上げて可能な範囲で揺らします
スカートのルートボーンのスケールを弄って全体を大きくする
破綻は、ようするにスカートと足の間に十分な隙間がなくなった結果です。そこで見た目が変わってしまいますが、スカートのルートボーンの Scale 値を増やすことでスカート自体を大きくし、少しでも隙間を稼ぐという発想です。実際にはそれで稼いだ隙間の分、スプリングボーンの Hit Radius かコライダーも大きくします
スカートのルートボーンを動かす
スカートは基本的に下部が膨らんだ円錐形なので、持ち上げれば結果的に脚との隙間が大きくなります。この方法は単体でも機能しますが、上記のスケール増加と組み合わせて、スカートの形状変化を相殺するのも良いでしょう
脚のコライダーを下側ほど大きくする
先ほども書いたようにスカートは円錐形のため、下に行くほど横方向(水平方向)のボーンの間隔が開き、脚のコライダーが貫通しやすくなります。それを見越して脚側のコライダーを大きくしていくことで破綻しづらくするという発想です
脚のコライダーを体の中心方向にも追加して板状にする
脚から体の中心方向に向けてコライダーを2列(またはそれ以上)並べる方法です。これは主にアバター正面方向のスカートの破綻に対して有効です
スプリングボーンの衝突判定はどちらも球状のため、球同士の衝突結果として「お互いが横にずれて」判定の隙間を突き抜けてしまうことがあります。
これを防ぐため、コライダーを並べることで疑似的に板に近い形状にして、スプリングボーン側がずれる確率を減らすという発想です
ただし、あまりにも広げ過ぎると、脚を外側に向けた時に余計なスカートを押し出してしまうので、コライダーの横方向の範囲は体の中心~逆側の足の太さの半分程度までにとどめるようにしています
スプリングボーンを小分けに設定して大型コライダーで対応
スカートの前側、後ろ側、というふうにスプリングボーンの Root Bones の項目を分け、それぞれに大型コライダーを設定します。大型コライダーによって面でスカートに接するようにする方法です
かなり効果的です。しかし画面上の表示が直感に反した光景となることと、ルートボーンとコライダーの関係を理解して設定する必要があることから、少し難しく感じるかもしれません
こちらはスプリングボーンの項目を分けるため、衝突するコライダーを指定することができます。そのため大胆なコライダー設定が可能となります
この作業を自動化するツールが存在するようですが、使っていないのでわかりません
Clothにする(ネタ枠)
ネタ枠です。自分も使ったことはありません
UnityのClothシミュあるいは MagicaCloth(有料アセット) を使って制御する方法です。根本的にVRM形式ではなくなるため、多くのアプリでは読み込むことすらできません
ただし頂点ごとにで衝突判定を取るため、破綻耐性は圧倒的です。しかも大型コライダーと違い、必要な所な所はしっかり凹みます。使えれば他と違う雰囲気が出せそうです
VSeeFace などの一部のアバター表示アプリでは独自仕様にて対応していることがあります。ただしそれ用の改変が必要です。たとえば VSeeFace では専用のVSFアバターという規格があり、SDKが提供されています
あるいは EVMC4U で直接Unity内で動かす手もあります。負荷を考えるとビルドしたい所ですが、そこまでいくともはや配信アプリです
インサイド式コライダーに注意
変換前のVRChat用アバター・衣装をクリックして画像のように緑の何かに囲まれていたら「インサイド式コライダー」というテクニックです。VRChatでは有益ですが、VRM0.x系の SpringBone とは仕組みが違いすぎてまともに変換できません
そもそもコレは何なのか?
VRChatで使われてる PhysBone のコライダーにはインサイド(inside)という設定があり、コライダーの範囲内に物理判定を「閉じ込める」ことができます
利点は揺れ物の動く方向を良く制御できること。破綻や予想外の方向への揺れを抑え、かつスカートを蹴り上げるようなダイナミックな動きにも対応できるため、広く利用されています
VRM0.x にはインサイドの設定が無いため、変換はできるものの、ただちに破綻します
じゃあどうしろってんだ!!
スカートの場合だと、房の根本のボーンを探し、上記記事を参考に自力で SpringBone コンポーネントとして登録しましょう。コライダーに関してははこの記事を眺めながら頑張りましょう
ただし PhysBone のコンポーネントは、SpringBone のように空オブジェクトで集中管理されている場合と、コライダーのようにボーンに直接アタッチされている場合の両方があります。これは作者によって異なるので頑張って探すしかありません
以上です。殆どメモですが何かの参考になれば