最近VRC(VRChat)にハマってるぶうたです
いろんなかわいいアバターや面白いワールドを見たり体験できるおかげでイラストのインスピレーションが湧いています
ですがPCもRTX3070とVRCをHMD(ヘッドマウントディスプレイ)をつけてやるには心もとないスペックで
いつもfpsが30~50重いワールドなどでは20台とかでやっています
そんなVRCといえばテカテカどすけべデカ女アバターが腰振って踊ってるってイメージがあるかもしれませんが
実はああいうアバターってかなり描画負荷がかかるので
そういうアバターが画面内に入るだけでfps(Frames Per Second)が下がったり場合によってはVRCが落ちたりします
そういうアバターはだいたいパフォーマンスランクがVery Poorと呼ばれるアバターとなっています
パフォーマンスランクは以下のようになっており下に行くほど重いアバターということになります
Excellent
Good
Medium
Poor
Very Poor
今回は2番目にいいランクのGoodを目指したいと思います
アバターランクの基準は以下のページの「PC Limits」に書いてある値で決まります
https://creators.vrchat.com/avatars/avatar-performance-ranking-system
どれか一つでも数値が超えていると重いランクになります
そして自分の改変後の数値がこちらになります
黄色、橙、赤の数値を落として緑にするのが目標です
服装が全然違いますが、スカートみたいな揺れものがあるとPysboneを8以下にするのがほぼ不可能なのと、普段の服装が右側なので右側で進めていきます
ミルティナちゃん
服
基本的なアバターやUnity、ツールの導入は省かせてもらって
軽量化に使用したツールがこちらになります
lilAvatarUtils(アバター分析&改変総合ツール、テクスチャ解像度の変更に利用)
AAO: Avatar Optimizer 軽量化ツールがまとめて入っているもの
・Trace And Optimize (これを入れるだけでも変わります)
・Merge Skinned Mesh(メッシュの統合)
・Merge PhysBone(ボーンの結合)
・Remove Mesh in Box (Box範囲内のメッシュ削除)
・Remove Mesh By Mask(マスクで指定した範囲のメッシュ削除)
Feature-rich shaders for avatars
lilNDMFMeshSimplifier (ポリゴン削減)
(現在はMeshia Mesh Simplificationっていう新しいやつが出てます)
TexTransTool (テクスチャ関連の機能の追加)
・TexTransTool (テクスチャのアトラス化)
実は自分もいまいちどの数値がどういう意味かとかはわかってないので
「これを適用したらなんか軽くなる」みたいにやるといいです
0.アップロード
まずは軽量化する前に一度Windowsとしてアップロードしておいてください
1.lilAvatarUtils
覇権アバターの肌のテクスチャなどは4kで作られてることが多いのでこのツールを使って解像度を下げます
Tools→lilAvatarUtilsで開いたウインドウの「None (Game Object)」にアバターをドラッグし表示されたテクスチャ一覧で解像度が4096のものを2048に変更します
さらに容量を下げたい場合は1024に下げてもいいですが
元々の容量でもGoodなのでそこまでやらなくてもいいと思います
2.Trace And Optimize
まずはTrace And Optimizeをアバターのルートにつけます
この画像でいうと「Milltina_Medium」になります
これをつけるとInspectorに以下のコンポーネントが追加されます
「マテリアルスロットの前後関係を変えることを許可する」以外は初めからチェックがついてると思うので基本はそのままでいいです
3.Merge Skinned Mesh
アバターのルートを右クリックし「Create Empty」→作られたEmptyの名前をわかりやすいように変更(自分の場合はMergeMesh)→作られたファイルにMerge Skinned Meshコンポーネントを追加
Merge Skinned Meshの追加する要素に顔のメッシュ(ミルティナだとBody)以外をすべてD&D
服を着替えさせたいとかだと服のメッシュは入れちゃだめらしい
4.Remove Mesh in Box & Remove Mesh in Mask
服の下など見えない肌のメッシュを削除します
BoxとMaskどちらでもいいのですがMaskのほうが消す範囲を細かくしていできるので自分はMaskを使っています
Boxの場合は消したいメッシュ(ミルティナの場合はMilltina_bodyなど)に適用後
赤いボックスが表示され、その範囲のメッシュが削除されます
ボックスの中心、大きさ、回転を弄って好きな範囲を削除してください
このコンポーネントは重ねがけできるので身体の消したい範囲が分かれている場合は複数つけて削除してください
次にMaskのほうですがこちらはマスクテクスチャで黒、または白く塗った部分のメッシュを削除します
マスクはマスクテクスチャの「作成」を押すとUnity上で編集できます
消したい部分を黒塗り又は白塗りするとリアルタイムでメッシュが消えていくのでギリギリを攻めてみてください
ちなみにだいぶ適当ですが自分が作ったのも貼っておきます
同じ服であればこれを保存してマスクテクスチャとして指定すればそれなりに消えるはずです
5.lilNDMFMeshSimplifier
メッシュを削減したいものにつけ、Languageを日本語に設定します
こちらのコンポーネントをつけると品質で指定した数値分メッシュの量が減っていきます
品質は初期値が0.5になっていると思うのですがそこはパーツによって調整してください
自分の場合は髪の毛など上の方にあるパーツは0.6~0.7など高めの数値にし
ボトムスや靴などはあまり見えないところなので0.2~0.3ぐらいまで下げています
ただ顔につけると表情がめり込んで崩壊してしまうのでそちらにはつけないことをおすすめします
表面の曲率を保持にチェックを入れると輪郭?の形を保持しやすくなってくれるので身体や服などにはつけてもいいと思うのですが
髪の毛など細い部分があるところにつけると画像のように崩壊してしまうのでチェックをつけないことをおすすめします
5.TexTransTool
テクスチャのアトラス化で複数のテクスチャを一つにまとめることによって
なんか軽量化できます!
アバターのルートを右クリック→「Create Empty」→作成されたEmptyの名前をわかりやすい名前に変える(自分の場合はTexTrans)
コンポーネントの追加でTexTransToolを追加し「LimitCantiateMaterials」にアバターをドラッグする
自分の場合は服のテクスチャのみチェックをつけ
マテリアルの結合などを行わなくてもGoodになりました
6.Merge PhysBone & 不要なボーンの削除
アバターをGoodにする場合はPhysBoneを8以下にする必要があり通常では頭だけでも17個あります
乳揺れは残したいため使えるのは残り6個
髪揺れもしたいため前髪の3個とツインテールの4個で残り-1個
リボンと牛耳の揺れを抜いても9個でオーバーしてしまいます
なのでMerge PhysBoneを使い左右のツインテールのボーンを一つずつに結合します
まずは牛耳とリボン、しっぽのPhysBoneを無効にします
自分の場合上記自体を削除しているのでAmatureの対象部分のチェックを外しましたが
表示したい場合はそれぞれにVRC Phys Boneのチェックを外したほうがいいと思います
次にツインテールのPhysBoneの結合を行います
一旦右側で説明します
右側のツインテールのボーンは「twin tail1_R.001」と「twin tail2_R.001」の二つが使われておりどちらかのVRC Phys Boneの値をコピーしもう片方に貼り付けます
またそれぞれのMulti Child TypeをFirstからIgnoreに変更してください
次に「twin tail1_R.001」と同じ階層にCreate EmptyでEmptyを作り名前をわかりやすいものに変え
Add ComponentでAAO Merge PhysBoneを追加し
追加する要素に「twin tail1_R.001」「twin tail2_R.001」をドラッグします
同じことを左側のツインテールにも行います
左右とも終わったらアバターのルートをコピーし貼り付けます
コピーしたアバターを右クリック→「Prefab」→Unpack
もう一度コピーしたアバターを右クリック→「Prefab」→Unpack
Unpackし終わったら画像のようにコピーしたアバターの中にある作成したEmptyにそれぞれのボーンを入れます
これでボーンの結合完了です!
この状態でアップロードすればGoodになるはず…!
スカートの貫通さえ許容すれば通常衣装でもミディアムまでなら結構簡単にいけそうな気がしますね
Unpackしなくてもボーンの結合をする方法がわかる方がいらっしゃったらぜひコメントで教えてください…!
よいVRCライフを!