1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【VRChat】VRCで個人的にしているアバター軽量化&Quest対応術

Posted at

はじめに

この記事は、VRChatで自分が個人的に行っている軽量化とQuest対応方法を記事にまとめたものです。そのため、間違いを含んでいる可能性があります。その際は、ご指摘いただけると幸いです。

本記事内では、以下のツールを使用するためあらかじめ導入をお願いします。すべて、VCC経由で導入が可能です。

  • lilNDMFMeshSimplifier
  • AAO: Avatar Optimizer
  • VRCQuestTools
  • TexTransTool
  • anatawa12's gists pack

Quest対応

Quest対応は難しいイメージをお持ちかもしれませんが、大事なのは断捨離の心です。アバターギミックなどはすべて捨てる覚悟で、割り切ってやっていくのがコツです。

初めに、アバターをunitypackageから導入しHierarchy上に配置しましょう。今回は、ネメシスに対して軽量化を行っていきます。
スクリーンショット 2025-01-07 160836.png

VRCQuestTools

VRCQuestToolsを使用してPhysBone(揺れもの)の削除とシェーダーの変換をしていきます。
Tools -> VRCQuestTools -> Convert Avatar for Androidを選択します。
スクリーンショット 2025-01-07 161132.png

スクリーンショット 2025-01-07 161515.png
すると、このような画面が出てくるのでHierarchy上にあるアバターをドラッグアンドドロップし、変換の設定を始めるをクリックします。

スクリーンショット 2025-01-07 161640.png
Avatar Dynamics設定を開きPhysBoneの無効化を行っていきます。

スクリーンショット 2025-01-07 162215.png
下に表示されている最大数を超えないように、不要なPhysBoneのチェックを外していきます。参考までに、自分は上の画像ように設定しました。
設定ができたら、下の適応をクリックしてください。その後、元の画面に戻ると思うので、一番下の手動で変換するをクリックしてください。

スクリーンショット 2025-01-07 163304.pngスクリーンショット 2025-01-07 163518.png

すると、このようにAndroid対応のオブジェクトが生成されているかと思います。元のオブジェクト(今回だとNemesis)は、UntaggedになっているのでEditorOnlyにしておきましょう。

海苔対策

はい、ここまででQuest向けのアップロードができるようになってはいるのですが、悪名高き海苔問題が発生しています。

Q. 海苔とは

スクリーンショット 2025-01-07 164040.png
GestureManagerなどで表情を確認すると、ネメシスちゃんの表情が大変なことに!
これが通称、海苔。原因はVRC Mobileのシェーダーが透過に対応していないことで起こっています。ということで対策していきます。

マテリアルの整理

その前にマテリアルの整理をしておきましょう。
スクリーンショット 2025-01-07 164542.png
___2025-01-07 164606.png

顔のマテリアルを見てみると何やら、似たようなマテリアルが。もともとは、アウトライン用などで分割していたのですが、全部VRCのToon Litシェーダーに変換したのでそんなこまごまとした設定は全て吹き飛んでます。無駄にマテリアル数が増えるだけなので、一つにまとめちゃいます。

スクリーンショット 2025-01-07 165327.png
やり方は簡単で、同じテクスチャが使われてるマテリアルを置き換えるだけです。今回は、Nemesis_FaceOutlineとNemesis_SkinをNemesis_Faceに置き換え、Nemesis_Alpha2をNemesis_Alpha1に置き換えました。
これを顔だけでなく、服や髪などほかの部分についても行っていきます。

透過の適応

マテリアルの整理が終わったところで、海苔問題の解決をしていきます。Nemesisの場合は透過テクスチャが単体で存在しているため簡単ですが、存在しない場合はテクスチャの焼きこみ機能を利用して透過テクスチャを自作するか、FaceEmoを用いて表情を変更するなどで対応をお願いします。

___moz_2025107.png
Alpha用のマテリアルを選択してVRChat -> Mobile -> Particlesに進みます。するとこのように3つシェーダーがあると思うので、自身のアバターに合ったものを選択してください。今回は、Multiplyを使用します。

スクリーンショット 2025-01-07 170631.png
GestureManagerで表情を確認してみると、いい感じになってますね!

軽量化

現在のパフォーマンスランク

ここから軽量化を行っていきますが、その前に現在のパフォーマンスがどの程度かを調べましょう。そこで活用するのが、anatawa12's gists packです。
スクリーンショット 2025-01-07 171327.png
スクリーンショット 2025-01-07 171347.png
Toolsからanatawa12's gists selectorを選択し、ActualPerformanceWindowにチェックを入れてApply Changesをクリックしましょう。
その後、Unityの再生ボタンを押すと現在のパフォーマンスランクを教えてくれます。

スクリーンショット 2025-01-07 171639.png
うーん、みごとにVeryPoor

AAO Trace And Optimize

ご存じの方も多いかと思いますが、非破壊でなんかいい感じに最適化してくれるTrace And Optimizeコンポーネント!まずはこれをつけていきましょう。

スクリーンショット 2025-01-07 170928.png
Nemesis(Android)を選択して
スクリーンショット 2025-01-07 170945.png
InspectorのAdd ComponentからAAOで検索。
スクリーンショット 2025-01-07 171016.png
こうなれば、OK。特に設定などは必要ありません。

スキンドメッシュの統合

anatawa12's gistsの結果を見てみるとスキンドメッシュがVeryPoorとなっているため統合を行いスキンドメッシュを減らしていきます。

スクリーンショット 2025-01-07 172802.png
まずは、Hierarchy上のアバターの親オブジェクトを選択し右クリック、CreateEmptyを選択します。

スクリーンショット 2025-01-07 173013.png
すると新たにGameObjectが生成されるため、Add ComponentからAAO Merge Skinned Meshを選択。

スクリーンショット 2025-01-07 173232.png
スキンドメッシュレンダラーの追加する要素に統合したいオブジェクトを入れていきます。今回は顔以外を統合したいと思います。なお、メッシュレンダラーも統合したい場合は下の静的レンダラー内に追加してください。

Skinned Meshを統合するため一部アニメーション等が正常に動作しなくなる可能性があります。

スクリーンショット 2025-01-07 173916.png
このように設定出来たら、GestureManagerなどで破綻がないかを確認してください。

テクスチャのアトラス化

TexTransToolを用いてテクスチャのアトラス化を行いマテリアル数の削減を行います。
スクリーンショット 2025-01-07 174110.png
まずは、Hierarchy上のアバターの親オブジェクトを選択し右クリック、TexTransTool内のTTT AtlasTextureを選択します。

スクリーンショット 2025-01-07 174506.png

すると、AtlasTextureというオブジェクトが生成されるのでここで統合するマテリアルを選択します。
その後、MaterialMergeにチェックを入れPropertyBakeSettingをBakeにします。MergeReferenceMaterialには統合するマテリアル、今回は顔のマテリアルを選択してます。
最後に、ForceSetTextureにチェックを入れ完了です。
GestureManagerなどで破綻がないかを確認しましょう。

警告
透過用のマテリアルは選択しないでください。海苔問題が再発します。

ポリゴン数の削減

最後にポリゴン数の削減をしていきます。ポリゴン削減には非破壊で削減可能なlilNDMFMeshSimplifierを利用します。

スクリーンショット 2025-01-07 175420.png
スクリーンショット 2025-01-07 175512.png
ポリゴンを削減したいオブジェクトを選択しAdd ComponentからNDMFMeshSimplifierを追加します。品質のつまみを0に近づける程ポリゴンは少なくなります。品質については、どこまで許容できるかの好みになるのでいろいろと調整してみてください。
このコンポーネントを用いて、服や髪、ボディのポリゴンを削減していきましょう。

スクリーンショット 2025-01-07 180221.png

というわけで、最終的にはこのくらい軽量化できました!

ビルド & アップロード

最後にアップロードを行いましょう。この辺りは、好みですが自分の場合はWindows用でビルドしちゃいます。
スクリーンショット 2025-01-07 182052.png
チェックを入れて、Build & Publish
スクリーンショット 2025-01-07 182716.png

次にプラットフォームをアンドロイドに変更しますが、自分の環境だとなぜかエラーが出ちゃいます。
スクリーンショット 2025-01-07 182434.png

このエラーは一度unityを落として、起動。セーフモードで起動するか聞かれるのでIgnore(無視)を選択します。
起動した後、再生ボタンを押すとなぜか消えます。
最後に、AndroidでもBuild & Publishを行い完了です。

おわりに

個人的な備忘録もかねての記事作成となりましたが、Quest対応や軽量化に挑戦する方々の役に立てたのなら幸いです。素人ゆえに、つたない部分もあるかとは存じますがもし修正点等あればご指摘いただけると幸いです。
無理のない軽量化でよいVRCライフを送りましょう!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?