アバター軽量化のすすめ
はじめに
この記事の目的
この記事は、VRCアバターの軽量化をUnityのみで完結できることをお伝えするために2024年11月に執筆されたものです。
少しでもお手伝いが出来たら幸いです。至らぬ点、不明な点がありましたらDMやリプライなどでご連絡ください。
初めに導入するもの(前提アセット)
Non-Destructive Modular Framework(以下NDMFと称します。今回使用するツールの大半はこれがないと動作しないので、必ず導入してください)
Modular Avatar (上記のものはこちらのリンクからインストールが可能です)
テクスチャ容量を減らそう
テクスチャを圧縮して軽量化しよう
lilAvatarUtils というツールを使用します。
liltoonをVCC経由で入れている場合、VCCのManage Packageの追加できるもの内に「lilAvatarUtils」というものと、「lilNDMFMeshSimplifier」というものがあるので、インストールしましょう。
VCC経由でliltoonをインストールしていない場合は、これを機にVCC経由で入れてください。
このリンクから追加できます。
Uniyを開き、通常通りアバターのセットアップや改変を行います。
上部分にあるWindow>_lil>AvatarUtils を選択。
Textureタブを選択し、上部にある「none」にScene上のアバターPrefabファイルをD&Dすると、以下の写真のような画面になります。
これはアバター全体に含まれるテクスチャファイルがすべて表示されています(着せ替えなどで追加した洋服や髪の毛なども含みます)
上記の写真内にある「Max Resolution」が画像がどのくらいの大きさか、「VRAM Size」がどれくらいVRAMを使うか(自他者に負荷をかけるか)を表しています。
今回は通常のテクスチャを1024×1024、Maskなどとついているテクスチャは 512×512で軽量化してみましょう。
それぞれのテクスチャの選択が終了したら、左上のApplyで圧縮します。
ウィンドウ下部のTotal部分にアバターの合計VRAM使用量が書いてあります。
圧縮結果は以下の写真になります。かなり削れているのが見てとれますね。
使っていないマテリアルのテクスチャを外そう
上記と同じく、lilAvatarUtilsを使用します。
右上の「Utils」タブを選択。
Clean up Materialで削減が可能です。
また、このタブではAnimatorControllersの最適化、Missing Componentの削除なども行えます。
この工程は改変の最終段階、アバターを上げる前に行うと吉です。
メッシュ数やPhysBoneをまとめて減らそう
AvatarOptimizerを導入しよう
このリンク先をよく読み、導入してください。
VCCに追加できたら、最初にlilAvatarUtilsなどを導入したときと同じように追加をしてください。
自動でいい感じに最適化してくれるやつを付けよう
アバターの直下(VRC Avatar Descriptorがあるところ)のInspector下部にある Add Componentから、Avatar Optimizer>AAO Trace And Optimize の順に選択し、追加します。
これだけで何となくいい感じにやってくれますが、これ以上に軽量化したい場合は以下を行うといいかもしれません。
メッシュ数を減らそう
これから行う作業の結果は、NDMFを使用しメッシュを一つに結合する、というものです。
アバターを右クリックし、「Create Empty」を選択。空のGameObjectを追加します。
わかりやすい名前をつけておきましょう。
追加したGameObjectにAdd Componentから Avatar Optimizer>AAO Merge Skinned Meshで選択、追加。
右上の鍵マークでInspectorが動くのを防ぎ、AAO Merge SkinnedMeshの中のスキンメッシュレンダラーに、顔とアニメーションでON/OFFするもの以外をD&Dします。
(桔梗ちゃんはアニメーションで帽子などをON/OFFできる機能がありますが、今回は顔以外すべて入れていきます)
作業後は右上の鍵マークを外すのを忘れずに行ってください。
PhysBoneを結合しよう
桔梗ちゃんはスカートや髪の毛のPhysBoneが一本一本設定されているため、これをまとめていきます。
まずスカートをまとめます。まとめたいBoneと同じ階層、今回はHipsの直下にGameObjectを作成し、Add Componentから Avatar Optimizer>AAO Merge Phys Bone で追加。
Skinned Meshを追加したのと同じように、鍵マークで固定し、コンポーネント内にD&Dします。
途中で赤いビックリマークが出たら、右側の「C」を「O」にすると解決します(この場合、PhysBoneの揺れ方に多少の差異が発生する場合があります)
同じように髪の毛のPhysBoneも統合しています。
ポリゴン数をいい感じに減らそう
AvatarOptimizerでポリゴン数を減らそう
見えない部分のポリゴン数を削っていきます。
ポリゴン数を減らしたいメッシュのInspectorを開き、Add Component>AvatarOptimizer>AAO Remove Mesh By BlendShape で追加。
これはBlendShapeという体を絞ったり大きくしたりするものを利用してポリゴンを削るものです。
プレビューについてのチェックを入れ、洋服からはみ出ていないところを選択します。
これでアバターをアップロードした際にチェックを入れた部分のポリゴンが削られます。
lilNDMFMeshSimplifierでポリゴンを削ろう
これはポリゴンをいい感じに削ってくれるものです。最初に導入しているはずなので導入は省きます。
ポリゴンを削りたいメッシュのAdd Component>NDMF で検索、NDMF Mesh Simplifier を追加。
これを顔以外の各メッシュに追加していきます。
いい感じになるまで「品質」のバーや下のチェックボックスをいじってください。
結果
軽量化する前はこのようにポリ数も多くPhysBoneコンポーネントもPoorでしたが、
軽量化後はなんとポリゴン数は4万ほど削れ、PC Mediumとなりました。
おわりに
以上が、NDMFを使用したアバターの軽量化方法となります。
その他ご不明点などがございましたら、各ツールの説明書を参照したうえでご連絡いただけますと幸いです。