見出し画像

Unityと仲良くしたいVRChat日記(9)VeryPoorなアバターのままで良いのか?

今回はアバターの「重さ」、パフォーマンスランクの話。
Boothで売られているアバターは最初からPoorかVeryPoorで、初心者は何も気にせず最初から「赤い」アバターを使ってることが多い、というか私がまさにそうでした。
大人数がいるワールドで負荷を減らすために軽いアバターにするに越したことはないし、フレンドがPC版でもQuest版でも同じ姿を見てもらうために自分のアバターが「Quest対応」を満たすほうがよい、ことは聞いていても、何を目指せばよいかいまいちわからない、ので調べた。

パフォーマンスランクはどうやって決まる?

パフォーマンスランクは「良い(軽い)」ものからExcellent、Good、Medium、Poor、VeryPoorとなる。
このランクは、ポリゴン数とかテキスチャメモリ(のサイズ)とかめっちゃ沢山の基準があり、その基準を1つでも超えるとそのランクにはなれない、というシビアなもの。とVRChat公式に書いてあった。
ちなみに、第7回で作成した着せ替え対応RadDollさんは

ポリゴン数:△11.8万 ←Very Poor
テキスチャメモリ:94.67MB ←Medium
スキンメッシュ 21 ←Poor
マテリアルスロット 28 ←Poor
Physbonesコンポーネント 55 ←Poor
Physbones Transforms 221 ←Medium
(数値の一部です)

でVeryPoor。ポリゴン数が多いところがランクを下げてるみたいだ。
このRadDollさんは素晴らしいことに、Boothからダウンロードしたパッケージにレベルの違うモデルが3つも同梱されていて、重い順にこうなっている。(左からノーマル版、Lite版、Quest版)

ノーマル→Liteは「マテリアルスロットとスキンメッシュ」が大幅減少していて、ポリゴン数も2万ほど減っているがテキスチャはそんなに減っていない。またPhysBoneが服と髪を中心に20ほど減っているが外見上は見分けつかない。
Lite→Questはポリゴン数がほぼ1/3になって△1.9万、テキスチャメモリは実に70MB以上減ってたったの2.7MB(ちなみにQuestでは10MB以下でExcellent)。
こんな感じに、いろいろな数値があって全体的に減らすとよいのは間違いない。

マテリアルスロットとスキンメッシュ

世の中のアバター軽量化サイトをみると、ポリゴン数を減らすことはもちろんで、さらにマテリアルとスキンを減らすことが肝要とある。
RadDollのノーマル→Lite→Quest版はこのようにマテリアルスロット数が減らされている。テキスチャ一覧と比較してみるに、ノーマル→Liteは個別のパーツOn/Off機能を殺してマテリアルを統合していて、同時にスキンメッシュ(Skinned Mesh)も1つにまとめられている。

Lite版。Bodyの下にスキンメッシュ1、マテリアルスロット5がまとまっている

簡単に言うと、服のパーツ別にOn/Offできるものはマテリアルスロット(ノーマル版は20)とスキンメッシュ(同、16)が別々になっているため数が増えてパフォーマンスランクを下げている、ということになる。
他の市販アバターも、服のパーツを個別にOn/Offできるものはほぼ同じくらいの数になっていて、Mediumを満たせない原因になってるようだ。
これらを減らすにはどうするか、3DモデリングツールであるBlenderで操作するのが王道らしいが、Unity上で減らせるAvatar Optimizer(AO)というツールがある。これを使ってRadDollノーマル版を減らしてみた結果がこれ。マテリアルスロットが20→7、スキンメッシュが16→2に劇的に減ってGood判定に。あとはポリゴンとPhysBoneを減らせればVeryPoor脱せそうだがそこは今後の宿題。

左からノーマル版、Lite版、ノーマル版をAOで減らしたもの

Quest用に変換する

Quest用アバターのパフォーマンスランクはPC版とは別の数値が定義されていて(VRChat公式)、さらにQuest対応アバターとしてアップロードするには別の条件も存在する。

  1. mobile(Android)用ビルド

  2. mobile用ビルドに対応したシェーダー

  3. 10MB以下

RadDoll Quest版は純正で対応しているのでビルド設定を切り替えるだけでQuest版としてアップロードできるが、Quest非対応アバターをマニュアルでQuest対応しようとするとシェーダーあたりでなんか表示がおかしくなる。
そこでVRCQuestToolsを導入。これは2と3をいい感じにやってくれる優れもので、PC版しか存在しないおつきみくんもビルドエラーもなくあっさりと変換成功。
PC版VRChatでスペックを比較すると、テキスチャメモリーが40MB→5.9MBに劇的に減っている。変換時にテキスチャサイズを小さくしてるのが数字でわかる。他の、ポリゴン数とかスキンメッシュ数とかはまったく変わらず、
PC版とQuest版の見た目の違いはやはりシェーダーが大きく、PC版のliltoonはマンガみたいな輪郭線が特徴的。個人的には素朴な3DCGっぽさを感じさせるQuest版も好き。

左:PC版  右:Quest版 どちらもPoor

さらにQuest用に軽くする

上記で変換したQuest版おつきみもポリゴン数は3.6万△とそこそこ多く、Poorランクに相当する。他のQuestユーザーにデフォルトで表示されるようにするにはMedium以下、これはポリゴン数△2.5万以下かつマテリアルスロットもスキンメッシュも2以下、がハードルとなってくる。
そしてもう1つ、負荷の重いメイン用アバターの代わりに表示してもらう身代わりアバターをFallbackアバターと呼び、これはランクGood以下、ポリゴン数△1万とさらに厳しい条件になる。これが「軽い」アバターの究極目標。
ここまでくると外見ショボいんじゃ?と思われるかもしれないが、VRChatのアバター画面の「Public」にはポリゴン数△1万前後のデータ節約のお手本がいろいろあります。アバター職人ってすごい。

Publicアバターの一部。

今回ほかに以下の記事を参考にさせていただきました。先人に感謝。

アバターの数値を見るのに使った神ツール。VCCで管理らくらく。

  • ActualPerformanceWindow(anatawa12's gist selector)

  • AvatarUtils (lilAvatarUtils)

(2024/2/12 追記。
その後AvatarOptimizerがアップデートされてさらに扱いやすくなったようだ。いずれまた最新環境で比較してみたい。)

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