【VRChatアバター改変・軽量化基礎】VRCQuestToolsを利用した簡易のマルチプラットフォーム対応(Android VeryPoor編)
アバター「フェリス」を例とする。
なお、このアバターはデフォルトでlilToonのほかに「Modular Avatar」「Avatar Optimizer」に依存しているためこの例の通りに行う場合はこれらも事前にVCC/VPMからインポートして作業すること。
https://vpm.anatawa12.com/add-repo
VRChatはPC(Windows)のほかに、MetaQuestシリーズやPicoシリーズの一部といったVRゴーグル単体、AndroidやiOS搭載スマートフォン(RAM6GB以上、OSのバージョン制限もあり)単体での動作にも公式で対応している。
だが、これらはPCとは別個にアバター・ワールドの対応が必要であり、
この作業を行っていないとせっかくアバターやワールドをアップロードしてもワールドならそもそもPC以外からはJoinが不可能、アバターなら見てもらうことができずフォールバックと呼ばれる別アバターが見えている状態になる、といったことが起こる。
特にアバターはPC以外のプラットフォームに対しては極めて厳しい制限がかけられており、対応させるために特別な作業を必要としている。
2024/08現在ではVRCQuestToolsというツールをVCC(VPM)から導入することにより、これらの作業も簡易のものであれば非破壊かつある程度の自動化を行うことができる。
ドキュメントのリンクも示しておく。ここでも簡単には解説するが、公式の文章を読んでおいたほうがより理解は深まるだろう。
https://kurotu.github.io/VRCQuestTools/ja/docs/intro
以下にその方法を解説するわけだが、ここではひとまずAndroid Very PoorというVRChat公式の軽量化指標の最下位のランク(つまり極めて負荷が高いという評価)を目指すこととする。
このAndroid Very PoorはAndroid/iOSスマートフォン単体でログインしているユーザからはこれを表示するすべがなく、マルチプラットフォーム対応としては不完全であると言わざるを得ないのだが、これらに対応可能なPoorランクまで引き上げるために必要な作業はVery Poorの場合に比べて非常に難易度が高いためである。
現状筆者個人の周りでも非対応アバターをマルチプラットフォーム対応(Quest対応と表現されることが多い)した、といえば普通はこのAndroid(Quest) Very Poorでの対応のことであり、Poor以上に対応できているケースはごくごく限られている。
Android Build Supportのインストールが済んでいること、アバターがPC(Windows)向けにアップロードされている状態を前提とする。
Android Build SupportについてはVCCからUnityをインストールした場合は通常は同時にインストールされているため気にすることはないはずなのだが、もしされていないようなら以下を参考にインストール作業を終わらせておくこと。
まだPC(Windows)向けにもアップロードしていないアバターならまずはWindows向けにビルドしてアップロードしよう。
Android向けにのみアップロードすることも可能ではあるらしいのだが奇抜であるということ以上の利点はない(当然Windows環境からは見えないアバターになる)。
一度アップロードまで完了していればPipelineManagerコンポーネントにBluePrint IDが付与されているはずだ。
ここでVRCQuestToolsというパッケージを導入する。
まずは以下からVPMリポジトリをVCC/VPMに追加する。
すでに行っている場合は飛ばして良い。
追加ができたらVCCから"VRCQuestTools"と"Non-Destructive Modular Framework"を追加する。
後者は今回例に使っている「フェリス」を使ったならすでに導入されているだろう。非破壊編集ツールのうち、日本を中心に使われているものは多くがこれに依存している(略称NDMF、通称ナデモフ)。
インポートしてすぐ以下のようなウィンドウが開くと思われる。
これがでたらひとまず「ATSCでテクスチャを圧縮」のボタンをクリックする。
処理が終わったらこのウィンドウは右上の×ボタンで閉じておこう。
閉じたら、画面上部のメニューバーから「ツール」→「VRCQuestTools」→「Convert Avatar for Android」を選択する。
ちなみに先ほど閉じたウィンドウは「Unity Settiings for Android」の中にある。
アバターのところにヒエラルキーから返還させたいアバターをドラッグアンドドロップして指定させる。欄の右側にある◎ボタンから選択してもよい。
ネットワークIDの割り当てられていないPhysBoneがあると警告が出るので一度「割り当て」のボタンをクリックする。下の「追加」ボタンでもよい。
どちらかをクリックすればどちらも表示が消えるはずだ。
ここで重要だが、これをクリックしたあとは毎回Windows向けにアップロードしなおしておくことが必要だ。
通常通りVRChat SDKを開きWindows向けにアップロードしなおせばよい。
Windows向けにアップロードをし終えたら、下のAvatar Dynamicsのパフォーマンスランクのエラーが出てないか確認する。例の「フェリス」の場合は以下のように表示される。多くの場合は表示されていると思われるが、ごく軽量なアバターであれば出ないこともある。
このエラーはPhysBoneそのもの、PhysBoneの揺れるオブジェクト数やチェックする衝突判定が多すぎてAndroid対応ができない場合に出力される(これはVRChat側の制限によるものである)。
エラー表示が出ていたら「Avatar Dynamics 設定」ボタンをクリックする。
PhysBone系コンポーネントの一覧が表示される。
下の推定パフォーマンスランクにPhysBone Compornentsの最大をオーバーしている項目が存在していることがわかる。この例だとPhysBone Compornentsが最大8のところ、10あると出ている。アバターによってはほかの項目だったり複数項目がオーバーしていることもあるが対応方法は同じだ。
ならば減らせばよい。減らす方法もいくつかあるが、今回はシンプルに消去する(このアバターであれば消去しない方法も検討可能だが今回は汎用性を重視する)。
消去するといっても非破壊なのでもとのアバターには影響を及ぼさないしもちろんWindows向けには全く関係しないしここで消してももう一度ここの画面を開けば再度有効化も可能だ。
ただし、消去するということは当然そこの"ゆれもの"はAndroid環境においてはあきらめるということになる。どれを残してどれを削除するのかはよくよく考えよう。
今回は一番下のString_001.LとString_001.RをAndroid向けには消去することにする。対象の項目のチェックボックスを外せば完了だ。
10あるうちの2つを消去したので上限である8ぴったりになりエラーが消滅した。
このアバターの場合はこれだけで済んでいるが、アバターによってはもっとたくさんのPhysBoneを消す必要がある場合もある。場合によってはスカートの揺れすべてをあきらめる必要がある場合さえある。こればかりは仕方ないので覚悟を決めるしかない。
エラーが消滅したら下の「適用」ボタンをクリックしよう。
Convert Avater for Androidウィンドウに戻ってこよう。こちらでもエラー表示が消えているはずだ。
今回の記事通りに作業をしている場合、Non-Destructive Modular Framework(NDMF)が導入されているので下のほうにある通知から「開く」をクリックする。
以下のようなウィンドウが表示されたら、VRChat SDKからBuilderタブを開く。Windows向けにアップロードしたときの画面だ。
すると先ほどの画面も変化する。
今回は行わないが、Build & Test on PCでAndroid/iOSの見た目をPCで確認することもできる。
VRChat SDKのBuilderタブの下部にある Selected PlatformをWindowsからAndroidに変更する。iOS向けビルドへの変更もここから可能だ。
ビルドターゲットを変更してもよいかと尋ねられるので「Confirm」をクリックする。
自動で作業が始まるのでしばらく待とう。
これでビルド先がAndroidに変更された。なにやらエラーが出てくるが、これは非破壊変換の作業が行われる前の状態で出るエラーである。
このままではVRChat SDKからはAndroid向けにアップロードできないのだが、今回はそもそもVRChat SDKからアップロードを行わないので全部無視してかまわない。
VQT Avatar Builderを見ると、アップロード(Android)が先ほどよりも明るく表示されるようになり作業が可能になる。
「Build & Publish for Android」をクリックする。
そのすぐ上には「可能な場合はフォールバックアバターにする」のチェックボックスがあるが、これはQuest Good以上であることが求められるので通常気にすることはないだろう。入れておいてもGoodに到達していない場合は無視されるので差支えはない。
あとはVQT Avatar Builderが全部自動でAndroid/iOS向けに変換をかけてVRChat SDKの代わりにアップロード作業を行ってくれる。
以下のように「アップロードに成功しました。」と出たら成功だ。VRChatを起動して確かめてみよう。
今回はとりあえずアップロードするまでの対応のみ書いたが、VRCQuestToolsはほかにもいくつかの機能をもっており、応用すればAndroid/iOS向けにビルドするときだけ透過が使えない関係で表示がおかしくなる頬染めシェイプキーを削除したり、どちらかのプラットフォームでだけ表示されるメッシュ、どちらかのプラットフォームでだけ処理が行われるコンポーネント(自動メッシュ削減をAndroid/iOS向けのときだけ行うといったことが可能)、といったものも作成可能だ。
iOSにも対応しているので必要な場合にも使用可能である。
ドキュメントを再度添付しておくので興味があるなら読みこんでみてほしい。
2024/08現在、もはやマルチプラットフォーム対応のためだけにわざわざヒエラルキーに別のアバターデータを保持しておく必要はなくなっている。
使いこなせばアバターのマルチプラットフォーム対応がグッと楽になることだろう。