見出し画像

2024年8月 VRoid を VRChat アバターとしてアップロードした記録

2024年8月に VRoid Studio製VRMモデルをVRChatアバターとしてアップロードしたときの記録の文書を公開します。

VRoid と Unity (Unity Hub) とVCCについて、一般的な情報源から把握していて、すべてインストールや管理ができることが初歩です。
文書には、そこから先のことを記してあります。
ちなみに筆者は2024年7月から VTuber 活動を開始した身の上ですが、こちらの記録はアクター側の記録であり、実際のところ、2024年8月4日にVRChatを始めたVRC初心者です。

この記事は、個人的なメモの文書を移植したものです。全体的には「自分の経験としてできたこと、および注意事項、疑問点」について、タイムラインを兼ねたものとなっていますので、経験済みのワークフローを後から再び実行しやすくするための参考として記録しました。内容の正確性を保障しません。私は外部の情報源に依拠して実行したので、各自にとって未経験のワークフローであれば元の情報源に依拠してください。

この記事の情報は、2024年8月時点のものです。


VRoid の VRMファイルのアバターを VRChat 用に変える

基本的には以下の情報源を参照されたい。
私の文章は、それらの要点抜粋や個人的な注記とする。

*1 VRMからVRChatへアップロードする流れ https://qiita.com/100/items/7315fe3a7eb75732ae43
*2 VRMアバターをVRChat用にコンバートする方法 https://note.com/kohadachan/n/nee57568e30c3
*3 【VRChatアバター改変・軽量化基礎】VRCEmote(デフォルトのエモート)を使用可能にする https://note.com/chiffon_pudding/n/n332bbbe64d94
*4 【VRChatアバター改変・軽量化基礎】オブジェクトをUnitypackage化して別プロジェクト間で使い回せるようにするhttps://note.com/chiffon_pudding/n/n88da5edf3131

※ほかにもあるが、適宜、対応する情報源を参照する。*3 の作業に関しては、勉強目的としてアリではあるが、実用だと、あまりおすすめしない。あとで EmoteBox 3.12 を使うためである。

必要なツール
・VRoid Studio
・VRChat Creator Companion (VCC, VRChat SDK 3.0 と Avatar 3.0に準拠)
・Unity 2022.3.22f1


VRoid Studio での作業

VRoid Studioを起動し、目当てのモデルを選択する。
VRMエクスポート画面を開く。
そのままエクスポートすること。
Lady Aska方式の作業では [透明メッシュを削除する] と [髪の毛メッシュを結合する] の2つのチェックボックスのチェックを外していたが、ここでは外さないで、そのままエクスポートすること。
VRMのバージョンはVRM 0.0 で(後続の VRM Converter for VRChat は 0.0用 UniVRM を使うため)。


VCC での作業

情報源*1 にあるような方法または何かしらの方法で、以下のものをVCCの左メニューの下の [Settings] [Packages] から導入:
・Modular Avatar (Installed Repositoriesでの名前はbd_)
・VRM Converter for VRChat (Installed Repositoriesでの名前はVRM Converter for VRChat Packages)
・AAO: Avatar Optimizer (Installed Repositoriesでの名前はanatawa12)

※なお、よく見る"lilToon"(Installed Repositoriesでの名前はlilxyzw) というのは、シェーダーの一種である。アバターごとにどのシェーダーが必要になるか、これ以外の場合もあるため個々に確認してそちらを導入すること。任意のアバターが必要とするシェーダーがインストールされていない場合は、プレハブ(プレファブ, .prefab)がピンク1色の表示となる。対応するシェーダーを導入すると、ピンク状態は解かれる。

左メニューの [Projects] から [Create New Project] を押す。
Select template で [Avatars 2022] ("Avatars"は2019なので間違えて選ばないように) を選ぶ。
[Create Project] でプロジェクトが作られる。

Projects に戻り、新しいプロジェクトの右側にある [Manage Project] を押す。
以下のものを [Manage Packages] から追加:
・Gesture Manager (Av3Emulator とそっくりとのことなので、Gesture Manager が最新SDKのバージョンに対応していないときはそちらに)
・Avatars 3.0 Manager・Modular Avatar (bd_)
・VRM Converter for VRChat
・AAO: Avatar Optimizer

※Projectを立ち上げた後、「Assets に.unitypackageデータをそのままドラッグアンドドロップする方式」のもので別途、入れても入れなくてもよいツールがある。PhysBonesSetter。それと、今回の作業で使わないものはMeshDeleterWithTexture。

これらの名前の項目の右側にあるプラス (+) マークを押し、Unityのプロジェクトで使えるようにする。
[Open Project] を押すと、しばらく読み込みなどされるので、待つ。


Unityのプロジェクトが立ち上がったら、画面下側のアセット (Assets) 内に目当てのVRMファイルをドラッグアンドドロップ (DD) したいところだが、それでVRMが展開されたとき、散らかってしまうので、先に好きな名前のフォルダを、右クリックのコンテキストメニューの [Create], [Folder] から作成する。
フォルダ名はそのVRMと同じ名前にすると判別しやすい。
作成したフォルダを開き(中身が空の状態)、目当てのVRMファイルをDDして表示されるメッセージに [OK] すると、いろいろファイルが展開される。
その中の [目当てのVRMと同じ名前. prefab] を画面左側の Hierarchy 内にDDする。

FirstPersonOffsetが視点を定義している。
VRoid製だとこれは顔の奥にあるため、両目の間の表面まで引っ張り出す。
Inspectorの右上にあるプルダウンメニュー [Overrides] をクリックして、[Apply All] ボタンを押す。
※後続の [複製して変換] をした後に修正したければ、Hierarchyにある[キャラ名_(VRChat).prefab] を選び、画面右側のInspector [View] [View Position] [Edit] から変更できる。Zの数値をプラス調整するのがおすすめ。0.01刻みでかなり移動するので、Z = 0.08とかに。


ヘッダメニューの[VRM0], [Duplicate and Convert for VRChat] を押す。
出てくるウィンドウ内の最も右下にある [複製して変換] ボタンを押す。
新しく [キャラ名_(VRChat).prefab] が作られ、Hierarchyにも追加される。

Hierarchyにある [キャラ名_(VRChat).prefab] を選び、画面右側のInspectorからいろいろ設定する。


VRChat のアバターの軽量化や最適化を望む(Very Poor, VeryPoor から脱却する)場合の設定はこうする:
最下部の [Add Component] をクリックし、AAOなどと検索して出てくる [AAO Trace And Optimize] を選択する。
詳細な内容については、そのままでよい。


VRChatでVRoid製アバターは静止した状態で目の挙動がかなり派手になるので、それを直すにはこうする:
[VRC Avatar Descriptor (Script)] [Eye Look] [Eye Movements]の1番目のバーはCalm寄りに。
2番目のバーはShy, Confidentの中間に。
[VRC Avatar Descriptor (Script)] [Eye Look] [Rotation States]の中身は
X0 Y0 Z0
X-1 Y0 Z0
X1 Y0 Z0
X0 Y-1 Z0
X0 Y1 Z0

とする。


VRChatでVRoid製アバターの髪や服や胸の動作は違和感が強いので、それを直すにはこうする:
Hierarchyにある [secondary] を選ぶ。
画面右側のInspector, [VRC Phys Bone (Script)] [Forces]
Pull … 揺れたときに、元に戻る力です。1に近いほど、揺れなくなり、0に近いほど、ふわふわになります。
Spring … 揺れたときの揺れの勢いです。1に近いほど、ばねのようにぶんぶんと振り回され、0に近いほど、自然に戻るようになります。
Gravity … 重力です。1に近いほど地面に引っ張られ、-1に近いほど空に引っ張られます。

髪 Pull: 0.3 および Spring: 0.2 (ショートヘアーだとPull: 0.5 および Spring: 0.8)
服 Pull: 0.1 および Spring: 0.2
胸 Pull: 0.3 および Spring: 0.85

とする。


これを必要とするすべてのコンポーネントで行うと、かなり手間になるので、一括で処理したい場合は次のような方法がある。
PhysBonesSetter (yukineko作 https://booth.pm/ja/items/3866175 ) を導入する。

事情により、中略!

※PhysBonesSetterのウィンドウが開いている間、"GUI Error: Invalid GUILayout state in PhysBonesSetter view. Verify that all layout Begin/End calls match" というエラーが大量に裏で発生する。これはUnityが長年放置しているバグとされている。2022.3使う人たちからの報告が多い。エラーそのものはなんでもないため、Consoleから [clear] するだけでよい。

※PhysBonesSetterで一括処理された部分は、どういうことか不明だがプレイ画面との出入りで一部が元の状態に戻ってしまう。そうなってしまった部分は何度PhysBonesSetterで処理しても同じことになるため、手動で入力して直すしかない。煩わしいと思ったら、PhysBonesSetterをそもそも使わないほうが楽かもしれない。

→最初の直面から数日後、PhysBonesSetterを、基本的に使わないという判断にした。


「PHYSBONE 衝突チェックの数」という項目が、Masashi-240809だと860/512と上限値を大きく超過していた。
これは英語だと Phys Bone Collision Check Count とされる。
Hierarchy の [secondary] をクリックして Inspector に [VRC Phys Bone (Script)] が多数表示される。
そのうち、髪 (hair) のマテリアルのところにある [Collison], [Collider] で、physboneの当たり判定として使われるコライダーのうち、「この髪がそこに衝突して貫通しても、別に困らないだろう」あるいは「この髪がそこに衝突などすることはないだろう」というものを削除する。
1個のコライダーにつき数個ほど構成要素があるので、上記の数値はその分、減る。
手間の多い作業ではあるが、これを残りの髪のマテリアルに対してもやるしかない。
すべて終えてVRChat上で再確認すると、492/512に下がっていた。


アバターをVRChatにアップロードしたいときは、ヘッダーメニューの [VRChat SDK] の [Show Control Panel] を出して、そのウィンドウの中の [Builder] タブを選び、Online Publishing欄のメッセージに同意を意味するチェックをいれる。
[Build & Publish] のボタンが表示されるので、それをクリックするとアバターのビルド処理が始まり、それからアップロードされる。
完了されるとそのメッセージが出る。


Expressions "Emote"の動作がなぜか全部消える問題の対処

初回アップロード時、Expressionsの"Emote"の中身はデフォルトのモーションがすべて選択できた。
2回目以降、なぜかExpressions "Emote"の中身が丸ごと消えていた。
なんのモーションも利用できなくなっていた。
トラッキングのないデスクトップ勢にとってはかなりの痛手である。
Expressions Menuの変更を自分でやりたい場合、[Manage Projects] 内から [Gesture Manager] を選択する。
それからプロジェクトを開くとヘッダーメニューの [Tools] に [Gesture Manager Emulator] が追加されており、それを開く。
↑Gesture Managerは [▶ (Play)] ボタンを押してから動作テストするのに使うものみたいで、Gestureなど追加したい場合は別の方法でやるみたい。

私の望んでいる結果のための方法を示したページを見つけ、それを実行した。
こちらのページ *3 にある方法により、なんとか、Expression の下に"VRCEmote"を新たに作り出す形でデフォルトのモーションが使えるようになった。

この件とは別に、ある程度、作業されたと思ったら、 .unitypackage のファイルを書き出してバックアップを取るようにしたい。
こちらのページ *4 を参考にするとよろしい;VRCEmoteのデータをほかのVRoid Studio製アバターにラクラク適用させたい場合にも有用。


FaceEmoでの表情.anim作成や、prefabでの非破壊的な管理

・Masashi240819VRC では、blink や wink を作ろうとして目が閉じてゆく過程で眉毛が欠けたり陥没したりする。それを防ぐためにFcl_EYE_Close と Fcl_EYE_Joy を併用した。それぞれ、34、46or56 (特に Close よりも Joy が優勢なほうが欠けづらい) のようにしている。もともとのVRoid Studioで眉毛の位置をもう少し顔の表面から離せば、このような事態も起きづらいのだろうけど。

・[まばたき有効] にチェックをいれるとエラーメッセージ?Gesture Managerを使う間、ずっとまばたき状態にされてしまう。表情使用中にまばたきするしないにこだわらないことにするしかない。そもそもアイトラッキング (Quest Proなどで利用しやすい) している人とかでもないと、まばたきが発動するとも思えないし、[まばたき有効] のチェックは外しておこう。


EmoteBoxでいろいろと追加してみたい

ここでは EmoteBox 3.12 を使ったが、Modular Avatarが必要である(先にProjectのほうで設定済)。
Modular Avatarを使わない過去バージョン 2.10 も存在する。

Masashi で EmoteBox に指定した AnimationClip .anim が動かない問題に直面した。
原因:
ActionLayer は Masashi 直下に新しく設置した Necocoya のものを使っているのに、 01_EmoteSlot などは元の Necocoyaのほうに依存していたことを、.unitypackage エクスポート画面で気づいた。
なので、ひとまずGUIDを更新してもらうために CopyAssetsWithDependency の機能で Necocoya 複製し、それを Masashi 直下に移した。
あとは単純に EmoteSlot に AnimationClip .anim を追加して Gesture Manager でプレビューすると、なんとか再生された。

CopyAssetsWithDependency および GUID とは→ Booth 奈良阪配本地 "アセットを依存関係を保ったまま一括コピーするやつ [Unityエディタ拡張]" https://narazaka.booth.pm/items/2181882


いろいろと追加した。
VRCEmote Defalut 系の stand, seated 一式もうまくGesture Manager で動作した。
これらの名前の .anim を利用した(VRCEmote での順序):
・proxy_stand_wave, proxy_stand_clap, proxy_stand_point, proxy_stand_cheer, proxy_dance, proxy_backflip, proxy_stand_sadkick, proxy_die
・proxy_seated_raise_hand, proxy_seated_clap, proxy_seated_point, proxy_seated_laugh, proxy_seated_drum, proxy_seated_shake_fist, proxy_seated_disapprove, proxy_seated_disbelief

『うい麦畑でつかまえて』、「しかのこダンス」、「粛聖ダンスモーション」なども追加した。
これらも GestureManager で動作した、VRChatでも動作した。

ちなみに、シヴィーRikurus版にタヴィーの EmoteBox 2.10をいれて一部のAnimationClipを「粛聖ダンスモーション」、「しかのこダンス」に置き換える形だと、GestureManager で動作したが、VRChat上では頭の動きが固定されて想定と異なる状態になる。
解決策は不明だが、Animator Controller あたりの情報をいじれば直せるかもしれない。
EmoteBox 3.21のほうで最初から導入しなおすと、この現象は再現されなくなるのではないかと仮定する(実行は別の機会に)。


身長違う?と思ったら

VRoid上で身長174 cmだったキャラが、VRChat上では162 cmと表示された。
この数値のギャップは、VRM to VRChat コンバート時からか、VRC SDK ビルド時からか、知りたい。
これをUnityで検証すると、"View Position" 設定が Y = 1.62... とあったので、これが1.62 m = 162 cm とVRChatで表示される根拠のようである。
身長が1.13 mの美少女アバターも、視点の位置が1.13 mなのであって実際の身長はもう少し高いのかもしれない(VRoid Studioだと、獣耳があればそれを含めて計測しているのでその点も注意)。
ちなみに過去のVRChat設定画面では、現在の「トラッキングとIK」に相当する部分に"User Real Height"(ユーザーのリアル身長) があるとのことだが、私の今のVRChatでは存在を確認できていない。


何かしらのPackageのバージョンを上げると謎のエラーが出て Build できなくなる問題

エラーメッセージの1つは"Error building Player because scripts had compiler errors" または "Error building Player because scripts have compile errors in the editor"というもの。
2024年8月18日、私は Modular Avatar などいろいろなものをManage Packages画面からアップデートしていた。
この Modular Avatar は当時の最新の1.9.14から1.9.13に戻し、なんとか再びアバターを Build してアップロードできた。
まだ謎のエラーメッセージがいろいろと残っており、それらをほぼ全部一掃するには、VRChat SDK と Avatars も3.7.0から3.6.1に戻す。
その後も"Warning: Annotation not found!"だけ出るが、気にせず Clear。



記録の文書はここまで

最後に、実際にアップロードされたアバターの紹介動画を載せます。
自作アバターの楽しみ方のひとつとして、参考に。

『VRChat バーチャル横野真史アバターを整備した報告 (Unity と VCC使用)』


この記事が気に入ったらサポートをしてみませんか?