くろす先生の機密報告書

当データベースへの許可無きアクセスは固く禁止されています 違反者はハーゲンダッツ抹茶味を味わってください

【AvatarOptimizer】非破壊でメッシュやPhysBone統合が可能なアバター軽量化ツールの話(VRChat,Unity)

目次

1.雑感

例えるなら「初めてModular Avatarを使ったときのような感動」を覚えました

Avatar Optimizerはいわゆる非破壊的なアバター最適化ツールです

昨日今日でアバター軽量化を試みた私でも

何も考えずにUnity上でドラッグ&ドロップするだけで

メッシュとマテリアル・PhysBoneコンポーネントの統合ができて

最終的にVeryPoor寄りのPoorMediumにできたので神ツールです

試しに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を複数人で遊ぶと重い…だけどシステム設定面ではもうできることがない…

マストドンのTLを眺めているとアバター軽量化が目に留まる

初めてアバター軽量化について調べる

アバターパフォーマンスランクを下げるとえらいらしい

自分のアバターのパフォーマンスランク内訳を見て絶望する

一部のコミュニティや海外の集会ではVeryPoorアバターが禁止されていることを知る

Radial Inventory Systemに頼ってバカみたいに詰め込んでいた衣装や小物を削除

手動でPhysBone統合やメッシュ削除ツールを使ってギリギリPoorにできた

メッシュ統合について調べているとAvatar Optimizerというツールが出てきた

神ツールだった

最終的に軽量化前後でフレームレートが10前後上がって軽量化の重要性を知った

4.同時に使用するツール

Play Modeでもパフォーマンスランクを確認できるウィンドウ

Avatar Optimizerでの統合はPlay ModeBuild & 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のToolsanatawa12 gistsから有効/無効を切り替えることができます

VRCHierarchyHighlighter

便利ツールとしてお馴染みヒエラルキーの階層表示を改善するツール

メッシュ付き・PhysBone付きのオブジェクトが分かりやすくなるので導入推奨

5.Avatar Optimizerのインストール

GitHubにリンクがあるので移動します

 

InstallationWith VCCthis linkをクリックする

ブラウザがChromeの場合はVCCを開く許可を求められる

[CreatorCompanionを開く]を選択する

VCCを開いた後にリポジトリを追加する画面が出てくる

[I Understand, Add Repository]を選択

Projects画面でツールを導入したいプロジェクトの[Manage Project]をクリック

Anatawa12's AvatarOptimizer」の右端にある+ボタンを押して導入完了

スクリーンショットは導入後の画面です)

 

2023/4/27追記 VCCから導入する場合のバージョンについて

--

VCCのバグで開発版がインストールされてしまうそうです

Installed Versionに「-beta」と表示されている場合は下の画像のように

赤枠部分をクリックして「-beta」がついていないバージョンを選択しましょう

↓-betaがついていないバージョンを選択する

-betaがついていなければOK

--

 

同時に追加された「anatawa12's gist pack」には前述の

Play Modeでもパフォーマンスランクを確認できるウィンドウ」が含まれています

CSファイルをAssetsフォルダにコピーすることで導入していない場合は

anatawa12's gist pack」の右端にある+ボタンを押すことで導入できます

こちらの場合はUnityのToolsanatawa12'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ウィンドウをロックしておきましょう

VRChat SDKのコントロールパネルを開く

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とのことです

私がボーンを把握していないためReadmeの内容を理解できていません

・このコンポーネントを追加したオブジェクトは削除される

・ボーンが含まれる場合は親ボーンに統合される

・親にもMerge Boneコンポーネントがある場合は親ボーンの親に統合される

・このコンポーネント付きオブジェクトのすべての子はこのオブジェクトの親に属する

使い方が合っているのかわかりませんが後述の内部的なボーンだけを削除する既存の便利ツール(ModelBoneDeleter)のように一部衣装のメッシュ(見た目)は残してボーンだけ削除する場合に使えました

私の理解が及ばず親オブジェクト1つだけにコンポーネントを追加したところ見た目が破綻しましたがPlay Modeでのみ反映されるためすぐに修正できました(左足ブーツのリボンのボーンを削除しようとした様子)

よくわかりませんが親と子のボーン入りオブジェクト全てにコンポーネントを追加した状態だと破綻せずパフォーマンスランク内訳のBones数も減りました(選択中のオブジェクト11個がボーン入り)

子に含まれる4個分のPhysBone Components数も減りました

既にこのコンポーネントが追加されているオブジェクトに追加しようとした場合は重複して追加されないようになっていました

私のようにボーンについて理解していないと雰囲気で使うことになりそうですが

すぐにやり直しができるのでありがたいです

 

Trace And Optimize

(2023/12/26追記)

使っていないオブジェクトを消してくれます

ブレンドシェイプも消してくれるそうです

アバターの一番上の階層VRC Avatar DescriptorPipeline Manager付きのオブジェクト)に追加して使います

使わないオブジェクトをEditorOnlyにする機会が減りました

 

Remove Mesh in Box

(2023/12/26追記)

Boxで指定した範囲のメッシュを削除できます

Skinned Mesh Renderer付きのオブジェクトに追加して使います

bodyの靴で見えない範囲を削除して4,488ポリゴンを削減できました

7.その他の便利ツール

Gesture Manager

VCCから導入できる公式ツール Manage Projectで+ボタンを押すだけ

UnityのToolsGesture 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.おまけ

使用モデル

Ciel - シエル -【オリジナル3Dモデル】

【7アバター対応】Urban Rabbit (シエル対応)

 

Avatar Optimizerの紹介記事

既にAvatar Optimizerでのメッシュ統合について紹介されている記事がありました

 

VRChat公式ドキュメントの最適化Tips

 

Avatar Optimizer公式サイト

 

アバターを軽量化して快適なVRChatライフを送りましょう!

もしこの記事が役に立ったら共有してもらえると嬉しいです