見出し画像

【VRChat】VRoid製モデルをAndroid(Quest)対応する時の手順まとめ


更新履歴

2024/04/04 おまけの項目を追加
2024/05/19 インポスター機能の説明を追加
2024/05/26 一部記述を整理
2024/05/30 「FBXの設定」にSort Hierarchy By Nameについての記述を追加

はじめに

初めまして、はるるです。
僕がVRoidで作ったアバターをAndroid(Quest)版VRChatに対応させてアップロードする時にいつもやってる手順をまとめました。内容としてはn番煎じですが、備忘録も兼ねて書いておきます。

ただQuest対応させるだけなら他にも沢山記事がありますが、ここではパフォーマンスランクMediumでの対応を目指しつつ、ついでにVRoid製モデルをFallback対応させる方法や、撫で肩問題の解決法等についても触れていきたいと思います。

前提

この文章は、
・VRoid Studioの操作がある程度分かっている
・Unityを使ってPC版VRChatにアバターをアップロードすることが出来て、基本的な用語が分かっている
・途中で投げ出さない根気と時間がある
人のことを想定しています。
そもそもQuest対応って何?って人は一旦こちらの記事を読んでください。

Android(Quest)版VRChatにアップロードできるアバターのパフォーマンスランクについてはVRCの公式ドキュメントを参照してください。

Blenderを使います。(重要)
VRoid StudioとUnityのみで完結する方法を知りたい方、とりあえず見えればいい、VeryPoorでも問題ないという方はこちらの記事が参考になると思います。

また以下の手順はBlenderなんもわからん人間の自己流なので、もっと楽で効率的な方法や、訂正した方が良い内容があったら是非教えてください。
その他質問等あればTwitter(@Haruru_dayo_)かBluesky(@harurudayo.bsky.social)まで。

インポスターを生成しよう (2024/05/19追記)

上記に紹介した手順すら面倒、特にこだわりが無い、自分がQuest単機になる機会が無いという場合はVRC公式で用意されているインポスター機能を活用するのが最も簡単でおすすめです。

ざっくり説明すると、アバターがAndroid対応されていない場合や、他人のセーフティ設定(パフォーマンスランクや容量等)で非表示になっている場合に、通常のフォールバックアバターの代わりにそのアバターの簡略版を表示してくれる機能です。

元のアバターと比べて見栄えは劣りますが、BlenderはおろかUnityすら触る必要が無く、ブラウザからワンクリックで生成出来ます。

VRChatの公式サイトを開いて、「Avatars」「My Avatars」からインポスターを生成したいアバターを選択。
少し下にスクロールすると「Impostors」という項目が出てくるので、左下の「Generate Impostors」をクリックして数分待ちます。

画像はモバイル版

右側のImpostor欄にチェックマークが付いたら生成完了です。

生成されたインポスターの見た目はVRChat内で確認出来ます。メニューからアバター欄を開いて「View Avatar Details」を選択。

左側に表示されたプレビューの下のアイコンを切り替えると、生成されたインポスターが表示されます。

必要なツール

VRoid Studio

言わずもがな。正式版でもβ版でもやる事は大体同じです。

Blender

筆者は2.93.1を使用しています。他のバージョンでの動作は未確認です。

VRM Add-on for Blender

BlenderでVRMファイルを読み書きするためのアドオン。
ダウンロードした後は絶対に解凍しないでください。
バージョンは2.15.26です。現在、最新版(バージョン2.16.0以降)を使用している場合、この後の作業中にモデルのテクスチャが吹き飛ぶ(ように見える)事があります。

万が一最新版で作業を進めてしまって、後述のBlenderでの作業中にモデルのテクスチャがバグった場合、「Material」「Enable VRM MToon Material」にチェックを入れるとマテリアルの設定が復活するらしいです。

筆者は未検証。情報求む。

Cats Blender Plugin

アバターの最適化や軽量化を自動でやってくれる便利なアドオン。
こちらも絶対に解凍しないでください。
バージョンは0.19.0です。

material-combiner-addon

テクスチャをアトラス化してマテリアル数を削減してくれるアドオン。
例の如く絶対に解凍しないでください。大事なことなので3回言いました。
バージョンは2.12.9です。

あると便利なツール

VRoid Texture Converter for VRChat on Quest

アイラインと眉毛のテクスチャを不透明にして、顔の肌レイヤーにインポートできるように変換してくれるツール。画像編集ソフトでも同じ事はできるものの、あるとめちゃくちゃ便利。正式版用は有料(200円)。β版用は無料。

VRoid Studio側でやっておくこと

顔周りのテクスチャ編集

まずこの段階で潰せる透過は潰しておきましょう。
VRoidで透過を使っているのは主に瞳・瞳のハイライト・まゆげ・まぶた・アイライン・まつげ・衣装・アクセサリー(眼鏡)・ベースヘアです。
ここで透過部分及びポリゴン数をなるべく減らしておくと後の作業が楽になります。

:後で処理するのでそのまま。
メッシュを切るのがダルい場合は一番下に1枚レイヤーを作って白目と同じ色で塗りつぶすとちょっと楽できたりできなかったりする。(多くの場合白く塗った部分が目からはみ出すので修正が必要)

瞳のハイライト:一旦エクスポートして、瞳の上にインポート。元のレイヤーは非表示にする。

上記の手順を行った後

まゆげ:そのままでも構いませんが、下に1枚レイヤーを作って肌と同じ色で塗りつぶしておくと万が一切り残しがあっても目立たなくなります。
後述のツールで変換して肌の上にインポートするとメッシュを切る手間が少し減りますが、表情を動かしたときに眉毛が動かなくなるのでそこはトレードオフ。

実のところVeryPoor対応だったらこれで十分

まぶた:非表示。もしくは肌の上にレイヤーを重ねて直接描く。後述のアイラインと同じ手順で変換することも可能。

アイライン:エクスポートしてVRoid Texture Converter for VRChat on Questで変換し、任意の画像編集ソフトor上記のツールの機能で白色背景を透明化させた後、肌の上にインポート。元のレイヤーは非表示。無論自力でテクスチャが描ける方は手描きしても構いません。画像編集ソフトのメッシュ変形機能を使って肌の上に貼り付ける方法もあるらしいです。

変換してインポートした後

まつげ:非表示。アイラインもそうですが、ブレンドシェイプを壊さず綺麗にメッシュを切るのが面倒臭すぎるので自分は消してます。残したい人は頑張ってください。

体型:テクスチャ編集や肌マスクを使って、外から見えない部分のメッシュをできるだけ消しておく。この時アバターのを消しておくとポリゴン数を節約できる。ネイルをしている場合は指の上に直接描く。

アクセサリー(眼鏡):厚みなしで作って、レンズのレイヤーは非表示にする。

ベースヘア:地味に透過を使っているので、そのままシェーダーを変えると縁の部分に海苔が生成されます(1敗)。
そのままにして後で処理するのでも構いませんが、僕は非表示にして顔の上部及び体型の頭の部分を髪と同じ色で塗り潰して馴染ませています。

意外に雑でもいい
こんなところ普段見ないからね

髪等で透過を使って造形しているアクセサリー類:非表示。潔く諦めた方が健康に良い。

衣装の見直し

鬼門。制服ベストやパーカーのようになるべく透過を使わない衣装を選んで、重ね着しないのが一番楽。
Blenderの力で強引に全てを解決することもできますが、正直面倒なので後の作業を楽にできる小技をいくつか書いておきます。

自分のアバター。透過・重ね着未使用。

ボディスーツ(水着・下着等):一旦エクスポートして上半身/下半身インナーor肌にインポート。

重ね着機能を使っていて、かつ大体同じような形状の型紙を使っている場合:全部エクスポートして、一番下のベースとなる型紙にインポートするとボーン数及びポリゴン数の削減になる。

裾や袖のフリルの透過部分:下に1枚レイヤーを作って衣装と同じ色で塗りつぶしておくとメッシュを切る時に楽できて違和感が少なくなる(後でUnity上でやってもいい)。

腕飾り:手袋等の爪の部分は消しておく。

髪の断面形状の変更(任意)

髪の断面形状を「ひし形」から「三角形」もしくは「底なし三角形」にすると、ポリゴン数の削減になります。見た目が若干変わるのでお好みで。

「底なし三角形」は「三角形」よりもさらにポリゴン数の削減になりますが、両面描画が使えないAndroid環境だと意図せず髪が消えたように見えることがあるので、前髪等の裏面が見えない髪にのみ使用することをオススメします。

余談ですが、エクスポート画面で「髪の断面形状を変更」にチェックを入れると全ての髪が底なし三角形に変換されてしまいます。一回変換してしまうと戻すのがまあ大変なので注意してください(2敗)。
また、最新版のVRoid Studioでは未検証ですが、昔は髪を複製して反転した時に、メッシュの法線が裏返ってしまう現象(バグ?)が起きていました。
Unityに持って行ってシェーダーをAndroid対応(片面描画)のものに変えた時に表示がおかしくなった場合、これのせいかもしれません。

髪のボーン編集(任意)

長髪の場合、意外に髪のボーン数が馬鹿にならないことがあるので、似たような揺れ物はVRoid Studio側で適当にまとめてしまうのもアリです。

「カスタマイズ」→「髪の揺れ方を設定」から編集

特にアバターをFallback対応させようと思った時はここで髪のボーンを最低限まで減らすorいっその事無くしてしまうのも良いかもしれません。

エクスポート時の設定

VRoid Studioにもマテリアル削減機能がありますが、後の作業を楽にするために今回は使いません。
「マテリアル数」「削減しない」に設定して、VRM0.0でエクスポート。

もし後述のアドオンが動かなかった場合はここでマテリアル数を「2」にするか、手作業でUV展開してテクスチャベイクしてください(鬼畜)

Blenderでの作業

VRMファイルをエクスポート出来たら、いよいよBlenderでの作業になります。言語設定は英語です。(日本語だとたまにバグるらしい)
下記の記事が大変参考になりました。

アドオンのインストール

VRM Add-on for Blenderをインストールします。
「edit」「Preferences…」を選択し、出てきたウィンドウから「Install…」をクリックします。

ダウンロードしたアドオンのzipファイルを選択して「Install Add-on」をクリックします。

インストール出来たら、アドオンの表示を「Community」にして、「Import-Export: VRM format」にチェックを入れて有効化してください。

同様の手順でCats Blender Plugin及びmaterial-combiner-addonをインストールして、「3D View: Cats Blender Plugin」「Object: Shotariya’s Material Combiner」を有効化します。

最終的にこうなればOK

VRMファイルのインポート

「File」→「Import」から「VRM (.vrm)」を選択し、先程出力したモデルを読み込みます。

透過部分の切除

編集したいメッシュ(例:Face)をクリックして、左上の「Object Mode」を「Edit Mode」に切り替えます。

この時、Pキーまたは右クリックで「Separate」「By Material」を選択して、マテリアルごとにメッシュを分割すると作業がやりやすくなります。
それぞれのオブジェクトは👁のマークをクリックするか、Hキー/Alt+Hキーで表示/非表示を切り替えられます。
手を加えたいメッシュ以外(Armatureやsecondary等も)は非表示にしておくと見やすいです。

分割後

Kキーでナイフツールを実行し、切りたい形の輪郭(境界線)に沿って切っていきます。この時必ず辺か頂点の上をクリックしていくようにすると表情シェイプキーが壊れにくいです。

例:眉毛

全部切れたらEnterキーで確定。

Shiftキーを押しながら不要な頂点を選択し、Deleteキー→Verticeを選択して削除。

削除した後

この時うっかりシェイプキーを壊してしまうとナイフを入れる前の段階からやり直しになります。

シェイプキーが壊れて爆発した例

慣れないうちは一回ナイフを入れる毎に都度シェイプキーを動かして壊れていないか確認する癖をつけるとミスが少なくなります。

右下の逆三角形みたいなマークからシェイプキー一覧が確認できます。どれでもいいので切り替えてメッシュが爆発していなければ成功です。

この過程はワグテイルさんの一連の動画及び以下の記事を参考にしました。

同様に、瞳・(人によっては)アイラインやまつげ・衣装等の透過部分を全て切り落とします。骨の折れる作業ですが、前述の「ナイフを入れる際は必ず辺か頂点の上をクリックする」「顔周りのメッシュを切る時は時折シェイプキーを動かして壊れていないか確認する」という決まりを守ればそんなに難しい行程ではないと思います。但し根気は要ります。頑張りましょう。

不要なポリゴンの削除(任意)

VRoid Studio側で消しきれなかった、外から見えない部分のポリゴンを手作業で消していきます。この過程は飛ばしても構いませんが、ここで手を抜かずにしっかり無駄なポリゴンを消しておくと、後でデシメートをかけた時に見た目が綺麗になります。
先程と同じ方法で、ナイフツールや範囲選択を駆使してガンガン削ります。

例えば上着で隠れるこの部分のポリゴンはいらないので
範囲選択して削除
こんなとこ誰も見ないけど綺麗にしておきたい

ズボンや上着の中はともかく、靴の中は割と盲点だったりする。

Cats Blender Pluginで自動修正

要らないメッシュの削除が終わったら、ここからはアドオンの力を使って自動でアバターを修正していきます。
右側の小さい矢印をクリックして出てきたメニューから「CATS」をクリック。

スパナのマークをクリックして、「Fix Model」の設定をします。
揺れ物を元の形で残したい場合は「Keep End Bones」にチェックを入れておきます。

基本これで間違いない設定

「Keep Upper Chest」のチェックは外しても外さなくてもいいです。
最近のVRChatはUpperChestを削除する必要がなくなった(むしろ胸トラ装着時の動きが良くなるのであった方が良い)らしいですが僕自身は未検証です。お好みで。
余談ですが、UnityでModularAvatar等を使ってUpperChestが無いアバターの服を着せたいという場合は無いほうが合わせやすいです。(そしてそこまでやるならBlenderで合わせた方が良い)

設定が終わったら、「Fix Model」を押して修正を実行。

疑似アイトラッキング用のボーン追加

「CATS」のメニューから「Eye Tracking」のメニューを開き、「Blink Left」「Blink Right」「Lowerlid Left」「Lowerlid Right」にそれぞれ下図のようにシェイプキーを設定して、「Create Eye Tracking」をクリック。

この時エラーメッセージが出る場合がありますが、僕の環境だと問題なく動作しているので無視しています。(もし上記の手順で動かなかったら教えてください)
追加したアイトラ用のボーンが動作するかどうかは、「Eye Tracking」メニュー上部の「Testing」タブで確認できます。

ここでちゃんと動いてたらOK

リップシンク用シェイプキーの追加

「CATS」のメニューから「Visemes」を開いて、「Viseme AA」「Viseme OH」「Viseme CH」に以下の通りシェイプキーを設定して「Create Visemes」をクリック。
自動でリップシンク用のシェイプキーを生成して追加してくれます。

ポリゴン数の削減

Android版VRChatでパフォーマンスランクをMediumにするには、アバターのポリゴン数を15000以下まで減らす必要があります。ちなみにFallback対応の条件は△10000以下。
自分のアバターが今現在どれくらいのポリゴン数なのかは画面上部、「Viewport Overlays」「Statistics」にチェックを入れると確認できます。

現時点での自分のアバターのポリゴン数

「CATS」のメニューから「Decimation」を選択。
「Tris」に任意の数(今回は15000)を入力して「Quick Decimation」をクリックすると、シェイプキーを維持したまま、入力した数以下になるように自動でポリゴン数を削減してくれます。えらい。
「Decimation Mode」はデフォルトの「Smart」のままで大丈夫です。

今回はMedium対応を目指すので、Trisに「15000」と入力してQuick Decimation
△15000以下まで削減できました

また、ここで「Tris」に入力する値を「10000」にすると、後述のアトラス化との合わせ技でAndroid版パフォーマンスランクGood、すなわちFallback対応アバターを作ることもできます。

△9999の俺

僕のアバターは短髪で衣装もシンプルなので見た目の劣化が少ないですが、元々ポリゴン数が多いアバターだとどうしても劣化が激しくなるので注意してください。

可動部分の劣化が気になる場合は「Animation weighting」にチェックを入れて、「Factor」に何かしら値を入力した状態でQuick Decimationすると、シェイプキーで動く部分(主に顔周り)や指・膝などの関節部分にポリゴン数を多く割くようにデシメートしてくれます。
ただしその分他の箇所のポリゴンが削られるので、その辺はお好みで。

Save Fingersはよくわからん

テクスチャのアトラス化

ポリゴン数と同様に、Android対応でネックとなるのがアバターのマテリアル数です。パフォーマンスランクをMedium以上にするためには、マテリアル数を2以下まで減らす必要があります。

「CATS」のメニューから「Optimization」を開いて、「Generate Material List」をクリックすると、アバターのマテリアル一覧が表示されます。

ざっと確認して問題なければ「Save Atlas to…」をクリックすると新しくウィンドウが出てきます。生成されたテクスチャを保存する場所を選んで、「Create Atras」をクリック。

マテリアルが統合されて一つになりました

この工程を行うとシェーダーがStandardに変更されてモデル全体の質感が変わりますが、これは後でUnity上で変更するので問題ありません。

仕上げのボーン修正(任意)

※この項目はマジのおまけです。フルトラ未所持の方は飛ばして読み進めて頂いても構いません。

Cats Blender Pluginで修正したそのままの状態だとなんかボーンの配置がキショいので直します。

自動修正をかけた後の素の状態
(筆者のモデルは試験的にUpperChestを残しています)

VRChat上ではこのままでも動作しますが、僕は気になるのでがそさんの記事を参考にして修正しています。ここでは細かい手順は割愛。
ついでに残った不要なボーンも消しておきます。

この後Unityで調整すると最終的にこうなる。要検証。

FBX形式でエクスポート

以上の工程が全て終わったら、モデルをFBX形式で出力します。
「CATS」メニューの上部にある「Export Model」を選択します。

画面右側のメニューの「Path Mode」「Copy」にして、「Apply Transform」にチェックを入れます。
保存したい場所を選んで、適当なファイル名を入力したら「Export FBX」を選択してエクスポート。

他の人の見様見真似

これでBlenderでの作業は終了です。お疲れさまでした。

Unityでセットアップ

Unityプロジェクト内に新しくフォルダを作って、出力したFBXをインポートします。バージョンは2022.3.6f1を使います。(2019でも手順は大体同じです)

「Create」→「Folder」で新しいフォルダを作成

FBXの設定

「Model」タブで「Sort Hierarchy By Name」のチェックを外し「Read/Write」にチェックを入れて、「Blend Shape Normals」「None」にします。変更した後は右下の「Apply」を押して確定。

テクスチャ及びマテリアルの出力

インポートしたFBXを選択し、「Material」タブから「Extract Textures」をクリックして、アバターのテクスチャを出力します。
出力先の指定を求められるので、新しくフォルダを2つ作成して分かりやすく名前を付けておきましょう。

今回はそれぞれ「Material」と「Texture」としました

同様に「Extract Material」からアバターのマテリアルを出力。

出力したマテリアルはシェーダーがStandardになっているので、選択して「VRChat/Mobile/Toon Lit」に変更。

Rigの調整

「Rig」を開いて、「Animation Type」「Humanoid」に変更。「Apply」を押して確定したら、「Avatar Definition」「Configure…」をクリックして、Rigの設定に移ります。

右側の「Mapping」タブでボーンが間違った場所に適用されていないかざっと確認します。

UpperChestが無い場合、その欄は空欄で大丈夫です

髪のボーンを残している場合、何かしらのボーンが「Jaw」に紐づいていることがあるので「None」に変更して外しましょう。
確認が終わったら一旦「Apply」を押して確定。

次に「Muscle&Settings」タブを開いて撫で肩の修正を行います。
「Per-Muscle Settings」「Left Arm」「Right Arm」の欄から、「Shoulder Down-Up」の下限値を小さくすると大体直ります。最終的にどのくらいの値にするかは体型や好みによって決めましょう。

僕は0にしています

ここまでの工程が終わったら、「Apply」「Done」を押してFBXの設定は終了です。

Prefab Variantの作成(任意)

後々アバターのFBXファイルを更新したくなった時の事も考えて、自分はPrefab Variantをベースにセットアップしています。
設定が終わったFBXを選択して右クリック、「Create」→「Prefab Variant」を選択。
作成されたPrefab VariantをHierarchyにD&Dして配置してください。

VRC Avatar Descriptorの追加

右側の「Inspector」から「Add Component」を選択して、「VRC Avatar Descriptor」を追加します。
既にPC版のアバターをアップロードしてある場合は、元のアバターからコピペして、参照するボーンやメッシュを変更(左側のツリーからD&D)するのでも構いません。その場合は後述の「Android用にビルドしてアップロード」まで飛ばして下さい。

ビューポイントの位置調整

「View Position」の右側にある「Edit」をクリックして、灰色の球が両目の間(眉間から少し出るくらい)に来るように位置を調整します。

リップシンクの設定

先の作業が上手くいっていれば、「LipSync」から「Auto Detect!」をクリックするだけでリップシンク用のシェイプキーを自動で設定してくれます。

疑似アイトラッキングの設定

「Eye Look」メニューを展開して「Enable」を選択します。
「Eyes」「Transforms」「Left Eye Bone」「Right Eye Bone」の欄ですが、ここには先の作業で新しく追加した「Left Eye」「Right Eye」を選択して挿入してください。(元々あった目のボーンを参照すると目の動きが破綻します)
「Rotation States」の値は、Scene上のPreviewを見ながらお好みの値を設定してください。

僕はこれくらい

瞬きの設定

「Eyelids」「Eyelid Type」から「Blendshapes」を選択。

「Eyelids Mesh」には「Body」を設定してください。
「Blendshape States」を展開して、「Blink」には「Fcl_EYE_Close」を設定。それ以外は「-none-」に設定します。

作業が終わったら「Return」でプレビューを終了するのを忘れずに

Playable Layers及びExpression Menuの設定

僕の手順ではVRoid勢の九割九分が一回はお世話になるであろうVRM Converter for VRChatを使用しないので、Playable Layers及びExpression Menuの設定がされていません。
既にPC版にアバターをアップロードしてあるという場合はPC版のものをそのまま使い回しでも構いませんが、そうでない場合は新しく手動で実装する必要があります。

VRC側で用意されているデフォルトのものを使ってもいいですが、僕はBOOTHで有志の方が配布されているものを使う事をおすすめしています。
僕はなると屋さんのAvatars3.0 VRoid Layers POWER UPをよく使っています。

名前の通りVRoid製のアバター向けにセットアップされており、D&Dで挿入するだけで基本的な設定が全部終わるのでおすすめです。参考までに。

PhysBoneの統合(任意)

PhysBoneも基本的にPC版と同様に設定してもらって構いませんが、Android版VRChatでは使えるPhysBoneコンポーネント数に限りがあるので、髪のボーンを複数選択してAdd Compornentで導入する方法だとVRC側で定められている制限を超えてしまい、アップロードできなくなる場合があります。

その場合は素直に一部のPBを削除するか、anatawa12さんが出しているAvatar Optimizer(通称AAO)というツールの「Merge PhysBone」という機能を使うと、同じ揺れ方をするPBを非破壊で統合することが出来ます。

上記の設定を行ってもアップロード時にビルド前の段階で弾かれてしまうという場合は、アバターを選択して画面上部の「Tools」から「NDM Framework」「Manual Bake Avatar」を実行すると、AAOの処理が実行された後の状態のコピーを生成してくれます。

後はそのコピーを使ってアップロードすればOKです。そもそもボーン数で引っかかっているという場合は一旦Blenderに戻って下さい(鬼)。

また一部PBを削除した場合、PC/Android間で同期ズレが発生することがあるので、PBの階層を変更するか、NetworkIDの割り振りを忘れずに。以下の記事が詳しいです。

Android用にビルドしてアップロード

以上の工程が全て終わったら、まずはいつも通りPC向けにアバターをアップロードします。
それが終わったら、コントロールパネル中央の「Selected Platform」を選択して「Android」に切り替えます。

新しくウィンドウが出てくるので、「Confirm」をクリックするとビルドの対象がAndroidに切り替わります。

後は普段通りアバターをアップロードして終了です。お疲れさまでした。

既にPC版にアバターをアップロードしてある場合は、コントロールパネルの「Content Manager」から対象となるアバターを探して「Copy ID」をクリック。

コピーしたIDをVRC Avatar Descriptor下部の「Blueprint ID」の欄に貼り付けて、「Attach (Optional)」をクリックしてからアップロードしてください。

また、条件を満たしたアバターはアップロード時に「Set this avatar as fallback」を選択するとVRC内でフォールバックアバターとして使用できるようになります。

おわりに

最後までお付き合い頂きありがとうございました。つまり何が言いたいかというと、VRoidのQuest対応は苦行だって事です。

おまけ (2024/04/04追記)

フレンド曰くBlender4.0でもいけるらしいです。
筆者は未検証なので参考程度に。

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