真・UnityだけでVRChat改変アバターMedium化
いわゆる軽量化最適化でアバターランクも上げる事を目的にした記事です。
改変に慣れてて「あとちょっとでMediumできるのに」って人は既存の記事を参考にするだけで何とかなると思います。内容が過去のZenn記事と重複要素がありますが、過去の記事より新しいものが優れてる気持ちで読んでください。
Mediumアバターとは
VRChatアバターパフォーマンスランクシステムというものがある。
アバターの最適化ごとにExcellent、Good、Medium、poor、Verypoorの5種類があり、上から3つ目の評価がMediumアバター。3つ目でも相当軽い。詳しい内容はリンク先をブラウザ機能の翻訳とか使いながら読むべし。
VRChatのイベントでは時折このランクシステムを使用したアバター制限を課されることがある。軽いアバターであればあるほどイベント運営、参加者どちらにも負荷が減り非常に快適な環境を維持できる。イベント運営勢は一度大人数で集まって全員Excellentアバターにして軽さを体験してほしい。 公式のパブリックアバターはすべてExcellentなのでログインすればすぐ用意できる。
この記事ではあくまでもMedium達成をする内容だが、Mediumまで行かずとも容量は削減できるのでアバターの容量を抑えたい人も参考にしてくれると嬉しい。
アバターなんてどれだけ軽くてもいいもんですからね!!
Mediumアバターを作る上での前提
すごく長くなったからたたみます。
環境・使用ツール一覧
Unity2022.3.22.f1
各ツールの最新版を使用するにはunityもVRChat環境最新版が必要なケースが多い。
各自バックアップをとって最新の環境にしてください。
ModularAvatar
手軽な改変と言えばModularAvatarです。これ一つで改変衣装のヒューマノイドボーンを統合できるので全員使うべし。 ボーン命名規則が独自のアバターだと機能しないことがあるらしいのでその場合は開発者へ問い合わせよう。
AvatarOptimizer
アバター軽量化のお供。ほとんどの軽量化をこれだけで終わらせることが可能。メッシュ結合、不使用シェイプキーの固定/削除、複数の同一マテリアルを統合、メッシュの削除、PhysBoneの統合、テクスチャの最適化、これらをComponentを1つつけるだけで全部やってくれる。全員使うべし。
anatawa12's gists pack
再生モード中でアバターの各パフォーマンスランクをリスト化して教えてくれるやつ。UnityProjectに入れた時点で自動的に反映してくれる。軽量化の確認効率が一気に上がる。ないとつらい。
TexTransTool
テクスチャをアトラス化して一気にマテリアル数を減らせるすごいやつ。AvatarOptimizerと併用が前提。ほかにも簡単にテクスチャにグラデーションを入れる機能があるすごいやつ。他にも多機能だからドキュメント見てね。
lilNDMFMeshSimplifier
無料で「使用するメッシュのポリゴン数を減らせる」すごいやつ。
VPMにlilToonが入っていればこちらも追加されているのでVPMから導入。入ってない人は上のリンクのVCCに追加で導入が可能。開発中のツールなので破壊的な変更や更新をされる可能性は有り。しかし使えるものはすべて使おう。
Mantis Lod Editor
Mantis LOD EditorのNDMF化ツール
lilNDMFMeshSimplifierの有料上位互換。UnityアセットとBOOTHの配布ツールを合わせて使うもの。性能の差としては「リアルタイムで減らしたポリゴン数がわかる」というところ。Mantisは安くはないのでセール期間中に買うのがおすすめ。え、今じゃん!(2024年11月27日現在) 筆者の普段使いはこっち。
Flare's (Avatar|World) Tools
lilAvatarUtils
テクスチャメモリや「このアバターにはこのテクスチャを使ってますよ」の一覧確認にも使える。どちらも細かく機能は違えど、テクスチャメモリに関してはそんなに使用感は変わらないので好みで選んでください。両方導入しても損はないです。
たくさんいっぱいあってなんじゃこりゃ、と思われるでしょうが、各ツールを信じて導入してください。ツールで何か分からないことがある場合、私でなく各開発者への問い合わせをお願いします。
開発者ではない私にエラーやバグの解決はできません。
やっていこう
各ツールを導入し、ModularAvatarでアバター改変をし、使わないメッシュを非表示にし、衣装同士が干渉する部分をAvatarOptimizerのRemove Mesh in Boxでメッシュを消したりしました。「改変したアバターを軽量化したい」という人はだいたいこの状態からだと思います。
まず、軽量化最適化を何もしてない状態で再生モードに入って各項目を確認しましょう。やりかたはこれ。
VeryPoorがいっぱいあって重い!メッシュもマテリアルも多すぎる!Mediumにするためには赤いアイコンが1つもあってはいけないので、各項目を以下の数字まで減らしていきます。
ポリゴン数 258825→70000
スキンドメッシュ 27→8
マテリアルスロット 58→16
テクスチャメモリ 193MB→110MB
フィズボーントランスフォーム 130→128
約半数が半減どころではない数字に見えるところもありますが大丈夫!まずはアバターを選択し、Inspectorの一番下のAdd Componentから「AAO Trace And Optimize」検索して選択します。その状態で再生モードに入りましょう。
自動最適化だけでここまでギュッッッと減りました。T&O最高~~~!!!皆やってくれ~~~!!!!
あとはポリゴン数を減らしていくだけです。
まずは服の下に隠れる素体を消していきます。
アバターの素体メッシュを選択してAdd Componentから「Remove Mesh in Box」を付けます。
今回はハイネックの衣装なのでざっくりと消しやすいです。
再生モードで確認。9400ほど減りましたがまだあと12622減らす必要があるので、次は見えてるメッシュのポリゴン数を減らしていきます。
ブーツから減らしていきます。
Add Componentから「ndmf」と入力して「lilNDMFMeshSimplifier」を選択します。
Componentを付けた時点で「ポリゴン数をざっくり半減しますよ」という設定になっているので、見た目に違和感が無ければそれでOK。今回はそのままだと亀裂が目立つ状態だったのでクオリティ0.6にしてみました。
再生モードで確認。3692減!あと少し!次はアウターを削ります。工程は同じですが、解説記事なので今度はMantis Lod Editorを使ってみます。Add Componentから「ndmf」と入力して「NDMF Mantis Lod Editor」を選択します。操作方法はほとんど一緒ですが、こちらはリアルタイムでポリゴン数を確認できるというのが大きな利点です。一気に8930ポリゴンを削りたいところですが、衣装の見た目を優先したいので90程度にします。まだ削る場所の候補はあるので。
ジワ減りですが効果はあります。...と、ここまでやってから、「なんか見た目よりポリゴン数多くない?衣装の干渉があるから中に着てるニットワンピは見えてる部分ぐらいしかポリゴンがないよ?」 と気づいたのでアバターのヒエラルキーを確認しましょう。
やらかしていました。素体メッシュをガッツリ消したのに下着は残ってるし、使わない傘も入りっぱなしなのでポリゴン数とマテリアル数に換算されています。ですがこれは大幅ポリゴン数削減のチャンスです、判定から消しましょう!下着と傘のメッシュを選択してEditOnlyに変更で反映されなくなります。
一気に7万を下回りました。これならアウターを削る必要もないかもしれません。もしくは、アウターを削ったままで1つアクセサリーを足しても大丈夫そうですね。ピアスとセットになっているネックレスを足してみます。
ネックレス、眼鏡、ピアス、重ね着をした上で7万以内達成!!
Mediumの判定以内であれば盛れるものは盛れるだけ盛るのもよい判断です。
もちろん、突き詰めて「できるところまでアバターを軽量化する」というの冷静で的確な判断です。
Trace And Optimizeだけで解決できない場合
今回は特に引っ掛からなかったものの「T&OだけではテクスチャメモリがMediumにならない」といった例もあります。まだ紹介できてないツールもあるので続けていきましょう。
テクスチャメモリがMediumにならない
T&Oでは下げきれない場合、「マテリアルのメインテクスチャを改変して差し替えたが、輪郭線にデフォルトのテクスチャが設定されてる」のパターンが多いです。これが1つならまだしも、もし全てのマテリアルがそうなっていたらテクスチャメモリが倍になります。メインテクスチャと揃えるか、テクスチャを外して輪郭線をオフにしましょう。私は衣装の輪郭線オフ派です。
Flare's (Avatar|World) Tools、lilAvatarUtilsで使用してるテクスチャを一覧できるので、これらのツールで確認するのもおすすめです。画像のはlilAvatarUtils。
マテリアルが16以下にならない
今回の改変では13個になりましたがやり方によっては下回らない事もあります。そんな時はTexTransToolでテクスチャを複数まとめましょう!アバターを選択してAdd Componentから「ttt」と入力して「TTT AtlasTexture」を選択します。
「アトラス化=めっちゃ解像度を縮めた状態でたくさんテクスチャ、マスク、ノーマルマップ諸々を並べて1枚のテクスチャにする」なので全部アトラス化すると目立つ部分のテクスチャがぼんやりしやすいデメリットもあります。プレビュー有効でリアルタイムに設定が反映されるので、調整しやすいのが嬉しいですね。
そのほかの気を付ける部分
ぶっちゃけ今は思いつかないです。
何かあればここに加筆されたり道中で加筆されたりします。
ここから加筆
最初から非表示メッシュをEditOnlyにしたほうがよい
それはそう。やるならPBのボーンもそうした方がいい。デメリットをあげると改変に必要なメッシュがうっかり消えてるなどの事故が起きやすい。T&Oの機能で自動的に非表示メッシュはEditOnlyにしてくれるのでどっちにしろ同じ処理はされる。(元からEditOnlyしてる人はこの記事を読む前に他のMedium化記事にたどり着いてそう。)
購入済の衣装や髪型モデルのポリゴン数を確認したい
BOOTHでポリゴン数を表記してないタイプの衣装モデルなどをMedium化する前に確認したい時はFlare's (Avatar|World) ToolsのMeshPolyCounterを使いましょう。これは素のモデル全てのポリゴン数を表示するので作業前の目安にどうぞ。(チェックボックスでのカウントオンオフは可能)
ここまで加筆
読んでそのまま真似をすればそうなることを意識して書いてますが、本来Mediumに入るほど軽量化するにはアバターパフォーマンスランクやアバターを構成するものごとへの理解が無いとできないことです。それらを各ツール開発者たちの知識や技術でたくさん下駄をはかせてもらってこういう事が出来てます。人様の善意と技術に感謝しつつ、VRChatとunityへの理解度を上げていくのが大事だと思います。
この記事書いてる人も大したこと分からんけどな! 全部ツール開発者たちのおかげです。
いつもありがとうございます。
使用モデルクレジット
Discussion