見出し画像

VRoid製VRMモデルをPhysBoneに良い感じに対応させる【暫定版】

ご近隣の皆様こんばんは。
ご近所系Vtuberおじさんのがそさんです。
この記事ではVRChatに正式に実装されたPhysicsBone(以下PhysBone)をVRoid製VRMモデルにイイ感じに対応させる方法を解説します。
*この情報は2022/4/25現在のものです。
*【2023/06/05追記】参考数値はPhysbone1.0用です。Physbone1.1の場合、重力設定値が必要な際はより大きな数値を用いる必要があります。

用意するもの

  • 最新のVRoidStudio正式版から出力したVRMモデル

  • Unity2019.4.31f1

  • 最新のVRCSDK(Avater3.0用)

  • 最新のVRM Converter for VRChat

インポートしよう

まず通常通りUniVRMからVRMをインポートし、そのままコンバーターで変換をかけます。この際、Springbone>PhysBoneを自動変換しないようにしてください。

なんで自動変換じゃだめなの?

理由は二つあります。以下のとおり解説します。

  • アバターパフォーマンスに無意味に影響する

下記画像のようにVRoid製VRMモデルには大量のSpringBoneColliderが仕込まれており、自動変換するとこれが全部PhysBoneColliderに代わります。

ピンク色の球が全部SpringBoneColliderです

当たり前と言えば当たり前ですが、これがアバターパフォーマンスやアバターランクに影響しないわけがないので、不要そうな場所のコライダーを削除することになります。
しかしながらなにぶんこの量なので削除するよりも新規で追加したほうが手っ取り早いです。

  • 編集しづらい

そもそもSpringBoneとPhysBoneは全く別の揺れ物コンポーネントなので、揺れ方やパラメーターの癖にも少々違いがあります。(=性質の近いパラメーターに同じ数値を入れても同じ挙動にはならない)
なのでVRoidStudio上での揺れ方を再現するためにPhysBoneのパラメーターを調整したいのですが、VRoid製VRMモデルはSpringBoneのコンポーネントがすべて「secondary」という場所に格納されているので、どのコンポーネントがどの箇所のパラメーターをつかさどっているのか非常にわかりづらく、また複数選択ができないので一括でパラメーターを調整できず、非常に手間がかかります。

ここに(SpringBoneの)全てを置いてきた……!
同じ数値でよくても1本ずつ調整しようね(地獄)

そのため、今回はこのコンポーネントをコンバート時にすべて吹き飛ばし、新規でPhysBoneを挿入していきます。

PhysBoneを導入しよう

PhysBone導入~パラメータ調整

揺れもの設定をすべて排除したモデルがコンバートされたら、まず下記画像のようにヒエラルキー内からHead以下の「J_Sec_Hair~~」となっている箇所を複数選択しましょう(Shift+下矢印かCtrl+左クリックで複数選択できます)

画像クリックで拡大

その後「Add Component」で「VRC Phys Bone」を選択してください。

検索欄で「phy」と入力すればすぐ出てくると思います

そうするとこのように髪の毛にPhysBoneが追加されます。

そのまま複数選択状態にしておけば一括でパラメーターを調整できるので、そのままパラメーターを調整してしまいましょう。
なお、PhysBoneはDBと異なり対象のヒエラルキーにコンポーネントを追加してしまえば(今のところ)Root transformを指定する必要がないのでDBよりちょっと楽です。

揺れ方はそれぞれ好みがあると思いますので、ここではそこまで詳しく解説はしません。参考資料として私の設定値を載せておきますので参考程度にどうぞ。

長髪用(重力が必要ない方は「Gravity」を0にしましょう)
短髪、前髪用(重力が必要ない方は「Gravity」を0にしましょう)

衝突半径の設定

次に衝突半径の設定です。初期値は0になっていますが、このままだと掴んだり触れたりすることができません。また、コライダーにも反応しなくなります。
しかしながら大きくしすぎると干渉がひどくなって思った通りのヘアスタイルを維持できない状態になってしまうので、大きすぎない値(0.005)ぐらいで数値を入れておきましょう

私の参考値(数値の入力欄右側の「C」を押すと上記画像のようになり、DBと同じくCurveの設定が出てきます)

接触、掴み、固定の設定

接触判定、掴み判定、位置固定判定のチェックボックスは上記画像のとおりです。初期値はすべて有効なので、不要なもののチェックを外して無効にしましょう。

他にもいろいろパラメーターあるけど…?

その他のパラメーターなどで例えば前髪を顔にめり込みづらくしたりすることもできますが、今回は簡単な設定のみ解説しますので割愛します。
ここで説明しなかった項目は一旦触らなくても大丈夫です。

コライダーを設定しよう

PysBoneの対象のコライダー数を設定する

「Size」に数値を入力してエンターすれば対象指定の枠が出てきます

次に、それぞれのボーンの接触判定の対象となるコライダーの数を設定します。先ほどと同様に対象の髪の毛を複数選択した後「Colliders」の「Size」の項目に任意の数を設定します。
といってももとのVRMのようにハチャメチャな数は必要ありません。
長髪でもせいぜい「Head」「Neck」「Upper Chest」の3か所程度、短髪なら「Head」の1か所程度で問題ないはずです。
*自動コンバートでPhysBoneを追加した際にアバターパフォーマンスが悪くなるのは、ここに大量のコライダーが指定されているためです。

対象の箇所にコライダーを設定する

髪の毛に指定枠が設定出来たら、次にコライダーを設定しましょう。
PhysBoneを導入したときと同様にヒエラルキー上の対象の場所を選択し「Add Component」>「Phys Bone Collider」でコライダーが追加されます。

画像クリックで拡大
Shape Typeは、個人的には「Capsule」がおすすめです(画像は参考値)

あとはご自身の部位のサイズに合わせてコライダーの位置やサイズを調整しましょう。

それぞれのPhysBoneにコライダーを適用させる

コライダーを設定出来たらもう一度ヒエラルキー上の髪の毛を複数選択しましょう

「Collider」の「Size」の値が同じじゃないボーンは一括で設定できないので注意(画像クリックで拡大)

「Size」の下にある「Elements~」の一番右「◎」ボタンをクリックするとコライダーの設定されている箇所が一覧で表示されるので、設定したい箇所を選べば設定完了です。

衣装やアクセサリーなどにも同じような設定を施せば設定完了です!
おつかれさまでした!
あとはいつも通りAvatar Descriptorやマテリアル等調整してアップロードしましょう!

注意!(バグ?のはなし)

バグなのか仕様なのかわかりませんが、VRoidモデルのアクセサリ(猫耳やウサミミ)やワンピースのスカートなどにPhysBoneを設定し掴み判定を有効にすると、なぜかそのボーンのウェイトが乗っている箇所のメッシュがVRC上で消し飛ぶことがあります。なんで……?
不安な場合は掴み判定を無効にしておきましょう。
ちなみに、いまのところ髪の毛では発生してません。なんで……???

この記事が気に入ったらサポートをしてみませんか?