目指せMedium!アバター最適化徹底解説【VRChat】
最終更新 2025/03/21
↑
Noteの文章を修正して、よりわかりやすいフローにしました!
改善版となるのでよろしければこちらをご覧ください!
こんにちは!pです。
改変たのちいい~~しているうちに最適化に手を出し始めたので、備忘録代わりにNoteにあげておこうと思いました。
ツールの紹介や一覧はすでに多くの人が上げているので、この記事では画像と指示の通りにやればそのまま完成するよう、段階的に紹介していこうと思います。
Quest対応だけしたい場合は、見出しからQuest対応に飛べます。
今回の記事は、コンポーネントの追加やBlendShapeなど、ある程度アバターの改変を理解している人をターゲットにしています。
必要な準備
まずは材料を用意します。以下のパッケージを追加しましょう。
AAO: Avatar Optimizer
これないと最適化始まらないよanatawa12's gists pack
AAO作者の便利ツール詰め放題パック。今回はパフォーマンスランクの表示に使うよlilAvatarUtils
アバターのテクスチャ、マテリアル、PBを一括で表示、管理できるツールlilNDMFMeshSimplifier
メッシュを削減してポリゴン数を減らすために使うよ
以下オプションTexTransTool
テクスチャをUnity内だけで編集できるようにするツール。今回はExellentを狙うために使うよVRCQuestTools
非破壊でQuestアバターに変換してアップロードできるよ。Quest化する場合に必要だよ
次は最適化元のアバターをご用意します。
また、改変済みのアバターを最適化したい場合は必ずバックアップを取りましょう
様々なツールを使う以上エラーやデータ破損が起きやすいです。
脅しじゃないよ、ほんとだよ

いつも通り改変していきます。
服装などは一つだけに絞り、切り替えできるオブジェクトもできるだけ減らすとMediumは目指しやすいです。

まずは使わないオブジェクトをEditorOnlyにしておきましょう。
これで、アップロード時に当該オブジェクトが読み込みされなくなります。

次に、現在のパフォーマンスランクを確認してみます。
上のバーのToolsから、「anatawa12's gists selector」を選択して、

「ActualPerformanceWindow」にチェックを入れ、Apply Changesをクリック。

これで、GestureManagerやUnityで再生すると、アップロード時のパフォーマンスが表示されるようになります。

今回は目標をMediumにして最適化をすすめていきます。
そのためには、表示されている赤ビックリマークと、赤丸マークを黄色や緑になるまで修正する必要があります。
Poor、Goodを目指す場合はそれぞれ下の基準に達するまで

上記のとおり、ライトがあると一発Poor、音やパーティクルのなるギミックもかさばるとランクを下げる原因となります。
目標とするパフォーマンスランクと相談してギミックをやりくりしましょう。
Mediumに行こう
ポリゴン数
まずは、一番上に表示されているポリゴン数を減らしていきます。
Mediumの基準値は70000なので、ざっと2万ポリゴンを削減する必要があります。
とりあえず、「AAO Trace and Optimize」をつけてみましょう。ポリゴン以外の最適化にも効果があります。


これだけつけてもう一度再生してみましょう。

ポリゴンはちょっとだけ減ってますね。まだ足りないので手動で削っていきます。
まずは、見えない部分の素体を削っていきます。
体のBlendShapeがある場所に「AAO Remove Mesh By BlendShape」のコンポーネントを追加します。

プレビューにチェックをいれてどんどん消していきましょう。


ちょっと減りましたがまだまだ足りないので、今度はメッシュを劣化させて減らしていきます。
ポリゴンを減らしたいパーツに「NDMF Mesh Simplifier」を追加します。

Qualityのバーを調整して、気にならない程度まで削っていきましょう。

大きなものや、形のシンプルなものは劣化させてもあまり変わらないです。

After (0.35)→

髪、服などを削って無事基準内の59000ポリゴンまで減らせました!
Skinned Meshes
Material Slots
上記2つの項目は、VRC上でのパフォーマンスに影響しやすいです。
Mediumを目指さない場合でも可能であればなるべく減らしておきましょう。
今回はまとめて減らしていきます。
アバターの親からCreate Emptyで空のオブジェクトを作り、「AAO Merge Skinned Mesh」のコンポーネントを追加しましょう。

初期では「GameObject」という名前になりますが、わかりやすいように変えてもOKです。

インスペクターにロックを掛けた状態で、AAOコンポーネント下の「追加する要素」に、結合したいものを入れていきます。

VRChat SDKから、Skinned Mesh Renderer~から始まる場所をSelectすると、ヒエラルキーで該当箇所が選択されます。

選択されたものを、まとめて入れます。


入れられるものをすべて入れました。
まず、一番下に追加されてるであろう「GameObject」を外します。
メッシュを統合するので、選択されたものは個別でオンオフできなくなります。出し入れする予定のあるオブジェクトも外しておきましょう。
余談ですが、以前は表情のあるメッシュを追加すると逆に重くなる仕様がありましたが、Unity2022では改善されているようです。
参考:
入れ終わったら、Merge Skinned Meshを追加したときに一緒についてきたSkinned Mesh Rendererの設定をしてあげます。

「Root Bone」と「Anchor Override」の二箇所を変えます。アバターのBodyなどを参照して同じArmatureを設定しましょう。
キプちゃんの場合は上からHipsとChestでOK(だと思う)

Material SlotsとSkinned MeshesがMedium基準内に収まりました!
PhysBones
最後に残ったPhysBoneを減らしていきます。
Phys Bone Comonents,Phys Bone Transform,Phys Bone Collision Checkとありますが、それぞれ個別のものではなく、まとめて減っていきます。一番多いものがMedium基準の16個になるまで減らしていきましょう。
PBは割り切りです。Medium基準まで減らすには、最終的に必要最低限なものだけ残すことになります。
残すPBの基準ですが、
ロングヘアの場合は後ろ髪、ショートヘアの場合は前髪を残すと自然な仕上がりになります。
アホ毛やチェーンなど、小物のPBはバッサリカットしちゃっても大丈夫です。

VRChat SDKを開いて、Phys Bone ComponentsのSelectを押しましょう。

一覧が選択されて表示されるので、揺らさなくても良さそうなもののチェックを外し、EditorOnlyにしましょう。

こうなります。良い子はPhysBoneのコンポーネントだけ外しましょう。

Medium以上を目指す場合、すべて外してから必要なものだけにチェックを入れるほうが早いです。

今回は耳と尻尾、前髪の揺れを残して無事Medium完成しました!
Texture Memory
今回はそのまま通りましたが、テクスチャ解像度の高い衣装の場合、この項目が足を引っ張ることがあると思います。また、VRAMの使用率に大きな影響を及ぼすため、最適化することによってパフォーマンスの向上にも貢献します。
Toolsから「lilAvatarUtils」を選択します。

テクスチャが一覧で表示されるので、最大解像度が2048を超えているものは2048以下に抑えておきましょう。
メガネなどのシンプルなアイテムや、パンツやドロワなどの見えづらい部分は更に1024や512まで下げておきます。
すべて変更し終わったら、左上の適用を押しましょう。


約1/2の20MBまで削減することができました!
Quest対応させよう
Medium基準まで達成しましたが、Quest対応はまだ済んでいません。
ですが、Mediumまで削ったあなたには容易いことでしょう。
VRCQuestToolsを使う
一度Windows用でアップロードしたあと、
以下の手順を実行してください。
Quest版のシェーダーでは透過する表現が使えません。
赤面や蒼白などの表現は顔にベタ塗りされてしまいます。

一番手っ取り早いのはNoriBlockerを導入することでしょう。
対応のPrefabを入れておきましょう。
次に、Toolsの「VRCQuestTools」から、「Convert Avatar for Android」を選択します。

アバターの部分に改変したアバターを入れ
「Avatar Dynaminc設定」から、削るPBを選択します。

選び終えたら、「非破壊的に変換する」を押し、VRChat SDKを開きます。
プラットフォームをAndroidの設定にしましょう。

コライダージャンプや音の出るギミックはQuestでは使用できないので、確認の後、該当箇所を無効化することになります。
あとはVRC Avatar Builderからアップロードすれば、Quest版のアップロードも完了します!お疲れ様でした!
アップロードできない
Uncompressed size is too large~のエラーが出た場合、Texture Memoryから解像度の設定を見直してみてください。TexTransToolのAtlasTextureを使うのも手です。
Exellent、やってみない?
ここまで軽量化したら、もういっそExellentも作ってみたくなりませんか?
「ならない」?
ありがとうございます。解説していきます。

同様の手順でMediumのアバターを用意しました。
ポリゴンとPBは上記の手順でExellent相当まで減らしてあります。
ポリゴンは32000が基準になるので、作る時点でシンプルなアバターにシンプルな改変だと楽です。
上の手順だとMaterial SlotsとBonesがネックになっていますね。さらにツールを増やして減らしていきましょう。
Material Slots
今回は、TTTのAtlasTextureを使ってテクスチャをアトラス化(一枚に集約)します。
Create Emptyでアバターの直下に空のオブジェクトを作成し、「TTT AtlasTexture」のコンポーネントを追加します。


今回も、選択できるものはすべて選択していきましょう。

「MaterialMerge」にチェックを入れ、BakeSettingを「Bake」にします。
下の「MergeReferenceMarerial」には、基準となるマテリアルを入れましょう。

この状態で再生してみましたが、Material Slotsは減っているものの、前髪が黒くなってしまっています。

fakeshadow(髪に影をつけるマテリアル)が原因と見ました。今回はスロットがカツカツなので、そのまま外してしまうことにしました。右下の「-」を押すと、メッシュからマテリアルを外すことができます。

大丈夫そうですね。最後に残ったBonesを削減していきます。
Bones
MediumまでではAAO Trace and Optimizeで勝手に減っていたBonesですが、Exellentを目指すためには手動で削る必要があります。


Armatureから統合したいボーンを複数選択した状態で、AAO Merge Boneのコンポーネントを追加します。

After→
しっぽだけでも、6個のボーンを削減することができました。
他のボーンにも同様に設定して、基準値の75個まで減らしていきます。
しっぽやスカートなど、VRChatでの動きに関係のないボーンから優先して統合するようにしましょう。

非破壊ツールなので、失敗したときはコンポーネントを削除するだけでもとに戻ります。

髪のボーンを集中的に統合して、無事Exellentが完成しました!
ここまでできたあなたは(多分)最適化マスターです!
おめでとう!
便利だけど今回は使わなかったツール
・Module Creator
衣装の一部を切り取ってPrefab化できる。必要なボーンだけ吸い取ってくれるので、衣装からいらない部分をEditorOnlyにする手間が省ける。
今回の改変では衣装の一部を切り抜いていないのでパス。
・PhysBoneを間引くやつ
スカートなど、揺れ方が同じPB同士を奇数偶数で分けて結合できる。
スカートのPBをそもそも全部無効化していたのでパス。
編集後記

閲覧ありがとうございました!自分で見直しても文章、内容ともにガバガバなので、新しい発見などあれば、ぼちぼち更新していこうと思います。
2025/03/03 公開
2025/03/04 Exellent化についての記事を追加
2024/03/21 内容の見直し、文章の変更
