【VRChat】髪の毛が体に貫通するのを直す方法!PhysBone・Colliderを使った対策を解説

Motaです!新しく別アバターの髪型や購入した髪型を導入したとき、移動したり顔を上げたりすると、髪の毛が顔や体に貫通してしまうことはありませんか?

せっかくお気に入りの髪型を導入しても、動いたときに髪の毛が体へめり込んでしまうと気になりますよね。

今回は、VRChatで髪の毛が体に貫通するのを直す方法を、PhysBoneのLimitやColliderなどを使って解説します。

一つ一つ丁寧に解説していきますのでよろしくお願いいたします。
初心者向けの方法から、少し難しい方法まで順番に紹介していくので、「髪の毛の貫通を直したいけど、何をすればいいのか分からない」という方にも参考になればと思います!

少し難しい方法ではBlenderを用いてボーン・ウエイト追加まですごく簡潔に説明します。(※これを見るだけでできるとは思っていませんのでご容赦ください。)

スポンサーリンク

髪の毛の貫通を直す前の事前準備

今回は新たにツールなどを導入する必要はありません。使用するアバター・髪の毛などをUnityプロジェクトに導入しておきましょう。

VRChatで髪の毛の貫通を直す3つの方法

今回は、
1.ボーンが曲がる角度を決めてあげる方法(PhysBoneのLimitを調整する)
走った後止まった時に体の前まで髪の毛が出ちゃうときの一番簡単な直し方。ボーンに動いてほしい範囲を指定してあげて髪の毛が上に持ち上がり過ぎたり、前方向に行きすぎたりを抑制します。調整の幅が直感的に分かりやすいというメリットがありますが、その分、根元のボーンが大きく動く長いボーンへの抑制力は低くなります。

2.コライダーを使用して体の方に行かないようにする方法(PhysBone Colliderを設定する)
コンポーネントでコライダーを貫通してほしくないところに設置し、大きさ・場所を細かく調整することで、ボーンが入れない場所を作ります。髪の毛が前に行ったり、腕の中に入ったりするのを抑制します。デメリットが少なく、できることが多いです。

3.髪の毛の動きを体に追従してあげる方法(Parent Constraintを利用する)
根元のボーン自体の動作を制限し、ある程度決まった動きだけをさせることによって変なところへ行かないように抑制する方法。ボーンの動きを固定化するデメリットがある分イレギュラーが起こりにくい。
の順に説明していきます。

MotaMota

いくつかをかけ合わせて行うことでより効果が出るのでお勧めです。

別アバターの髪型を使用する場合の位置合わせ

※すでに髪の毛を導入済みで、貫通だけを直したい方は「方法1」まで飛ばして大丈夫です。

アバターに新しく髪の毛を導入したい場合は、アバターと髪の毛(別アバターでも可)を【Project】から【Hierarchy】にドラッグアンドドロップします。

別アバターの場合は、髪の毛用アバターを選択し右クリックします。出てきたタブから【Unpack Completely】を選択します。

アバターの中に入ってる髪の毛と、【Armature】以外の場所を選択し(shift押しながらクリックで複数選択)削除します。

髪の毛用アバターについているコンポーネントをすべて削除します。(コンポーネントの名前の上で右クリックし、【Remove Component】を選択すると消すことができます。)上の画像のようになればOKです。

今回は【MA Bone Proxy】を使用してある程度の位置を合わせます。

【Head】を選択し、【Add Component】から【MA Bone Proxy】を入れ、【配置モード】と、【Bone reference】を画像のように設定します。

アバターにドラッグアンドドロップします。サイズや位置が合わない場合は、【配置モード】【子としてワールドの位置と向き】にし合わせます。

見た目が好みになったらOKです。

方法1.ボーンが曲がる角度を決めてあげる方法
(PhysBoneのLimitで髪の毛の動く範囲を制限)

【Hierarchy】から使用したいアバターの髪の毛(今回はイフザフラット)の▼を押し、【Armature】の▼を開きます。

【Armature】の中から髪の毛のボーン【HairBack】を選択します。(※今回は【VRC Phys Bone】が入っているボーンの名前が【HairBack】ですが【PB_𓏸𓏸】や、【Hair】などにPBのコンポーネントがある場合はそちら)

【inspector】にある【VRC Phys Bone】のコンポーネントから【Limits】の▼から【Limit Type】を選択し、ボーンの動く範囲の角度タイプを決めます。

【Angle】 ・・・・・動く範囲を円錐の角度を決められる設定

【Hinge】・・・・・動く範囲を円の弧(2D)の角度を決められる設定

【polar】・・・・・・動く範囲を球面上のpitch・yawで角度を決められる設定

【Scene】を確認しながら、青くなってる範囲が髪の毛(ボーン)の動く範囲なので、髪の毛が前に行かないように【Max Angle】【Rotation】を設定します。

VRChat上で実際に歩いたり走ったりして、髪の毛が体に貫通しなければ調整完了です。

ただこのやり方だけですと、、、、

このように頭を上に上げた時などに貫通してしまいます。そこで、方法2・3と併用することで頭を上げた時に貫通しなくなります。

MotaMota

頭を動かして貫通するものの直し方は方法2・3で紹介するよ

方法2.コライダーを使用して体の方に行かないようにする方法
(PhysBone Colliderで髪の毛が体に貫通するのを防ぐ)

【Hierarchy】から使用したいアバターの髪の毛(今回はイフザフラット)の▼を押し、【Armature】の▼を開きます。

【Armature】の中から髪の毛のボーン【HairBack】を選択します。(※今回は【VRC Phys Bone】が入っているボーンの名前が【HairBack】ですが【PB_𓏸𓏸】や、【Hair】などにPBのコンポーネントがある場合はそちら)

【VRC Phys Bone】のコンポーネントから【Collision】にある【Radius】の数値を画像の大きさぐらいに設定します。数値の設定は真似しても同じ大きさにならないと思いますので、【Scene】を確認しつつ調整してください。
※【Radius】が大きすぎると動きがかなりおかしくなるのでデフォルトで設定してある場合はいじらないことをお勧めします。
【Collision】にある【Colliders】の▶を押します。

出てきた【Size】入れたいコライダーの数を入れます。
今回は腕の左右で4つ胸で1つなので5つにしました。

ボーンが貫通して欲しくないパーツを【Armature】から選択します。

【inspector】から【Add Component】を押し、【VRC Phys Bone Collider】を選択します。

【Scene】を確認し、体とだいたい同じサイズになるように【Shape Type】【Radius】・【Height】の数字と、位置【Position】を合わせます。(緑色の線がコライダー)

MotaMota

体より少し小さくても大丈夫。

髪の毛のボーン【HairBack】を選択します。

【inspector】にある【VRC Phys Bone】の【Colliders】へコライダーを作った部位を選択しドラッグアンドドロップします。
最初に指定した個数よりColliderを増やした場合は、追加した数に合わせて【Size】の数字も増やします。

VRChatに入り、髪の毛が貫通していなければ完成です。

方法3.髪の毛の動きを体に追従してあげる方法
(Parent Constraintで髪の毛の動きを体に追従させる)

【Hierarchy】から使用したいアバターの髪の毛(今回はイフザフラット)の▼を押し、【Armature】の▼を開きます。【Armature】の中から髪の毛のボーン【HairBack】を選択します。

【Add Component】から【VRC Parent Constraint】を選択します。(①)
出てきたコンポーネントの【Sources】+ボタンまたは数字(デフォルトは0)を押して増やしアバター側(髪の毛側ではない)の【Neck】をドラッグアンドドロップします。(②)
その後、【Is Active】チェックを入れます。(③)

VRChatに入り、髪の毛が貫通していなければ完成です。

3つのやり方の比較

頭を上げた時下げた時の比較

 

動いた時の髪の毛の動き

1つ目のやり方

 

2つ目のやり方

 

3つ目のやり方

※今回のこの三つのやり方は【前後に動いて貫通しない動き】にしているのでパラメーターの調整や、コライダーの配置の調整で動き方などが変わります。

上級者向け|Blenderで髪の毛にボーンを追加して貫通対策する

ボーンがない髪の毛や、ボーンが足りない髪の毛の貫通対策について軽く解説させていただきます。

Blenderで髪の毛にボーンを追加する手順

Blenderにて使いたいアバターをインポートします。

①  アバターの髪の毛を非表示にします。
②  ファイルを開きます。

【ファイル】を開いた後、【インポート】から【FBX】を選択します。

使用したい髪の毛を選択し、【FBXをインポート】を選択します。

MotaMota

今回は解説用に用意したモデルを使用して紹介します。

アバターのヘッドのボーンを選択し、コピー(Shift+D)してオブジェクト化(P)します。

MotaMota

髪の毛のボーンがすでにある場合は、追加は必要ありません。

髪の毛を曲げたい部分にボーンを作ります。

髪の毛のオブジェクトを選択した後、分離させたボーンを選択し、右クリックします。
【ペアレント】からの【空のグループ】を選択します。

増やしたボーンを選択しウェイトを割り当てます。

髪の毛と、ボーンを選択し【エクスポート】【FBX】を選択します。

画像のように設定し、名前を決め【FBXをエクスポート】します。

その後は、Unityにインポートし元のマテリアル等の設定や、【VRC Phys Bone】を設定します。先の解説で説明したとおりに設定することで貫通しない髪の毛を設定することができます。

まとめ

今回は髪の毛の貫通について解説させていただきました。

本記事の内容は全てまとめて使うこともできます。自分好みの動きを目指すのであれば、紹介したやり方だけでなく、別の知識も必要になってきます。ただ、活用することで貫通や、ある程度の動きの制限の部分で好きな動きを目指す手助けになるかと思います。

上級者向けの方まで読んでいただいた方は、少しやり方は変わってきたりしますが、髪の毛のゆれ物だけでなく、衣装やアバターのゆれ物を増やすことができます。
今回の記事でボーン追加をやってみて、他の物でもやりたいと思った方は是非試してみてください!

MotaMota

最後までお読み頂きありがとうございました!!今回は髪の毛の貫通について解説させていただきました。わかりやすい方法を選抜してお伝えしたつもりですが、今回の方法以外にも貫通対策はあったりします。
詰めれば詰めるほど自分の好きにやりたい動きになると思います!!

今回使用したモデル