目次
1.雑感
例えるなら「初めてModular Avatarを使ったときのような感動」を覚えました
Avatar Optimizerはいわゆる非破壊的なアバター最適化ツールです
昨日今日でアバター軽量化を試みた私でも
何も考えずにUnity上でドラッグ&ドロップするだけで
メッシュとマテリアル・PhysBoneコンポーネントの統合ができて
最終的にVeryPoor寄りのPoorをMediumにできたので神ツールです
試しにUnity上でのメッシュとマテリアル統合の様子を録画してみましたが
1分以内で完了しました(全画面推奨・雑なので見なくても大丈夫です)
軽量化全体の話ですが私の場合は軽量化前に衣装や小物を詰め込んでいたため
軽量化前後でフレームレートが10前後上がりました
2.前提
既にSteamでVRChatをプレイしている人向けの記事です
とにかく数FPSでもフレームレートを稼ぎたい人や
集会等で可能な限り他人のフレームレートを下げたくない人
アバター軽量化はしたいけどBlenderは触りたくないしメッシュ統合とかよくわからないと思う人向けの記事かもしれません
Avatar Optimizerは現時点でバージョン0.2.7でありアップデートによって仕様が変更される場合があります
無料
Avatar Optimizerを含めて紹介するツールは全て無料です
PCVR
私がPCVR環境なので
VCC最新版
Avatar Optimizerを導入する際に最新版のVCCを要求されました
Unityパッケージ版もあるようです
1アバター1衣装
アバター軽量化の最適解だと思いました
Unityだけで何とかしたい
Blenderはよくわからないです
パフォーマンスランクがなんとなくわかる
VRChat公式ドキュメント Performance Ranks より引用
Excellent: 素晴らしい 最高の状態
Good: 良い ここまで落とせたら凄い
Medium: 普通 これで十分
Poor: 悪い 改善の余地あり
VeryPoor: 非常に悪い 重大な問題あり!上限がないので規制されることもある
衣装や小物を詰め込まない等の最低限の軽量化知識は必要かもしれません
昨日今日でアバター軽量化について知ったのでより良い方法があるかもしれません
特に専門用語やプレハブ周りはまだ理解できていないので「そこおかしくない?」という点があるかもしれません
よくわからないけど動いているからヨシ!の精神で行っています
私の使用デバイス・PCパーツの詳細はこちら(Geartics)
3.経緯
VRChatを複数人で遊ぶと重い…だけどシステム設定面ではもうできることがない…
初めてアバター軽量化について調べる
アバターのパフォーマンスランクを下げるとえらいらしい
自分のアバターのパフォーマンスランク内訳を見て絶望する
一部のコミュニティや海外の集会ではVeryPoorアバターが禁止されていることを知る
Radial Inventory Systemに頼ってバカみたいに詰め込んでいた衣装や小物を削除
手動でPhysBone統合やメッシュ削除ツールを使ってギリギリPoorにできた
メッシュ統合について調べているとAvatar Optimizerというツールが出てきた
神ツールだった
最終的に軽量化前後でフレームレートが10前後上がって軽量化の重要性を知った
4.同時に使用するツール
Play Modeでもパフォーマンスランクを確認できるウィンドウ
Avatar Optimizerでの統合はPlay ModeやBuild & Publishで反映されます
パフォーマンスランクは本来VRChat SDKのコントロールパネルにて確認できますが
Play ModeやBuild & Publishに入った状態ではパフォーマンスランクの表示が消えます
そのためこのツールを導入してPlay Modeでも確認できるウィンドウを追加します
導入には2つの方法があります
・CSファイルをAssetsフォルダにコピーして導入する
・VCCのユーザーパッケージで導入する(5.Avatar Optimizerのインストールで触れます)
CSファイルをAssetsフォルダにコピーして導入する場合
GitHubからZIPファイルをダウンロードして解凍します
A window to see actual performance rank on building avatars. · GitHub
解凍して出てくるCSファイル「ActualPerformanceWindow.cs」をAssetsフォルダの任意の場所にコピー
Play Modeに入るとパフォーマンスランクを確認できるウィンドウが表示されます
導入後はUnityのTools→anatawa12 gistsから有効/無効を切り替えることができます
VRCHierarchyHighlighter
便利ツールとしてお馴染みヒエラルキーの階層表示を改善するツール
メッシュ付き・PhysBone付きのオブジェクトが分かりやすくなるので導入推奨
5.Avatar Optimizerのインストール
GitHubにリンクがあるので移動します
InstallationのWith VCCのthis linkをクリックする
ブラウザがChromeの場合はVCCを開く許可を求められる
[CreatorCompanionを開く]を選択する
VCCを開いた後にリポジトリを追加する画面が出てくる
[I Understand, Add Repository]を選択
Projects画面でツールを導入したいプロジェクトの[Manage Project]をクリック
「Anatawa12's AvatarOptimizer」の右端にある+ボタンを押して導入完了
(スクリーンショットは導入後の画面です)
・2023/4/27追記 VCCから導入する場合のバージョンについて
--
VCCのバグで開発版がインストールされてしまうそうです
**重要**
— anatawa12@VRC,Neos AvatarOptimizerのひと (@anatawa12_vrc) 2023年4月26日
VCCからAvatar Optimizerを入れる際は'-'がないバージョンを入れるように気をつけてください
VCCのバグにより誤って開発版が最新版として表示されてますが開発版は開発版のため仕様は推奨*されません*
unitypackageからインストールした場合には影響を受けません。
Installed Versionに「-beta」と表示されている場合は下の画像のように
赤枠部分をクリックして「-beta」がついていないバージョンを選択しましょう
↓-betaがついていないバージョンを選択する
-betaがついていなければOK
--
同時に追加された「anatawa12's gist pack」には前述の
「Play Modeでもパフォーマンスランクを確認できるウィンドウ」が含まれています
CSファイルをAssetsフォルダにコピーすることで導入していない場合は
「anatawa12's gist pack」の右端にある+ボタンを押すことで導入できます
こちらの場合はUnityのTools→anatawa12's gist selectorで表示されるウィンドウから
ActualPerformanceWindowを選択してApply Changesで有効化できます
Avatar OptimizerはUnityPackageでの導入もできるらしいです(GitHubにリンクあり)
6.使用したコンポーネント
Merge Skinned Mesh&Freeze BlendShapes
非破壊でメッシュを統合&ブレンドシェイプ固定のコンポーネント
今回は体と服のメッシュの統合に使いました
顔と体でメッシュが分かれていて顔に可変のブレンドシェイプがある場合は顔を統合してはいけないようです
場合によってはSkinned Meshesを「顔」「体+衣装」の2つに抑えることができます
手順
ヒエラルキーのアバター内にCreate Emptyで空オブジェクトを作成する
アバター内に作成されたGameObjectを選択してAdd Component
検索欄に「merge」等と入れて出てくるMerge Skinned Meshを選択して追加する
同じようにFreeze BlendShapesも追加する(後で追加しても大丈夫です)
Skinned RenderersのスロットにSkinned Mesh Rendererを指定していきます
Skinned Mesh Renderer付きのオブジェクトを特定する
作業がしやすいよう空オブジェクトのInspectorウィンドウをロックしておきましょう
Builderタブ(アップロードボタンのあるタブ)に移動して
Skinned Mesh Renderersの部分を探して右側の[Select]を押す
自動でヒエラルキーのSkinned Mesh Renderer付きのオブジェクトが全て選択される
顔以外のメッシュを1つずつドラッグ&ドロップで入れる(後で問題があれば外せる)
Merge Materialsには共通のマテリアルが表示されている
特に問題がない場合そのままにしておけば共通のマテリアルを統合してくれる
Freeze BlendShapeにはメッシュに含まれているブレンドシェイプが表示されている
メッシュを統合すると全頂点がブレンドシェイプ対象になって重くなるらしいので
ブレンドシェイプを固定してメッシュから削除してくれるらしい
Check Allを押してすべてにレ点を入れる(後で問題があれば外せる)
作業を終えたらInspectorウィンドウのロックを解除しておきましょう
Play Modeに入って実際のパフォーマンスランクや描画を確認する
メッシュが統合されてSkinned Meshesが合計3つになりました
ヒエラルキーを見るとPlay Modeに入っているときだけ統合したメッシュを含んでいたオブジェクトからメッシュが消えていることがわかります
わかりやすいように空オブジェクトの名前はMergeMesh等の名前に変えておきましょう
私の場合は衣装のヘアピンの位置がおかしくなったので統合対象外にしました
Gesture Managerを動かすと髪の形が少し変わったりしたけど気にならないからいいや…
Merge PhysBone
これと後述のMerge Boneについては正直よくわかっていないので良い感じに設定してください
同じ値のPhysBoneコンポーネントを統合できます(Play Modeで反映)
例えば同じ値のPhysBoneコンポーネント8個を選択して統合すると
パフォーマンスランク内訳のPhysBone Componentsを7個分削減できます
下の画像ではコンポーネントを追加したGameObjectを同じ値のPhysBoneコンポーネントを持つオブジェクトの親にしていますがMerge Skinned Meshの時と同じようにGameObject単体に追加しても機能します
私の場合は胸と前髪以外の共通PhysBoneをそれぞれ統合しました
手順
Merge Skinned Meshの手順と大体同じですが共通するPhysBone分の作業が必要です
アバター内に空オブジェクトを作成してMerge PhysBoneコンポーネントを追加
VRChat SDKコントロールパネルのBuildsタブからPhysBone ComponentsのSelectを選択
上の画像のようにComponentsのスロットへPhysBone付きオブジェクトを入れる
アバターや衣装の元データの構造を弄っても気にしない場合は上の画像のように作成した空オブジェクトを親にしたり
元からある共通のPhysBone付きオブジェクトの親オブジェクトに直接コンポーネントを追加した方が見栄えが良いかもしれません
PhysBoneの値が一致しない場合はエラーが発生します
値が若干異なる場合でも動き方が似ていて主要な部位ではないのであれば値を合わせて統合することで数を削減してもよいと思います
Merge Bone
何なのかまったくわかっていないので良い感じに設定してください
Twitterで検索したところBoneを削除できるらしいのですが実際に消えているのはPhysBone?
PhysBone付きオブジェクトに追加することで機能するようです
Merge PhysBone付きのオブジェクトに追加するとMerge PhysBoneで指定したPhysBoneをまとめて削除できました
このコンポーネントでは何かを指定するという手順はないです
・2023/4/20追記 Merge Boneについて作者様からコメントをいただけました
親ボーンにboneを結合して削除するようなcomponentとのことです
merge boneに関しては分かりづらいかもしれませんが、親ボーンにboneを結合して削除するようなcomponentです。
— anatawa12@VRC,Neos AvatarOptimizerのひと (@anatawa12_vrc) 2023年4月19日
動かさないboneにつけるとavatar performance rankのbonesを減らせるはず。 https://t.co/QJlGk8GSyD
私がボーンを把握していないためReadmeの内容を理解できていません
・このコンポーネントを追加したオブジェクトは削除される
・ボーンが含まれる場合は親ボーンに統合される
・親にもMerge Boneコンポーネントがある場合は親ボーンの親に統合される
・このコンポーネント付きオブジェクトのすべての子はこのオブジェクトの親に属する
使い方が合っているのかわかりませんが後述の内部的なボーンだけを削除する既存の便利ツール(ModelBoneDeleter)のように一部衣装のメッシュ(見た目)は残してボーンだけ削除する場合に使えました
私の理解が及ばず親オブジェクト1つだけにコンポーネントを追加したところ見た目が破綻しましたがPlay Modeでのみ反映されるためすぐに修正できました(左足ブーツのリボンのボーンを削除しようとした様子)
よくわかりませんが親と子のボーン入りオブジェクト全てにコンポーネントを追加した状態だと破綻せずパフォーマンスランク内訳のBones数も減りました(選択中のオブジェクト11個がボーン入り)
子に含まれる4個分のPhysBone Components数も減りました
既にこのコンポーネントが追加されているオブジェクトに追加しようとした場合は重複して追加されないようになっていました
私のようにボーンについて理解していないと雰囲気で使うことになりそうですが
すぐにやり直しができるのでありがたいです
Trace And Optimize
(2023/12/26追記)
使っていないオブジェクトを消してくれます
ブレンドシェイプも消してくれるそうです
アバターの一番上の階層(VRC Avatar DescriptorやPipeline Manager付きのオブジェクト)に追加して使います
使わないオブジェクトをEditorOnlyにする機会が減りました
Remove Mesh in Box
(2023/12/26追記)
Boxで指定した範囲のメッシュを削除できます
Skinned Mesh Renderer付きのオブジェクトに追加して使います
bodyの靴で見えない範囲を削除して4,488ポリゴンを削減できました
7.その他の便利ツール
・Gesture Manager
VCCから導入できる公式ツール Manage Projectで+ボタンを押すだけ
VCCのGesture Managerすごく便利!表情とか着せ替えメニューの動作確認が楽になってありがたや~ #VRChat pic.twitter.com/MsWwCcoROp
— かめ山 /kameyama (@mukumi) 2022年12月12日
UnityのTools→Gesture Manager Emulatorを選択するとヒエラルキーにコンポーネント付きのオブジェクトが追加される
Enter Play-Modeで上記ツイートのように実際の動作やメニュー等を確認できる
(2023/12/26追記)アバターサムネイルはアップロード画面で設定可能になりました
アバターアップロード時(Build & Publishボタンを押した後)に選択すると
ToolsタブのExtra Toolsから画像を選択してアバターサムネイルを変更できる
縦横比率は大体1x1.26
・Modular Avatar
非破壊でお着替えができる神ツール
Avatar Optimizerと同じようにVCCから導入する
衣装側に足りない階層がある場合はアバターと同じ名前の空オブジェクトで補えばいいっぽい?
ちなみに作者は例の自動キャリブレーションを実装した神でした
・MeshDeleterWithTexture beta
Unity上でメッシュを削除できるツール
目視できない部分のメッシュを消してポリゴン数を削減する時に使います
・ペンで塗りつぶした範囲のメッシュを削除できる/消しゴムで塗りつぶしを取り消し
・ペンで塗りつぶした範囲はSceneビューのアバターに反映される
・英語/日本語切り替えは専用ウィンドウの右上
・ModelBoneDeleter
内部的なボーンを削除するツール
一部衣装のメッシュ(見た目)は残してボーンだけ削除する場合に使える
私は今のところボーン数がVeryPoorになることはないので使っていません
アバターをコピーするのでModularAvatarと併用するとエラーが発生するかも?
・UnusedBonesByReferencesTool
こちらは内部的なボーンを削除するのではなくEditorOnlyにしたメッシュを指定するとヒエラルキー上のボーンが入っているオブジェクトもEditorOnlyにしてくれるツール
オブジェクトを非表示にしただけではアップロードするデータに含まれてしまいパフォーマンスランクにも影響しますがオブジェクトのTagを「Untagged」から「EditorOnly」に変更することでアップロードするデータに含まれなくなります
もし後でオブジェクトの表示を戻す場合はTagを戻すことも忘れないようにしましょう
8.メリット&デメリット
メリット
・楽して軽量化ができる!(フレームレートも稼げる)
デメリット?
・パフォーマンスランク警察になりそう
・基本的に1アバター1衣装になるのでカラバリや着せ替えが億劫になりそう
軽量化も大事ですがVRChatを楽しむことを忘れないようにしましょう
正直パフォーマンスランクはVeryPoorが当たり前だと勘違いしていたため「VRChat 重い 設定」等で検索をした際に出てくる記事ではシステムやグラフィックの設定に加えてアバター軽量化についても言及されるべきだと思いました
9.おまけ
使用モデル
Avatar Optimizerの紹介記事
既にAvatar Optimizerでのメッシュ統合について紹介されている記事がありました
VRChat公式ドキュメントの最適化Tips
Avatar Optimizer公式サイト
アバターを軽量化して快適なVRChatライフを送りましょう!
もしこの記事が役に立ったら共有してもらえると嬉しいです