【VRChat】AndroidアバターをPoor以下に軽量化する方法を解説!(Questアバター)

Android対応(Quest対応)の大きな壁として「アバターをPoor以下にする」というものがあると思います。多くの人はAndroid対応はできたけどPoor以下に軽量化してないから、Show Avatarをしてもらわないといけないといったことを経験していると思います。

この記事では、Android対応したアバターを軽量化してPoor以下にする方法を紹介していきます。
AndroidだけでなくPCアバターの軽量化にも使用できる部分が多く含まれているのでぜひ活用してみてください!

【追記】こちらの内容はAndroid対応に必須というわけではありません。Very Poorのままでもアップロードは可能なのでご安心ください!(ご意見くださった方ありがとうございます)

この設定をすれば確実にPoor以下に軽量化できるという方法はありません。
なので、本記事の軽量化方法を参考にして頑張ってみてください!

アバターのAndroid対応がまだ終わっていない方は👇

今回使用するツール一覧

軽量化を始める前に事前に使用するツールをプロジェクトにインポートしておくとスムーズに進めることができるようになります。

パフォーマンスランクを確認する方法

軽量化するにあたって、アバターのパフォーマンスランクを確認する必要が出てきます。だからと言って、VRChatにアップロードして確認していてはとても時間がかかってしまいます。

そこで「Avatar Optimizer」に含まれている「ActualPerformanceWindow」を有効にすることで、プレイモードに入ったときにアバターのパフォーマンスランクを確認することができます。

Unityに”Avatar Optimizer”をインポートしたら「Tool」→「anatawa12’s gist selector」→「ActualPerformanceWindow」にチェックを入れて「Apply Changes」をクリックします。

これで「GestureManager」などでプレイモードに入ったときにアバターのパフォーマンスランクが表示されるようになります。

また、下の画像の矢印の部分を「Android」にすることでAndroidのパフォーマンスランクに切り替えることができます。

Questアバターのパフォーマンスランク

軽量化するにあたって最初に目標を決めることが大切です。例えば、「容量を10MBにする」「PhysBoneを0にする」など決めることによってどのような作業をして軽量化するのかという道が見えてきます。

Questアバターの条件を知りたい方は下の「パフォーマンスランク表」を見てください。

パフォーマンスランク表(Quest)
ExcellentGoodMediumPoor
Triangles7,50010,00015,00020,000
Bounds Size2.5m x 2.5m x 2.5m4m x 4m x 4m5m x 6m x 5m5m x 6m x 5m
Texture Memory10 MB18 MB25 MB40 MB
Skinned Meshes1122
Basic Meshes1122
Material Slots1124
Animators1112
Bones7590150150
PhysBones
Components
0468
PhysBones
Affected Transforms
0163264
PhysBones
Colliders
04816
PhysBones
Collision Check Count
0163264
Avatar Dynamics Contacts24816
Constarint Count3060120150
Constraint Depth5153550
Particle Systems0002
Total Particles Active000200
Mesh Particle Active Polys000400
Particle Trails EnabledFalseFalseFalseTrue
Particle Collision EnabledFalseFalseFalseTrue
Trail Renderers0001
Line Renderers0001

たくさんの軽量化する項目があります。でもすべて意識する必要はありません。
Poor以下にするために最低限確認しておく必要がある項目を説明すると、下のようになります。

  • ポリゴン:20,000以下
  • テクスチャ:40MB以下
  • Skinned Meshes:2以下
  • ボーン:150以下
  • マテリアル:4以下
  • PhysBone:8以下
    ※コライダーなど細かい部分はここでは省略
  • パーティクル:2個以下

上のリストを目標に軽量化をすることでPoor以下のQuestアバターを作成することができます。
では実際に項目に分けて軽量化する手順を紹介していきます。

① Quest対応をする

これからQuestアバターの軽量化を進めるにあたって、最初に「VRC Quest Tool」などを使ってQuest対応をさせておきます。

これから下の作業はQuest対応が終わっている前提で進めていきます。

② ポリゴンの削減

ポリゴンを削減するツールを使用して軽量化していきます。ツールは2種類あるのでお好きな方を使用してください。
Poorは20,000ポリゴン以下にする必要があります。

lilNDMFMeshSimplifier:lilToonのVCCリポジトリから導入可能(無料)
Mantis LOD Editor:Unity Asset Storeにて$55.00で販売中(購入の際はUnityのアカウントに注意)

手軽さを求めるなら「lilNDMFMeshSimplifier」・品質を求めるなら「Mantis LOD Editor」をおすすめします。

「Mantis LOD Editor」だけでは非破壊での改変ができません。
なので”ひつぶの倉庫”様がBoothにて公開されている、NDMF(非破壊での改変に対応)にするツールを使用します。

Mantis LOD EditorのNDMF化ツール:https://booth.pm/ja/items/5409262

lilNDMFMeshSimplifier

まず、VCCから「lilNDMFMeshSimplifier」をインポートします。

次に、ポリゴンを削減したいオブジェクトをHierarchyから選択して、Inspectorから「NDMF Mesh Simplifier」というコンポーネントを追加します。
今回は、例として「Wing」というオブジェクトを軽量化していきます。

追加したら、品質などの数値を設定して完了です。

  • 品質:
    高いほどあまり削減されません。
    0.5~0.7の間で調整することをおすすめします。あまりにも下げすぎると破綻したりします。
    しかし、Android対応はポリゴン数がが20,000以下なので0.2まで下げる必要も出てきます。
  • ○○を保持:
    ○○の部分のポリゴンを保持しようとします。
  • スマートリンクを有効化:
    最適化機能なので基本的にオンにしてください。

顔などシェイプキーが多く設定されている部分などは破綻する場合が多くなるので気を付けるようにしてください。
また、20,000の壁はとても大きいので、アクセサリーなどは「Editor Only」にするなどしてあきらめる必要もあります。

Mantis LOD Editor

まず、「Montis LOD Editor」を購入します。
購入する際は、Unityのアカウントにログインする必要があります。

購入したら、Uniryのツールバーから「Window」→「Package Manager」をクリックします。

メニューが開いたら「Mantis LOD Editor」をクリックして「Import」をします。ダウンロードが必要になる場合があります。

ここまで完了したら、実際にポリゴンを削減していきます。
ポリゴンを削減したいオブジェクトをHierarchyから選択して、Inspectorから「NDMF Mantis LOD Editor」というコンポーネントを追加します。(※NDMFの方を選択してください。)
今回は「Wing」というオブジェクトを軽量化していきます。

「NDMF Mantis LOD Editor」が表示されない場合は、Mantis LOD EditorのNDMF化ツールの導入を忘れていないか確認してください。

追加したら、数値を設定して完了です。
ポリゴンを削減した後の形を確認したい場合は「Preview」をクリックしてください。確認が終わったら「Stop Preview」で必ず停止させてください。

  • Quality(品質):
    高いほどあまり削減されません。
    40~70の間で調整することをおすすめします。Trianglesを見て今のポリゴン数を確認することもできます。
    しかし、Android対応はポリゴン数がが20,000以下なので20まで下げる必要も出てきます。
  • Protect Boundary(境界を保護):
    輪郭線が崩れないようにメッシュの外周の形状を維持します。
    顔の輪郭やアバターの耳の端などを守りたいときに便利です。有効にすることをおすすめします。
  • More Details(詳細優先):
    より細かいディテールを残すように最適化を行います。
    有効にすると処理負荷は上がりますが、見た目の精度が向上します。
  • Protect Symmetry(対称性を保護):
    左右対称のメッシュに対して、対称性を維持しながら削減をします。
  • Protect Hard Edge(ハードエッジを保護):
    シャープなエッジ(スムージングがない境界)を維持します。
    建物や機械など、角ばった形状を持つモデルの簡略化に役立ちます。
  • Beautiful Triangles(美しい三角形):
    三角形の形状を整えます。見た目が向上します。有効にすることをおすすめします。
  • Use Detail Map(ディテールマップを使う):
    特定のテクスチャ情報やマップを元にディテール保持を判断します。
    凹凸のある部分を削減しすぎないようにするためのものです。
  • Detail Boost(ディテール強調度):
    ディテール保持の強さを数値で指定します。基本的に初期設定のままで大丈夫です。
  • Remove Vertex Color After Optmize(頂点カラーの削除):
    簡略化の後、頂点カラー(色情報)を削除します。頂点カラーが不要な場合は軽量化できます。

顔などシェイプキーが多く設定されている部分などは破綻する場合が多くなるので気を付けるようにしてください。
また、20,000の壁はとても大きいので、服の中にあるものやアクセサリーなどは「Editor Only」にするなどしてあきらめる必要もあります。

[軽量化するコツ]
ポリゴンは減らすことで見た目が大きく変化します。
なので、細かい部分はあまり変えずに、体などあまり細かくないものを優先して軽量化してください。
そうすることで、形の破綻を最小限にすることができます。

③ テクスチャの圧縮

「lilAvatarUtils」というツールを使用して軽量化していきます。

上のボタンからliltoonのリポジトリを追加して、VCCから「lilAvatarUtils」をインポートします。

Unityの画面上にあるツールバーから「Tool」→「lilAvatarUtils」をクリックします。

するとメニューが開くので「None」になっている部分にアバターをドラッグ&ドロップします。

VRAMサイズの項目を確認して「40MB以上」の場合は軽量化が必要になります。

最大解像度の部分を調整して圧縮していきましょう。

[圧縮するコツ]
服など細かい描画が多い部分はあまり圧縮しないで、肌など単調なものを圧縮することであまり見た目を悪くせずに軽量化することができます。

変更したら左上の「適応」をクリックして完了です。

Skinned Meshesの削減

Skinned Meshesの削減にはいろいろの方法があるのですが、今回は一番おすすめである「Avatar Optimizer」の機能である「Merge Skinned Mesh」を使用します。

Avatar Optimizerをインポートしたらアバターを右クリックして「Create Empty」を選択します。
名前はわかりやすいように「AAO Merge SM (Skinned Meshの略)」に設定しました。(お好みで構いません)

次に、作成したオブジェクトに「AAO Merge Skinned Mesh」というコンポーネントを追加します。

統合するSkinned Meshを「AAO Merge Skinned Mesh」の「スキンメッシュレンダラー」の追加する要素にドラッグ&ドロップします。(Skinned Meshが設定されているオブジェクトすべてを追加してください)

AndroidアバターでPoor以下にするには”Skinned Mesh”が2個以下である必要があります。
顔とそれ以外で統合することをおすすめしています。(AAO公式より)
なので、顔以外のオブジェクトをすべて追加してください。(衣装なども忘れずに)

以上でSkinned Meshの削減は完了しましたが、「Root Bone」と「Anchor Override」が正しく設定されなくなってしまいます。
なので、Modular Avatarの「MA Mesh Settings」を使って「Root Bone」と「Anchor Override」を設定していきます。

Hierarchyからアバターをクリックして「Add Component」→「MA Mesh Settings」を追加します。

追加したらAnchor OverrideとBoundsの設定モードをどちらも「設定」に変更します。

次に、Anchor Overrideとルートボーンをデフォルトでアバターに設定されていたものに変更します。

これで、Skinned Meshesの削減は完了です。

⑤ ボーンの削減

ボーンの削減方法もいろいろな方法がありますが、今回は簡単に削減できる「Avatar Optimizer」の「Trace And Optimize」というコンポーネントを使用します。

Avatar Optimizerをインポートしたらアバターを選択して「Add Component」→「Trace And Optimize」をクリックします。

これだけで完了です。

この「Trace And Optimize」というコンポーネントは自動でアバターをできる限り最適化してくれます。(とりあえず入れておくだけでOK!)

⑥ マテリアルの統合

マテリアルの統合は「④Skinned Meshesの削減」と「⑤ボーンの削減」を正しくしていればある程度削減できます。
しかし、Andoroid対応は「Material Slot」を2個以下にする必要があるのでさらに統合していきましょう。

今回は「TexTransTool」の「AtlasTexture」を使って統合していきます。

TexTransToolをインポートして、Hierarchyからアバターを右クリックして「TexTransTool」→「TTT AtlasTexture」をクリックします。すると「AtlasTexture」という新しいオブジェクトが生成されます。

次に、「Assets」の何もない部分を右クリックして「Create」→「Material」をクリックして、新しくマテリアルを作成します。(名前はお好みで大丈夫です)

そしたら、Hierarchyから「AtlasTexture」をクリックして、統合したいマテリアルを選択します。
Androidアバターは制限が厳しいので、基本的にすべてチェックを入れてください。

チェックを入れたら、作成したマテリアルを「すべてのマテリアル結合時参照」にドラッグ&ドロップします。
また、テクスチャーを強制的にセットにチェックを入れて有効にします。

これでマテリアルの統合は完了です。

この作業をするとデメリットとして、肌と服などで質感が同じになってしまいます。
どうしても同じにしたくない場合は、AtlasTextureを追加して同じ質感にしたいマテリアルでまとめてください。

⑦ PhysBoneの削除

PhysBoneを削除する方法は様々ありますが、今回は「VRC Quest Tool」というツールを使用して行います。

VRC Quest Tool:https://booth.pm/ja/items/2436054

まず、上のツールバーから「Tools」→「VRCQuestTool」→「Remove PhysBone」をクリックします。

すると、PhysBoneの設定をするメニューが開きます。
このメニューから削除したいPhysBoneのチェックボックスを外していきます。

Poorの条件を達成するには以下の条件にする必要があります。

・PhysBone Componentsを8以下
・PhysBone Transformsを64以下
・PhysBone Collidersを16以下
・PhysBone Collision Check Countを64以下

髪やスカートなどはPhysBoneが多く使われている場所になっています。
なので、積極的にチェックを外して削除するようにしましょう。

PhysBoneの名前を見てもどの場所かわからない場合は、クリックすることでHierarchyとSceneにどの場所のPhysBoneなのかが表示されます。

設定が完了したら「選択していないコンポーネントを削除」をクリックします。

これでPhysBoneの軽量化は完了です。

⑧ パーティクルの削除

パーティクルはPoor以下にするために2つ以下にする必要があります。

また、基本的にパーティクルにはマテリアルも含まれているので、増やすことで「Material Slot」の圧迫にもなります。
なので今回は、パーティクルを削除する方向で進めていきます。

パーティクルは「Particle System」というコンポーネントで動作しているので、これを“削除”もしくは”Editor Only”に設定することで軽量化することができます。

「Particle System」が含まれているオブジェクトを見つけたら、そのオブジェクトを「Editor Only」に設定します。

これでパーティクルの軽量化(無効化)は完了です。

パーティクルをつけたい場合は、マテリアル数にも気を付けながら設定するようにしてください。

まとめ

ここまで完了したらアバターのパフォーマンスランクを確認してみてください!Poor以下になっているでしょうか?
特にマテリアルやポリゴンの部分で詰まる方が多いと思います…(私も実際そうでした)

左が軽量化前、右が軽量化後です!(アバターの見た目はとても悲惨なことになります…)
あとはアップロードするだけになります。”Buleprint ID”に気を付けてアップロードしてください。

PCとAndroid両方対応させるには同じ”Buleprint ID”にする必要があります。
また、プラットフォームがPCのままアップロードするとPCのほうが上書きされてしまうので気を付けてください。

なつきなつき

髪の一部やアクセサリーなどはあきらめて軽量化しました。
さらに、もともと12万ポリゴンのものを2万まで減らしたので劣化してしまうのは割り切りましょう!

「ぶいなび」では初心者や中級者向けにアバター改変の解説をしているので興味のある方はご覧ください👇