VRChat用アバターの髪のDynamicBoneの設定を支援するツールです。コライダーを含め、髪などのDynamicBoneをまとめて設定できます。
また、図のように首を傾けたときに髪ボーンの根元のみを曲げて下に垂らす髪を作成することができます。普通の設定で重力を入れるよりも、ふわっとした形を保ちます。
髪を垂らす機構は、髪の根元にGameObjectの層を追加して、極めて小さい重力付きのDynamicBoneを付けることで実装します。この機構をここではHairHangと名付けております。
髪の根元は重力で曲がりますが、メインのDynamicBoneには重力をかけないため、本来の髪のカーブを保つことができます。
ただし、1つの節に対してDynamicBoneが2箇所必要になり、複数の節を1つのDynamicBoneでまとめることができないため、通常よりも多くのDynamicBoneを要することに注意してください。
例えば左図のように、Headの直下に「LongHair_L」というボーンがあったとすると、HairHang機能の使用によって3つのGameObjectが追加されることになります。
「LongHair_L_root」にはDynamicBoneが設定されていて、僅かに下に位置している「LongHair_L_branch1」が傾いたときに重力で垂らす役割になります。
「LongHair_L_branch2」はこれらの仕組み上では不要ですが、これがないとDynamicBoneの副作用によって髪ボーンの位置・角度が崩れることになります。(⇒詳しい解説はこちらにあります)
なお、「LongHair_L_root」のDynamicBoneは左図のような設定になります。SkirtSupporterのSkirtHangのように常に水平を保つのではなく、やや傾きの影響を残します。
以上のような操作が自動発生することを踏まえた上で、当ツールのHairHang機能を使用してください。
まず、こちらからLonghairSupporterのunitypackageをダウンロードしてください。
UnityのVRChatアバターのプロジェクトでインポートしたら、ProjectウィンドウにLonghairSupporterフォルダが追加されるので、その中のLonghairSupporterプレハブをSceneのどこかに配置してください。
最初に、Humaoidアバターの場合、AvatarAnimatorにアバターのルートオブジェクトをドラッグ&ドロップでセットしてください。すると、Head、Chestに該当するオブジェクトがそれぞれ自動的にセットされます。
Humanoidアバター以外の場合、AvatarAnimatorに何もセットせず、Head、Chestに相当するオブジェクトを個別にセットしてください。
ただし、これらはDynamicBoneColliderをセットする先として必要な情報のため、DynamicBoneColliderを必要としない設定を行う場合、省略することができます。
髪ボーンの設定欄はHairsGroupによって複数に分かれていますが、1つのHairParentに髪ボーンの親オブジェクト(通常はHead)をセットすると、HairBonesに配下のGameObjectが自動的にセットされます。
HairParent配下のGameObjectが全て取得されますので、髪ボーン以外は削除してください。BoneObjectをDeleteキーで削除することで、項目自体を削除することができます。
再びHairBonesを自動設定させたい場合は、一度HairParentとHairBonesを全て削除した上で、HairParentを再設定します。
HairTypeはBackHair(後ろ髪)、SideHair(横髪)、Bangs(前髪)、Others(その他)の4種類があります。相当するものを選択してください。
なお、Head直下以外に髪ボーンの親オブジェクトが存在する場合は、HairsGroupのSizeを増やした上で、新たに発生した欄に設定してください。
HairHangを使用しない場合は、複数のボーンをまとめた親オブジェクトを設定しても良いですが、HairHangを使用するのであれば、ここで親オブジェクトを設定してはいけません。必ずそれぞれの節を設定するようにしてください。
EffectSettingの項目ではHairTypeごとにどこのDynamicBoneColliderを当てるか、HairHangを使用するかの設定ができます。
ColliderTarget:通常はデフォルトのまま、後ろ髪はChest、横髪と前髪はHeadが妥当でしょう
HairHang:使用するのであれば、長い髪の部位に設定するのが良いです。HairHangを使用しない場合はすべてのチェックを外してください。
SizeとNameは変更不可となっております。
DynamicBoneResetにチェックを入れることによって、LonghairSupporterプレハブの中にあるDynamicBoneModelの内容でDynamicBoneを自動設定することができます。DynamicBoneModelはHairTypeごとに存在します。
逆に、既に髪ボーンに存在するDynamicBoneの設定を維持したい場合、このチェックは入れないでください。ただし、全てのボーンにDynamicBoneが既に存在していることが条件です。そのとき、Collidersのみが自動更新されます。
DynamicBoneModelの設定は自由に変更できます。揺れ方の設定内容まではサポートできませんが、Play実行しながら調整する方法をこのあと説明します。まだ設定内容がわからないうちは、デフォルトのままでもいいでしょう。
以上の設定が終えたら、「DynamicBone&Collider生成」ボタンで実行します。
(InnerObjectsの項目は変更不要です。)
アバターがプレハブ化されていて、HairHangを使用する場合、GameObjectの親子関係を移動するためにプレハブを解除する必要があります。「Prefabを解除しても問題ないですか?」というダイアログが出て、問題がなければOKを押してください。
メッセージ欄に「DynamicBone&Collider生成完了」と出れば成功です。
エラーが発生した場合、ダイアログが表示されます。
「〇〇〇をセットしてください」 …… 必須項目が未入力です。
「DynamicBoneResetがオフの場合、すべてのHairBonesにDynamicBoneをアタッチしてください」 …… 設定後、すべてのボーンにDynamicBoneがセットされていることが必須です。手っ取り早いのはDynamicBoneResetにチェックを入れることです。しかし、現在の設定を崩したくない場合はDynamicBoneResetにチェックを入れず、すべてのボーンにDynamicBoneをアタッチし、不足のないようにしてください。
「設定箇所に他のDynamicBoneが影響しています」 …… 実行は成功していますが、このツールによって設定したDynamicBoneの他に、そのボーンに影響するDynamicBoneが残っているので注意してください。そのままにすると、DynamicBoneの影響が二重になります。
実行後、Headの下に「DBC_head」というプレハブが付き、その中の「DBC_head_actual」にDynamicBoneColliderがあります。通常のOutside型コライダーです。
位置や大きさはそれぞれのモデルで調整を行ってください。
Chestの下には「DBC_chest」というプレハブが付き、その中の「DBC_chest_actual」にDynamicBoneColliderがあります。初期状態で、図のような背中から後ろの範囲で大きく設定されたInside型コライダーがセットされています。
とにかく髪を前に突き抜けさせないことが目的で、あまり細かい調整は必要ないかと思いますが、モデルに適合しない場合などは変更してください。
先述したとおり、DynamicBoneの揺れ方は各自で調整する必要がありますが、調整をサポートする機能があります。
DynamicBoneModelの中にParameterCopyHというコンポーネントがついています。
この「DynamicBone設定コピー&ペースト」ボタンを押すと、DynamicBoneModelのDynamicBoneの設定が対応する髪ボーンに反映されます。UnityのPlayボタン実行中でも可能です。
Playボタン実行中だった場合、停止すると設定が元に戻ってしまいますが、そこで「停止後ペースト」ボタンを押してください。直前のコピー内容がDynamicBoneModelを含め全てに再反映されます。
モデルの構成は多種多様なので、中にはツールに適合できないケースがあるかもしれません。その場合はご容赦ください。
もし、こういう事例がダメだったよ、ということがありましたら、ほけ(@hoke946)までご連絡ください。可能な限り改善を検討します。
その他、ご要望などがありましたら、お気軽にご相談ください。
このツールの仕組みについて掘り下げたPDF書籍ができました。
Boothで無料頒布しております。気になる方はお求めください。
ツールがよかった! という投げ銭代わりにもなっております。