【VRC】ロングスカートについて考える・パート2【PhysBone】
さて、前回はスカートの雛形を作るところまでが出来ました。
ここからウェイトをスカート本体に転送し、アーマチュアを統合、といった作業をして、最終的にUnityでPhysBoneの調整をします。頑張りましょう!
本体のスカートに合わせる
アーマチュアの整理
まずウェイトを転送する前に、アーマチュアの整理をしていきます。
現状、元々のモデルのスカートボーンが邪魔になっている状態なので、それを消しておきます。

アバター本体、あるいは衣装本体のアーマチュアに編集モードで入り、スカートのボーンだけを削除していきます。分かりづらくならないように、雛形のアーマチュアやメッシュは非表示にしておきましょう。
まずルートボーンがある場合は、ルートボーンを選択。次にスカートボーンの一番上のボーンをぐるっと一周分選択してください。

それから「Control」+「テンキーの+キー」を連打すると、接続されているボーンが順に選択されていきます。スカートボーンは殆どの場合接続されていると思うので、この方法で時短が出来ると思います。うまくスカートのボーンが選択できたら、デリートキーで削除してください。
よくわからない方は、一本ずつ消して行ってください。消すという結果が必要なのであって、それに至るプロセスはどうあっても大丈夫なので。

続いてアーマチュアを統合します。
スカート雛形用に作ったアーマチュアを表示させてControlを押しながらクリックし、アバター本体、または衣装本体のアーマチュアをControlを押しながらクリック、オブジェクトメニューから統合します。

統合出来たら、雛形スカートのルートボーンをHipsの子に設定してアーマチュアの設定は完了です。

ウェイトの転送
まず本体スカートに頂点グループを割り振らなくてはいけないので、本体スカートの親子関係を一旦外します。
アウトライナーで本体スカートを選択し、Shiftを押しながらアーマチュアの下側にドラッグしてください。アーマチュアの子から外れたらOKです。

その後改めてスカート本体を「空のグループで」ペアレントし直してあげると、スカート本体に雛形スカートの頂点グループが割り振られます。

続いて、スカート本体に「データ転送」モディファイアを設定します。
ソースを雛形の円柱、ミックスモードは置き換え、ミックス係数は1、「頂点データ」にチェックを入れ、「頂点グループ」を選択します。
マッピングは色々試すのが良いのですが、「最近接面の補間」が比較的うまく行きやすいように思います。

設定できたら、モディファイアを適用してください。適用ボタンは✕ボタンの左隣にある下矢印マークの中に格納されています。

その後ポーズモードで色々動かしてみて、具合を確かめてみてください。
場合によってはこのウェイト転送の作業を何度も繰り返すことになると思うので、データは大事に保存しておきましょう。

ウェイト転送はこれで完了となりますが、ウェイトがパキパキして見た目が悪いなと思ったら、雛形にサブディビジョンサーフェスをかけてハイポリにして、それからウェイト転送をしてみても良いかもしれません。
また、転送後のウェイトにスムースをかけるのも良いかもしれません、このあたりはトライアンドエラーなので頑張って作業してみてください。
そもそもスカートがローポリだといくらボーンを増やしてもキレイにはいかないので、スカートのポリ数が足りなそうだなと思ったらループカットなどで適宜増やしてあげてからウェイト転送をする、など色々試してみましょう。
FBXの書き出し
書き出しの設定については下記の通り行ってください。
また、書き出す前にバックアップを取ったら、雛形のメッシュは削除しておいてください。

エクスポート時の詳しい注意点などはこちらの記事も参考にしてください。
Unityでのセットアップ
ここまで出来たらもう少しです。UnityにFBXをインポートして、セットアップを行います。
セットアップの手順については割愛しますので、こちらではPhysBoneの設定にのみ触れていきます。
足にコライダーを入れる
まずは足に沿ってコライダーを入れていきましょう。
この時、空のGameObjectを作ってその中にコライダーのコンポーネントを持った子を追加して行ってください。
まずUpperLeg、LowerLegにそれぞれ普通にコライダーを入れます。
その後改めてGameObjectを追加し、足のやや内側にもコライダーを設定します。
つまり、足のボーンそれぞれに2つずつコライダーを設定するということです。

次にPhysBoneの設定です。

さしあたってこんな具合に設定してみましたが、Gravityが強くなるとスカートが重力に引っ張られて形崩れしやすくなります。ふんわりしたスカートを維持したい場合、重力は弱めにしたほうが良いでしょう。
ただ、重力が弱いと椅子などに座ったときに裾が膝から落ちなくなってしまうので、ある程度はかけたほうが良いでしょう。今回はカーブを使って裾にいくにつれ重力が強くなるように設定してあります。
また、Collisionも同様に裾に行くにつれて大きくなっていくようにカーブを設定しています。このあたりはお好みにもよりますので色々試してみてください。
設定したら再生ボタンを押して色々動かして試してみてください。
納得行く動きになったら完了です。

さて注目のパフォーマンスですが………。

言うまでもなくベリプになってしまいました。これは足に入れるコライダーの数が多いからでしょう。ある程度は仕方ないと割り切ったほうが良いのかもしれません。
おまけ
ここからは簡単なカスタマイズ方法をご紹介します。
今回はPhysBoneのコンポーネント数をできる限り減らす方式でやりましたが、そこにこだわらなければもうすこしいいやり方があるかもしれません。
Blenderに戻って、ボーンの親子関係を見直します。
前方~斜めあたりがどうしても貫通に弱いので、それを完全にUpperLegの子にしてしまうという方法です。
UpperLegから新規にボーンを伸ばし、「Upper_Skirt_L」など適当な名前をつけておきます。そして前方のスカートボーンを左右3列ずつくらいを、Hipsではなく先程作った「Upper_Skirt_L」の子にします。そうすることで、UpperLegが動いたときにスカートボーンも追従しつつ揺れる、という設定が可能になります。
この時前側センターのボーンは不要になるので削除し、中央の辺も溶解して消してください。

ボーン数を単純に減らしたい時、ミニスカートなどに流用したいときはボーンを消して、そこのウェイトを担っていた頂点を溶解で消してしまえばOKです。
雛形配布しています!!
記事で作った雛形をこちらで配布しています。MITライセンスなので自由に使ってください。
今回紹介した方法はあくまでも一例なので、この雛形をもとにもっと良い設定などを見つけたらまたシェアしていただけると私もとても助かります。