
VroidのヘアプリセットをUnity経由でXWearにする
はい、というわけで今回はVroidの髪型をUnity経由でXWearに変換して使おうって話です。 Vroidの衣装についてはアプリ内でXWearにして書き出しが可能ですが、髪型に関してはできないためUnityを経由することにします。ただし、SpringBoneがXWearのエクスポートに対応していないようなので、今回はVRM Converter for VRChatを使わせていただき、PhysBoneに変更してからXWearでエクスポートするっていう流れですね。
結構長いので目次
XWear Packager導入
※導入済みの方は飛ばしてください。
まずはXWear Packagerを入れるために、VRChat Creator Companion(以下VCC)を使用します

ダウンロードしたVCCをインストールして起動、Show Me Aroundをクリックして進みます。

Continueで進みます。

Unity Editorが見つからないと言われてますがとりあえずContinue

Install Unityをクリック

Unity Hubのインストールを勧められるので(なくても大丈夫なのかもしれませんが)Download the Unity Hub from Unity's websiteのリンクからとりあえずUnity Hubを入れておきます。
インストールが終わったらI have installed the Unity Hubから次へ進みます。

Install Unity 2022.3.22f1をクリック


終わったらContinue

新規でプロジェクトを作るのでCreate New Projectをば

そしたら右上のAvatarsを選んでCreate Project

新規作成するとManage Packagesが表示されると思います。まあ、違う画面でもとりまプロジェクトできてれば大丈夫です。

ここで1度ブラウザの方でpixivヘルプ参考にアドレスバーに以下を入力
vcc://vpm/addRepo?url=https://download.vroid.com/dist/VRoidVpm/vpm.json

アラート表示が出るのでCreator Companionを開くをクリック

自動でVCCが開き、以下のような画面になります。

コミュニティリポジトリの免責事項
警告:自己責任でダウンロードしてください!サードパーティのサイトを通じて利用可能なコミュニティパッケージには、マルウェアが含まれている可能性があります。VRChatは、コミュニティパッケージに関していかなる表明、保証、または保証も行わず、コミュニティパッケージに起因または関連するいかなる責任も否認します。
免責事項に目を通し、I Understand, Add Repositoryで追加します。
今回使うものは信用できるものなので問題はありませんが、よくわからないリポジトリは不用意に入れない方が良さそうですね。
追加するとVRoid Projectという項目が増えてると思います。

そうしましたら作ったプロジェクトに戻ってManage Projectをクリックし、Manage Packagesを再度開きます。

一番下までスクロールして、XWear Packagerの右端にある➕ボタンを押してください。

すると表示が濃くなり上のほうに来ると思います。1番右が➖になってればOKです。Open Projectより、一回開いてみましょう。

上部メニューにVroidが追加されていて、その中の、XWear Packager Windowが正常に開けるのを確認します。通常のXWear Packagerの導入はここまでで完了となります。

VRM Converter for VRChat導入
はい、ここからはVroidから出力したVRM0系のモデルをVTChat用に変換してくれるVRM Converter for VRChatを導入していきます。
※一旦さっきのプロジェクトは閉じてください。
VCCのSettingからPackagesタブにし、上記記事の「VRM Converter for VRChatのリポジトリを追加」を参考にRepository Listing URLに該当するURLを入力してAddをクリック

リポジトリが追加されると思いますので、先程と同様にManage Packagesより、VRM Converter for VRChatを➕ボタンで追加します。一緒に必要なものも自動で追加されますのでそのまま再度Open Projectしてください。

メニューにVRM0が追加されていればOKです。

XWear化したい髪型の準備(Vroid)
さて、ようやくVroidの作業に移ります。
今回は髪セットの項目にあるツインテールの下記を使用します。

VRM0を選択しVRMエクスポートします。

SpringBoneからPhysBoneへ変換
エクスポートしたVRMを先ほどVRM Converter for VRChatを導入したプロジェクト内に適当なフォルダを切って放り込みます。

放り込むと少し時間がかかりますが、プレハブが作成されますので、それを現在のシーンに追加してください。
追加したら、シーンのプレハブを選択した状態でメニューのVRM0からDeplicate and Convert for VRChatという項目を選択します。
ウィンドウが開くのでメッシュの結合のチェックを外して複製して変換ボタンを押します。

うまくいくと、モデル名(VRChat)という新しいプレハブが作成されます。
元のVRM由来のモデルはシーンから削除してOKです。あと、新しくできたプレハブも今回は髪だけ使う予定なのでHair以外のメッシュ(bodyとbody-body)は削除します。

髪だけになったかと思いますので、いらないボーンやコライダーなども削除していきます。まずはプレハブを右クリックしてUnpackします。

諸々削除できるようになるので、Head以下のボーンだけにします。あと目のボーンも消します。下記画像のように
ツインテ(VRChat)
┗ Hair
secondary
J_Bip_C_Head
┗ J_Sec_Hair1_01
J_Sec_Hair1_02
J_Sec_Hair1_03
以下略...
となっていればOKと思います。

次に、影響がどのくらいあるかわからないのですがsecondary内の不要なPhysBoneの設定を消します(Bustとか)
Hair関連のものだけ残します。
もし揺れ方が気になる場合はここで直すことになると思います。(▶の再生ボタン押して動かしてみると揺れ方は多少わかります)

そこまで出来たらsecondaryが座標0にあるので念のため全部の位置を0に合わせていきます。まずはHairのSkinned Mesh RendererのBoundsのCenterを0にします。

次にJ_Bip_C_Headの位置も0にします。

XWear形式でエクスポート
これで全部の位置が0にそろっていると思うのでメニューのVroidからXWear Packager Windowを開きます。
エクスポート形式⇒.xwear
エクスポート対象⇒モデル名(VRChat)
エラーと警告⇒アクセサリとしてセットアップ
※衣装でも良いかもしれないです。
を選びます。

警告はまだ出てますがエラーではないのでそのままエクスポートを実行します。

任意の場所を指定して、「出力が正常に完了しました」が出ればOKです。
Vroidの着せ替えで確認しましょう。

着せ替え動作確認
今回素体のほうは髪型を削除したサンプルAちゃんを使います。

衣装を追加より先ほど出力したXWearを選択します。

座標を0にしていたので、足元に表示されます。

髪型を選択してターゲットになるボーンをHeadに設定して自動フィッティングを押します。

良い感じになりました!!

かわいいですね。

後が少しはみ出してるので少々拡大縮小などで直します。

動きも確認。物理もちゃんと効いてますね。

ただ頭のコライダーしか残してないので体は貫通してしまします。これに関しては出力後にUnityで設定すればよさそうですが今回は割愛します。

VRM1.0出力で確認
まずはVRM1.0でエクスポートします。
※0.xは選べません

VRM1対応のVRMEditerで動作を確認。うん、良い感じです。

ちなみに…サンプルAちゃんはVroidモデルなのだからヘアプリセットでいいのでは?と思った方もいると思うのですが、やってみるとこうなります。

サンプルAちゃんとBちゃんは顔の横幅をだいぶ縮めて作ってあるのでプリセットの髪型は縦横比がおかしくなってしまうんですよね(一括で髪が選択できないから一つ一つ合わせるのが大変)。これ結構長年悩みどころだったのですが今回のXWearで解決しそうです。
XAvater出力で確認
はい、ということでせっかくなのでXAvaterも試してみましょう。

XAvaterエクスポートしたらさっきのプロジェクトでインポート…と思ったのですが、Mtoonのインポート周りでエラーになっちゃったのでXWear Packagerのみにした新規プロジェクトでインポートします。

どうやらVRM0とVRM1が混ざってるので両方のMtoonがいるのかな??ちょっとその辺よくわかってないですがとりあえず下記リンクのVRM及びUniVRMのunitypackageからそれぞれ余計なものはチェック外して単体で入れていきます。
これ書いてるときは下記が最新でした
・VRM-0.128.0_264a.unitypackage
・UniVRM-0.128.0_264a.unitypackage


導入したらインポートできるようになったのでライセンスを確認しましたにチェックを入れてインポート。


うまくインポートができたようなので早速VRChatに上げてみましょう。
マテリアルとか減らしてないからPoorだったけどまあ、テストなのでいいでしょう。サムネイルとか名前は適当につけます。


VRChat起動して確認。私はデスクトップモードしかできないので動きはそんなに確認できませんがとりあえず大丈夫そうでした。

おわりに
ちなみにXAvaterをUnityにインポート後、何も修正せずにアップロードしたのでVRChat上のエモートは表情のアニメーションだけ設定されてました。拍手とか手を振るとかデフォルトでよく見るアニメーションは別途設定しないといけないみたいですね。
たぶんですが、Avatars-3.0-Manager導入して
Editor/Resources/AV3M/DefaultAnimators/Action.controller
とか使ったら行けそうかなーと思ってます。が、今日は難しいのでまた今度できたら試してみたいですね。
以上です!長々とお付き合いいただきありがとうございました。
追記:せっかくなので作ったXwearの髪型置いておきます。利用規約的なものはVroidのヘアプリセットのまんまなのでVroidの規約に従ってお使いください。