
【VRoid】VRChatでパーフェクトシンクを楽しむための最適手順メモ
この記事は、Quest Proを使ってVRChatでいい感じにVRoidをパーフェクトシンクさせるために必要なツールのリンクと手順をまとめたものです。
パーフェクトシンクとは関係ない最適化作業なども含まれています。
ただ、Blenderを使ったり、あまりにも手間がかかるものは省いています。
この記事の手順をなぞるだけで、一発で程々に実用レベルのモデルが動作させられることを目指しています。
XWearを使った場合についても書いています。
アンカーリンクを付けているので、適宜飛んで必要なところだけ読んでいただければと!
事前準備
いきなりVRChatでVRoidのパーフェクトシンクを試そうとすると、トラブルの切り分けが難しいです。
大抵のVRC向けモデルは、Eyelids(まばたき)とEye Look(目線)が設定されているので、まずはそれでアイトラッキングができるか確認します。
VRoid Studioでの作業
XWearを使わない or パーフェクトシンク設定済みモデルがない場合
「透明メッシュを削除する」のチェックを外して、VRM0.0で書き出します。

XWearを使う場合
メッシュ削除で顔を消さないように気を付けながらXWearを着せて、XAvatarとして書き出します。

Unityでの作業
プロジェクトの作成
VRChat Creator Companion(VCC)でもいいんですが、それより高速で評判の良いALCOMを今回の記事では使用します。
アバタープロジェクトを作成し、下記のツールを読み込みます。
・VRCFury (Modular Avatarみたいな便利ツール)
・VRCFT - Jerry's Templates (顔トラのテンプレ)
・AAO: Avatar Optimizer (お手軽負荷低減ツール)
・(XWearを使わないなら)VRM Converter for VRChat
・(XWearを使うなら)XWear Packager
・(VRC向け衣装を着るなら)lilToon

一通り追加できたら、プロジェクトを開き、下記のツールをUnityPackage経由で読み込みます。
・(VRoidをXAvatarとして読み込ませるなら)UniVRM 1.0
※ UniVRMは最新だとバグりがちなので、少し古いのを入れましょう…
・HANA_Tool_v4 (_VRMの方)
・VRMClipEditSupporter (なくてもできますが、ある方が楽です)
・くちシェイプキー詰め合わせ (なくても可、ある方が可愛くなります)
・目シェイプキー詰め合わせ(なくても可、近々公開予定…)
VRM調整
まず、パーフェクトシンクを設定します。
設定済みのモデルがある場合は、
→ BlendShapeClipをARKit用シェイプキーに変換
書き出したVRM0.0を読み込ませて、HANA_Tool → Reader で、必要なシェイプキーを読み込ませ、HANA_Tool → ClipBuilder で、パーフェクトシンク用Clipを作成します。
VRMClipEditSupporterを使いつつ、いい感じになるよう調整します。
私は下記の感じでアレンジします。
eyeBlinkLeft/Right
┗ 眉毛と瞳のハイライトを少し下げて、にっこり閉じ目に変更
mouthLeft/Right
┗ 悲しい表情と怒り表情に変更
jawOpen, mouthClose
┗ くちシェイプキー詰め合わせのものに変更
調整できたらバックアップもかねて、VRM0.0で書き出しておきます。
BlendShapeClipをARKit用シェイプキーに変換
VRChatではBlendShapeClipは使えないので、調整したClipを HANA_Tool → ClipToShape で、シェイプキーに変換します。


このシェイプキーは HANA_Tool → Writer で書き出しておきます。
今後同じ顔なら繰り返し使えます!


パーフェクトシンクのコピー
今回使うモデルに直接パーフェクトシンクを設定した場合は
→ 【XWearを使わない場合】 VRChat用に変換
パーフェクトシンク設定済みモデルと今回使いたいモデルが違う場合は、先程Writerで書き出したデータをReaderで読み込みます。
XAvatarでも問題なく読み込めます!

XWearを使っているなら → 【XWearを使う場合】Faceのリネーム
【XWearを使わない場合】 VRChat用に変換
VRM Converter for VRChatを使って変換します。
モデルを選択した状態で、VRM0 → Duplicate and Convert for VRChat で、


肩の高さ: 0.01 (こうするとなで肩になりにくい)
メッシュの結合: チェックなし (顔が結合されると負荷的に困る)
で複製して変換します。
変換したら → アバターの編集
【XWearを使う場合】 Faceのリネーム
Jerry's Templatesは「Body」に対して実行するよう設定されているので、Bodyの名前を別のに変えてから、Faceの名前をBodyに変更します。

アバターの編集
・View Positionを眉間から少し飛び出るくらいに調整
・(VRM Converter for VRChatを使った場合は)Eye Lookを適宜設定
※ パーフェクトシンクには不要だが、デスクトップ時用
・(VRM Converter for VRChatを使った場合は)FXレイヤーを削除
※ ハンドジェスチャ表情を無効にするオプションがあるのだが、何故か効かず動いてしまうので、消すしかない… Converterが作るFXが特殊な設定をしている…?XAvatarで変換した場合は名前を変えた影響なのか、残したままでも動作しない
・Add ComponentからAAO Trace And Optimizeを追加
※ スキンメッシュレンダラーは結合しない方が多分いいと思う…

瞳の動き用アニメーションの調整
Jerry's Templatesはそのままだと目玉がギョロギョロ動くので、Eye Rotation系のアニメーションのキーをいじって大体1以下にします。

顔トラ用テンプレート追加
Jerry's TemplatesのARKit用Prefabをアバター内にドラッグドロップして入れます。

マテリアルなど適宜調整・VRChatにアップロード
アウトラインマスクテクスチャは差し替えが簡単で、とても効果が高いので、設定することを強くおすすめします!
↑ 顔用 形状によって困るところは違いますが、これなら全て解決するかと!ただ、かなりの広範囲を消すので、私は自作のを使ってます。
↑ 体用 指を曲げたときに出るゴミがなくなります!
VRChat SDK → Show Control Panel で、VRChatにアップロードします。
VRChatで確認
VRCFaceTrackingを起動してToggleをオンにし、VRChatを起動します。

リングメニューを開いて、OSCをオンにします。
リングメニューのエクスプレッション → Face Trackingから

・Lip Trackingを有効
・Eye Trackingを有効
・Visemes Enabledを無効(音声リップシンクが被ってしまうので)
これで顔が動くはずです!

ただ、他の人と話す場合はフェイストラッキングはネットワーク遅延が大きいため、Visemes Enabledは有効にすることが推奨されています。
(混ざるのが嫌でLip Trackingをオフにすると、Eye Trackingのみになり、それって……VRC標準機能で十分なのでは……)
アバターを編集して、同じBlueprint IDで再アップロードした場合は、前の設定ファイルが残ってしまっているので、リングメニューのOSCから「設定のリセット」を選びます。
VRCFaceTrackingも再起動した方が良さそうです…!

何回も微調整する場合は、自動でOSC設定ファイルを消してくれるツールがあるので、そちらを使うと楽そうです!
〆
リングメニューのFace TrackingのDebugから、ARKitのどのパラメータが動いているのかが分かるのですが、意外と動かないのが多くて、中々iPhoneのパーフェクトシンクと同じようにはいかないなと感じました…

ただ、テンプレートのおかげで設定自体はかなり楽なので、気合を入れたモデルのときは積極的に入れてもいいんじゃないかなと感じました。
余談:XWearについて
XWearで服を着せてからパーフェクトシンク化したモデルを再度VRMにするのはかなり手間がかかります…
VRM Converter for VRChatによるVRM変換は、MToon10に対応していないため、MToon設定がめちゃめちゃになってしまいます…
XAvatarとして書き出して、VRoid Studioに読み込ませてVRM1.0として書き出し、またUnityに持っていき、VRM1.0用のHANA_Tool_v5でExpressionBuilderを使えば、調整済みシェイプキーが100のExpressionが作成されるはずです。
それからVRM1.0として書き出せば、各種アプリで使えるかと…(未検証)
VRCに持ち込む予定がなくて、XWearを着たパーフェクトシンクVRMが欲しいだけなら、VRoid StudioからXWearを着せる前のVRM1.0と、XWearを着せたVRM1.0を書き出して、着せる前のVRM1.0にReaderで調整済みシェイプキーを追加して、ExpressionBuilderでExpressionを作って、着せたあとのVRM1.0にBuildCopyするのが良さそう、ですかね…(未検証)
ただ、v5にはCopyShapesAndClipsがないようなので(未確認)、VRM0.0時代より手間がかかりそうですね…くるしい…
今回はXWearを着せてからパーフェクトシンク化していますが、裸の状態でパーフェクトシンクを設定したVRMをXAvatar化して、服を着せるのも一つの手かと思います。
しかし、現状VRoidのボディにはヒール足を切り替えるシェイプキーがないため、足のヒール具合が変わるたびに結局、VRM0.0書き出ししてからCopyShapesAndClipsし、またXAvatarとして書き出すという手間が発生します…
XWear・VRM1.0のパーフェクトシンク、難しすぎる…ッ
参考文献
VRChatがOSC受信できてない場合、1.OSC>disable に設定
— kaku_vrc (@kaku_vrc) December 5, 2023
2.OSC> reset config
3.OSC>enable に設定
OSC用の古いアバターjson設定が残ってる場合動かないので、この手順で再生成してdebugしてみてください(~\AppData\LocalLow\VRChat\VRChat\OSC\ のjsonでもOK) https://t.co/RIbJQaKyYg
いいなと思ったら応援しよう!
