はじめに
今回はPhysBoneを1から自力で設定する方法を解説します。
VRoidやBlenderでの自作アバターを使う方はこちらを見ながら設定してください。
DynamicBoneを持っておらず変換できない方へ
こちらの変換ツールをお使いください。

下準備
最新版SDKの入手
PhysBoneはVRChatSDKの中にあります。
VRChatのホームページにアクセス。
Download → Download SDK3 – Avatarsを選択。

ダウンロードした.unitypackageをProjectにドラッグ&ドロップ。
Importを押して最新版SDKをUnityに読み込んでください。

モデルを用意
Unityを入れてVRChat用のモデルを読み込みます。
初めてモデルを読み込む方はこちらをご覧ください。
今回は説明の為、ココアちゃんのFBXにマテリアルを割り当てて読み込みました。
FBXとはモデルそのままのデータです。(PhysBoneなどが設定されていない状態)
こちらを1から設定していきます。

(ちなみにココアちゃんは公式が既にPhysBone対応済みです)
Dynamic Boneの名残を削除
下記の条件でInspectorにMissingというエラーが出る事があります。
・公式モデルがDynamic Boneに対応
・公式モデルがPhysBone非対応
・使用者がDynamic Boneを購入してない
出た場合はこちらを参照してエラーを外してください。
PhysBoneの割り当て
HierarchyでモデルのBoneを開きます。
SceneでEキー → 回転させてボーンを確認。
PhysBoneを割り当てたいボーン見つけます。

割り当てたいボーンの一番上の階層にあるボーンを選択。

Inspectorを確認。
Add Component → 検索欄にvrc phと打ち込み。
VRC Phys Boneを選択して追加。

SceneでGizmosを有効化。
するとPhysBoneが白い線として表示されます。

再生ボタンを押してPlayモード。
WもしくはYキーを押して移動してボーンの挙動を確認。
スカートが揺れるようになりました。

これでPhysBoneの割り当てが完了です。
残りのPhysBoneを設定したい箇所にも同様の処理を行い追加してください。
一番上の階層のボーンが無い場合
モデルによってはこのようにスカートなどのボーンを束ねるボーンが無い事があります。
1つ1つ設定するのは手間です。なのでEmptyを使ってまとめます。

アバターの一番上の階層を右クリック → Unpack Prefabを選択。

PhysBoneを設定したいボーン群の1つ前のボーンを右クリック。
Create Emptyを選択。

GameObjectが制作されます。
PhysBoneを設定したいボーン群を上から下にかけてShift+クリックで複数選択。
GameObjectにドラッグ&ドロップで移動。

制作したGameObjectを選択。
Inspectorを確認。
Add ComponentでPhys Boneを選択して割り当てます。

Gizmosの表示を有効化。
白い線が表示されればPhysBoneの割り当てが完了です。

残りのPhysBoneを設定したい箇所にも同様の処理を行い追加してください。
とりあえずのパラメーター設定
色々問題がありますが初心者向けにとりあえずこれで動く設定を紹介します。
英語版ですがVRChatのスタッフの方が解説動画を上げてます。
この中におすすめされたパラメーター設定が載ってます。
これを元に私の解釈を少しいれながら設定します。
※記述する箇所は初期設定からの変更点のみのなります。
変更する内容について
変更する内容は下記の6つです。
・Pull
・Spring
・Immobile
・Limit Type
・Max Angle
・Radius
Forces~Collisonの中にあります。

ボーンを選択 → Inspectorを確認 → VRC PhysBoneより設定してください。

全て設定し終わるとこのような挙動になります。

スカートの設定
Pull = 0.1
Spring = 0.2
Immobile = 0.75
Limit Type = Angle
Max Angle = 90
Radius = 0.015 (形状に合わせて調整)
髪とケモミミの設定
Pull = 0.5
Spring = 0.8
Immobile = 0.75
Limit Type = Angle
Max Angle = 90
Radius = 0.015 (形状に合わせて調整)
尻尾の設定
Pull = 0.2
Spring = 0.5
Immobile = 0.1
Limit Type = Angle
Max Angle = 135
Radius = 0.015 (形状に合わせて調整)
胸の設定
Pull = 0.3
Spring = 0.85
Immobile = 0.7
Limit Type = Angle
Max Angle = 60
Radius = 0.04 (形状に合わせて調整)
この設定について
・Pull、Spring、ImmobileはVRChatのスタッフの方の解説動画を参考にしました。
・GravityはGravity Falloffとセットにしたかったので次の項目で解説
・Limit TypeとMax Angleは動作の範囲制限です。
ボーンの分割が荒いことを想定して大き目の数値にしました。
・RadiusはVRChatでボーンがつかめる範囲として表示されます。
・Max AngleとRadiusは形状によって上手く行かない事があるので各自で調節してください。
より細かな設定
クォリティを上げるのに大きな影響を与える設定項目について解説します。
おすすめ機能
Gravity + Gravity Falloff
Gravity(重力)とGravity Falloff(回転角度による重力の無効化)
この2つは見た目のリアリティに大きな影響を与えます。
特に髪の毛やケモミミに入れると特に効果的な機能です。
形を保持しながら傾いた時に重力がかかる表現ができます。

1.Gravityを1に設定しGravity Falloffの設定を有効化。
2.Gravity Falloff = 1に設定
3.Gravityの値を調節して形を調整。

ボーンの状態によるので”コレ”というパラメーターは紹介できません。
試行錯誤をしながら丁度いい設定をみつけてください。
Max Stretch
Max Stretch(掴みによるボーンの伸び具合)
服や髪の毛などを少しだけ伸びるようにするよリアリティが上がります。
(シワやヨレが引っ張って伸びた様子が表現できます)

これもボーンの状態によるので”コレ”というパラメーターは紹介できません。
試行錯誤をしながら丁度いい設定をみつけてください。

Grab & Poseの所にあります。
Integation Type → Advanced
Integation Typeは揺れ方の計算方法です。
SimplfiedとAdvancedの2通りが選べます。
初期状態ではSimplfiedはです。
Advancedにするとよりクォリティが上がります。
【Simplfied】
メリット:安定性が高い。構成が簡単。
デメリット:外部の影響で動く力が弱い。反応速度が遅い。
【Advanced】
メリット:外部の影響で動く力が大きい。反応速度が速い。
デメリット:安定性が低い。構成が複雑。
Advancedにすると表示されるパラメーターが変わります。
なので、先ほど『とりあえずのパラメーター設定』が崩れます。
Forth → Springの設定が崩れるので自分で試行錯誤して治す必要があります。

そのままでも動くので大丈夫です。
反応速度や安定性に違いはそこまで気になりません。
もし、より高いクォリティを目指す方はこちらの設定に挑戦してください。
突き抜け対策
ここでは一番標準的な『突き抜けてほしく無い所にコライダーを入れる』方法を紹介します。

Hierarchyで突き抜けてほしくないボーンを選択。

Inspectorを確認。
Add Component → VRC Phys Bone Colliderを選択。

Inside Bounds”以外”の設定項目を使って形を調整。

すると、突き抜けしなくなりました。

分かりやすいように大きめのColliderを用意。
スカートの挙動が変わってる事が確認できます。

Colliderの形などは用途に合わせて調整+試行錯誤してください。
これで突き抜け対策が完了です。
末端ボーンが上手く設定できない場合
末端のボーンにPhysBoneが上手く設定できない事があります。
対処法はTransform → Endpoint Positionを使って疑似的に終了地点のボーンを作る事。
これで治ることがあります。
詳細はこちらをご覧ください。
全てを理解したい方へ
より細かく動作Componentについて学びたい方はこちらをご確認ください。
Avator3.0のParameterを使う以外のほぼ全てはこちらで解説してます。
PhysBoneでAvator3.0のParameterを使う・使いたい方はかなりの猛者だと思います。
ぜひ、あなたの手でnoteなどを使って解説記事を書いてください…。
まとめ
今回はPhysBonesを1から自力で設定する方法を紹介しました。
VRChat上でのPhysBoneの動作のほぼ全てなどはこちらで解説しています。
ぜひこちらもご覧ください。
コメント