VRChatアバターの軽量化とQuest/iOS対応を支援するUnityエディタ拡張ツールです。すべての操作は1つの統合ウィンドウ(Avatar Studio)で行います。Unity のメニューには次の項目が追加されます。
内部的には PC最適化エンジン(PC Optimizer)と Quest/iOS変換エンジン(Quest Converter)を共有しています。各機能の詳細は Docs フォルダを参照してください。
本ツールは anatawa12 氏の AAO: Avatar Optimizer と処理を分業する設計です。実行時は、生成した複製にのみ次のAAOコンポーネントを自動で追加・設定します(元アバターには一切追加しません)。
PhysBone のマージ(設定が一致する兄弟チェーンを1本へまとめてコンポーネント数を減らす処理)は本ツール独自の実装で、AAO の Merge PhysBone は使用していません。
適用タイミング: これらの統合・削除は、アップロード/Play時のビルド(NDMF)で実行されます。そのため、生成直後の複製やエディタ上の診断値には反映されず、実際のアップロード後にさらに軽くなります。最終的な数値は VRChat SDK のビルド結果、または本ツールの実測レポート(後述)で確認してください。
AAO未導入時の挙動: AAO が無くても本ツール自体は動作します。AAO を使う機能(SkinnedMesh統合・隠れメッシュ削減など)は自動でスキップされ、ウィンドウ内に導入の案内が表示されます。導入は次のリポジトリを VCC / ALCOM に追加して行います。
謝辞: AAO: Avatar Optimizer(MIT License / anatawa12 氏)に感謝します。あわせて VRChat SDK・lilToon・NonToon・Poiyomi・Modular Avatar / NDMF にも感謝します。また、Quest/iOS変換のポリゴン削減は、1.6.0 から Meshia Mesh Simplification(MIT License / Ram.Type-0 氏)へ連携する方式へ移行しました(自前の頂点間引き実装は廃止)。
変換直後の即時実測(1.4.0 以降)や ▶️(Play)・SDK ビルドを行うと、NDMF のコンソールに AAO(Avatar Optimizer)発の警告が出ることがあります。SkinnedMesh統合(Merge Skinned Mesh)まわりで代表的なのは、統合先(統合ターゲット)に Root Bone が設定されていない・統合先に Anchor Override(アンカー上書き)が設定されていない・統合ソース間で同名の BlendShape が違う値を持つ(値不一致)の3種です。いずれも 1.4.0 以前からビルド時には発生していたもので、即時実測で毎回コンソールを通るようになって見えやすくなっただけで、新しい不具合ではありません(PC軽量化・Quest対応のどちらも、本ツールが作る統合先メッシュ RARA_MergedMesh について出ます)。
1.4.1 では、このうち機械的に解消できるものを変換側で自動処理します。統合先(Merge Skinned Mesh のターゲット)へ Root Bone と Anchor Override を自動設定して統合ソースの基準へ揃え、食い違い警告を抑えます。また、アニメーションで使われていない同名 BlendShape の値衝突は、現在の値でメッシュへ焼き込んで自動固定します(現在値のまま焼くので見た目は変わりません)。アニメーションで動かしている BlendShape は勝手に固定すると表情などが壊れるため自動固定せず、変換レポートで該当シェイプを案内します(必要なら手動で調整してください)。
1.7.1 では、統合そのものが逆効果になるレンダラーを自動で統合対象から外すガードを2つ追加しました。
mat_hair と FakeShadow の2スロットを1サブメッシュに重ねて多重描画していることがあります(本ツールは1.0.9からこうしたスロットをアトラス化せず意図的に残します)。ところが AAO は統合の過程でビルド時に多重描画を実体化(サブメッシュを複製)するため、このメッシュを統合するとビルド後のポリゴン数が増えます(AAO の警告「複数マテリアルによるマルチパスレンダリング…パフォーマンスランクにおけるポリゴン数が増えるなどの影響」)。実例では PC の _Opt 複製がビルド時に 68,674 → 78,948 三角形へ増え、PCの 70,000 の崖を越えて即 Very Poor になっていました。1.7.1 からは多重描画のレンダラーを統合せずそのまま残す(=ネイティブの多重描画のままで、SDKのポリゴン数は増えない)ようにし、統合プレビューにも「多重描画(スロット数>サブメッシュ数)のため統合しません」と表示します(Quest複製は隠しスロットが既に落ちていることが多く、通常は影響しません)。material.(マテリアルプロパティ)アニメーションの対象が違う場合、統合すると AAO がそのアニメを統合先メッシュ全体へ波及させ、意図しない部分にもアニメが適用されることがあります(AAO の警告「統合対象のメッシュ間で _UseMain2ndTex, _UseEmission へのアニメーションが異なります…意図していない部分にアニメーションが適用されてしまう可能性」)。1.7.1 からは、アニメの向いているメッシュを統合から外して各メッシュに閉じたままにします(統合ソース全員が同じ material. アニメ集合なら波及しないためそのまま統合します)。プレビューには「マテリアルアニメーションが統合先全体へ波及するため統合しません」と表示します。なお、上記の同名 BlendShape の値不一致で「アニメーションで動かしているシェイプ」(例: ジャケットのトグルで動く shrink_for_jacket)については、実行時にアニメーションが値を決めるため、統合対象間で現在値が食い違っていても多くの場合は無害です。変換レポートの案内でもその旨を明記しています(見た目が意図と異なるときだけ、該当メッシュを統合から除外してください)。
なお、AAO はビルド時に最適化の成果(削減したポリゴン数・統合したメッシュ数など)をコンソールへ出力します。行頭に「!」アイコンが付いて表示されることがありますが、これはエラーではなく AAO による正常な成果報告です。赤字のエラーでなければ変換は成功していますので、そのまま進めて問題ありません。
1.8.0 では、既にQuest対応(VRChat/Mobile/Toon Standard・Toon Lit)のマテリアルもアトラス統合の対象になりました。これまで Quest のアトラス統合は本ツールが変換したマテリアルだけを対象にしていたため、購入した Quest 対応済みアバターや、元アバターを持たない過去の変換結果(本ツールの過去のアトラス出力 RARA_Atlas_* を含む)ではマテリアルスロットが減りませんでした。1.8.0 からは、これらの Quest 対応済みマテリアルもそのまま使いつつ、変換済みマテリアルと同じグループ規則(シェーダー・カリング・影ランプ・マットキャップの同一性)で1枚のアトラスへ統合してスロットを削減します。MatCap Lit・パーティクル系のモバイルシェーダーは従来どおり統合対象外です。過去のアトラス出力が入力に含まれるときは、変換レポートに「元アバターから変換し直すとより効率的に統合できます」と案内します(アトラス同士の再統合も可能ですが、元アバターからの変換のほうが無駄なく詰められます)。
1.8.1 では、変換済みアバターを再処理(再変換・再軽量化)するとき、前回の変換で生成した統合先(RARA_MergedMesh、グループ指定モードでは RARA_MergedMesh_G{n})の残骸(AAO がビルド時にメッシュを注入する設計のため、複製プレファブ上ではメッシュ未設定のまま残るもの)を、SkinnedMesh統合の直前に複製から自動で削除するようにしました。これにより、統合プレビューで残骸が1枚分多く数えられて統合後の概算枚数が実際より1多く出る問題と、古い AAO Merge Skinned Mesh が新しい統合先とソースを取り合う二重統合の衝突を防ぎます。削除は必ず複製に対してのみ行い、元アバターは一切変更しません。統合プレビューでは、これらの残骸を「前回の統合先(残骸)。実行時に複製から削除されます」と表示し、統合後(概算)の枚数から除外します。ユーザーが自作したメッシュ未設定のレンダラー(本ツールの命名に一致しないもの)は削除しません。PC軽量化・Quest対応の両方で有効です。
1.9.0 では、1.7.1 で一律に統合対象外にしていた多重描画(マテリアルスロット数 > サブメッシュ数)のレンダラーを、上描き(余剰)スロットを削除して統合できるようにしました。
FakeShadow / アウトラインのみなど何も描かないものは、SkinnedMesh統合の直前に複製から自動で削除します。削除すると多重描画でなくなるため、そのレンダラーはポリゴン数を増やさず(見た目も変えず)に通常どおり統合されます。これにより Quest 対応では疑似影付きの髪などがユーザーの操作なし・見た目の変化なしで自動的に統合できます(例: 髪が mat_hair + FakeShadow の2スロット・1サブメッシュのとき、統合後の概算が本来 2 のところ 3 に留まっていたのが、2 になります)。変換レポートに「‘X’: 何も描かない上描きスロットを削除しました(統合可能になりました)」を出します。FakeShadow)は、統合プレビューの各行の**「上描きスロットを削除して統合(前髪影などの重ね描き効果が消えます)」チェックボックス**(既定オフ)で削除して統合できます。前髪の影などの重ね描き効果は失われますが、SkinnedMesh数・スロット数を確実に減らせます。チェックすると理由が「上描きスロット削除により統合します」に変わり、レポートに「‘X’: 上描きスロットを削除して統合しました(重ね描き効果は失われます)」を出します。m_Materials.Array.data[N])の対象レンダラーは、上描きスロットを削除するとスロット番号がずれてアニメが壊れるため、自動削除・チェックボックスのいずれの対象にもしません(プレビューに「マテリアル差し替えアニメがあるためスロット削除不可」と表示)。削除するのは常に余剰スロット(サブメッシュ数を超える分)だけで、基底のサブメッシュスロットには手を付けません。処理はすべて複製に対してのみ行い、元アバターは変更しません。PC軽量化・Quest対応の両方で有効です。1.10.0 では、1.7.1 のマテリアルアニメーションの波及ガードで統合対象から外されたメッシュを、そのマテリアルアニメーションを無効化することで統合できるようにしました。エミッション切り替え(_UseEmission / _UseMain2ndTex 等)などのギミックを持つシャツ・ネクタイのようなメッシュは、統合対象間で material. アニメの対象が食い違うため 1.7.1 のガードで自動除外され(「マテリアルアニメーションが統合先全体へ波及するため統合しません」)、SkinnedMesh 数が減らないことがありました。1.10.0 からは、こうしてガードで除外された各行に**「マテリアルアニメーションを無効化して統合(この切り替え演出は動かなくなります)」チェックボックス**(既定オフ・PC/Quest/統合の全ウィンドウ)を追加しました。オンにすると、そのレンダラーに向いた material.* アニメーションを複製側のアニメーションクリップからのみ無効化(除去)した上で統合します。無効化により波及の懸念がなくなるため統合先へまとめられ、SkinnedMesh 数が減ります(例: Quest の Poor 上限 SkinnedMesh 2 に収めたいとき、顔以外がシャツ・ネクタイのエミッション演出で分かれて 4 になっていたものを、両方チェックして 2 にできます)。無効化は複製に対してのみ行い、元アバターやそれと共有するアニメーションクリップ・コントローラーは一切書き換えません(衣装・トグル整理の m_IsActive 無効化と同じ、クローン専用の複製・差し替えの仕組みを共用します)。チェックした切り替え演出は動かなくなります(固定表示になります)。変換レポートには「‘X’: マテリアルアニメーションを無効化して統合しました(無効化: _UseEmission ほか n件 / クリップ: A, B)。該当の切り替え演出は動かなくなります。」を出します。なお、マテリアル差し替えアニメーション(m_Materials.Array.data[N])は従来どおり対象外(このチェックボックスは出ません)で、無効化して統合できるのは material.(マテリアルのプロパティ値)を動かすアニメーションだけです。PC軽量化・Quest対応の両方で有効です。
Meshia Mesh Simplification(Ram.Type-0 氏 / MIT)は、NDMF でビルド時(Play / アップロード)にメッシュを高品質に簡略化するツールです。1.6.0 から、本ツールのポリゴン削減はこの Meshia へ連携する方式になりました。自前の頂点間引きは廃止し、本ツールは目標三角形数の指定と「_Quest」複製への Meshia コンポーネント追加を担当します(実際の簡略化は Meshia がビルド時に実行)。導入は VPM リポジトリ https://ramtype0.github.io/VpmRepository/ を VCC / ALCOM に追加して行います(公式ドキュメント https://ramtype0.github.io/Meshia.MeshSimplification/ )。
使い方のパターン:
注意(ビルド時反映): Meshia の削減はビルド時に反映されるため、エディタ/診断のポリゴン数には出ません(EditMode プレビューはありますが、実メッシュの差し替えはビルド時です)。最終的な三角形数は即時実測(1.4.0 以降)または実測レポート(▶️ Play / SDK ビルド)で確認してください。⑤ ポリゴン削減パネルは、手動で追加された Meshia コンポーネントを検出すると二重指定の注意を表示します。旧バージョンで保存した自前のポリゴン削減計画は 1.6.0 では適用されません。
謝辞: Meshia Mesh Simplification(MIT License / Ram.Type-0 氏)に感謝します。
AAO や Meshia、Modular Avatar による統合・削減はビルド(Play / アップロード)時に適用されるため、生成直後のエディタ数値には出ません。実測レポートは、その最終的な複製そのものを VRChat SDK と同じ計算で実測し、MA / AAO / Meshia 適用後・EditorOnly 除去後の本当の数値を確認できる機能です。メニューの RARA / 実測レポート から開けます。
本ツールはオープンベータ(Open β)として公開中です。不具合報告・要望は X(Twitter) の DM (https://x.com/RR_vrchat) または メール (raravrchat@gmail.com) へお願いします。
本ツール群は Avatar Optimizer(AAO / com.anatawa12.avatar-optimizer)と併用する前提の機能を含みます。未導入の場合は、次のリポジトリを VCC / ALCOM に追加して AAO を導入してください。
Quest/iOS変換後に、見えるべきものが消えた、または消えるべきものが見えている場合は、統合ウィンドウの⑥マテリアル(Questパネル)で該当マテリアルの変換方法を選び直して再生成してください(見せたい場合は Toon Standard(不透明)や乗算・加算、消したい場合は 非表示)。急ぎの場合は、生成された _Quest 複製のマテリアルのシェーダーを Inspector で直接 VRChat/Mobile/Toon Standard などの Quest対応シェーダーへ変更しても表示できます。ただし再生成すると生成マテリアルは同じ場所へ上書きされ、この手動変更は失われるため、恒久的にはパネルでの変換方法指定をおすすめします。Quest上では VRChat/Mobile 系のシェーダーだけが正しく表示され、それ以外はフォールバックします。アップロード前に Build & Test で実機相当の見え方を確認してください。
本パッケージの利用規約はMITライセンスに準じます。詳細は同梱の LICENSE を参照してください。
jp.rara.avatar-tools
https://github.com/RARA-vrc/rara-avatar-tools
1.11.0 (Changelog)
2022.3 or later
No dependencies
No legacy packages
RARA