VRChat / Unity エディタ拡張 — VPM パッケージ

RARA アバター軽量化・Quest・iOS対応ツール

VRChatアバターの軽量化とQuest / iOS対応を、1つの統合ウィンドウ(Avatar Studio)でまとめて実行。 元アバターは一切変更しない非破壊方式で、PC用の _Opt・Quest用の _Quest 複製を生成します。

ボタンを押すと VCC(VRChat Creator Companion)または ALCOM が起動し、リポジトリの追加確認画面が開きます。

手動で追加する場合の URL

https://rara-vrc.github.io/rara-avatar-tools/index.json

VCC / ALCOM の Settings > Packages > Add Repository に貼り付けてください。

AAO(Avatar Optimizer)との連携について

本ツールは anatawa12 氏の AAO: Avatar Optimizer と処理を分業する設計です。実行時は、生成した複製にのみ次の AAO コンポーネントを自動で追加・設定します(元アバターには一切追加しません)。

PhysBone のマージ(設定が一致する兄弟チェーンを1本へまとめてコンポーネント数を減らす処理)は、AAO の Merge PhysBone ではなく本ツール独自の実装です。

適用タイミング。これらの統合・削除は、アップロード / Play 時のビルド(NDMF)で実行されます。そのため、生成直後の複製やエディタ上の診断値には反映されず、実際のアップロード後にさらに軽くなります。最終的な数値は VRChat SDK のビルド結果、または本ツールの実測レポート(下の「使い方の完全ガイド」参照)で確認してください。
AAO 未導入時の挙動。AAO が無くても本ツール自体は動作します。AAO を使う機能(SkinnedMesh統合・隠れメッシュ削減など)は自動でスキップされ、ウィンドウ内に導入の案内が表示されます。導入は https://vpm.anatawa12.com/add-repo を VCC / ALCOM に追加して行います。使い方は 公式ドキュメント を参照してください。
謝辞。AAO: Avatar Optimizer(MIT License / anatawa12 氏)に感謝します。あわせて Meshia Mesh Simplification(MIT License / Ram.Type-0 氏)・VRChat SDK・lilToon・NonToon・Poiyomi・Modular Avatar / NDMF にも感謝します。

オープンベータ(Open β)・不具合報告

本ツールは オープンベータ(Open β) として公開中です。不具合報告・要望をお待ちしています。

不具合報告・要望は X(Twitter)の DM または メール(raravrchat@gmail.com) へお願いします。

導入手順(VCC / ALCOM)

リポジトリを追加し、プロジェクトにパッケージを入れると、Unity のメニューバーにツールが追加されます。

  1. リポジトリを追加する。 上の「VCC / ALCOM に追加」ボタンを押すか、VCC / ALCOM の Settings > Packages > Add Repository に https://rara-vrc.github.io/rara-avatar-tools/index.json を貼り付けます。
  2. プロジェクトにパッケージを追加する。 対象のアバタープロジェクトを VCC / ALCOM で開き、Manage Project の一覧から RARA Avatar Tools を追加します。パッケージは Packages/jp.rara.avatar-tools/ に配置されます。
  3. Unity で RARA メニューを開く。 コンパイルが終わると、メニューバーに RARA > アバター軽量化・Quest・iOS対応ツール が追加されます。これを選ぶと統合ウィンドウが開きます。
依存ツール:AAO(Avatar Optimizer)の導入を強く推奨。 メッシュ・マテリアルスロットの統合や非表示メッシュの削減は、ビルド時に AAO(com.anatawa12.avatar-optimizer)が担当する分業設計です。 AAO が無いと削減効果が出にくく、Quest ではスキンメッシュ数の上限に収まらず Very Poor になりやすく、既定で相手にフォールバック表示され揺れ物も停止し得ます(アップロード可否自体はサイズ上限のみで決まります)。 ブラウザで https://vpm.anatawa12.com/add-repo を開き、VCC / ALCOM で Add Repository → プロジェクトに Avatar Optimizer を追加 → Unity へ戻ってください。

メニューは1項目に統合されています。開いたあとにウィンドウ上部のチップで PC / Quest / 両方を切り替えます(既定は両方)。

使い方の完全ガイド

ウィンドウは上から順に進めれば完了する構成です: 対象/プリセット → ① 診断 → ② 構成整理 → ③ PhysBone → ④ テクスチャ → ⑤ ポリゴン(Meshia連携) → ⑥ マテリアル → ⑦ 実行 → ⑧ ヘルプ。 各ステップの詳細を下の折りたたみで確認できます。

対象(PC / Quest)とプリセットはじめに

シーンに置いたアバター(VRCAvatarDescriptor 付き)を選ぶと、自動で診断が走ります。上部の「対象」チップで PC / Quest / iOS を切り替えます(既定は両方)。目的に近いプリセットを押すと、対象と目標ランクがまとめて設定され、あとから各項目で微調整できます。

  • おまかせQuest対応 — Quest のみ / 目標 Poor。透過は乗算・加算で自動再現(ストッキング等の透けも保持)。ポリゴン削減は既定オフ。
  • PCを最低Poorまで軽量化(Very Poor回避) — PC のみ / 目標 Poor。
  • PCをGoodまで軽量化 — PC のみ / 目標 Good。
  • フル両対応(PC+Quest) — PC(Good)と Quest(Poor)の両方。
① 診断 — 現在値と目標ランク、しきい値表閾値の実数

VRChat SDK の性能統計 API を使い、現在の総合ランク・カテゴリ別ランクを PC 基準と Quest 基準の二列で表示します。対象ごとに目標ランクを選べます。EditorOnly タグのオブジェクトは、実際のビルドと同様に除外して計算されます。下部の「目標達成ガイド」には、目標を超えた項目ごとに推奨アクションと「→ ステップ n で対応」ボタンが並びます。Quest 基準では、推定ダウンロードサイズ(10MB 上限との比較)・Quest 非対応シェーダーのマテリアル一覧・Android 非対応コンポーネント一覧・テクスチャ設定の警告も表示します。

PC(Windows)ランク閾値

各数値はそのランクの上限。値がその数値以下なら少なくともそのランク以内。Poor の数値を超えると Very Poor になります(数値は SDK 判定アセットの実値)。

項目ExcellentGoodMediumPoor
ポリゴン(三角形)32,00070,00070,00070,000
スキンメッシュ数12816
メッシュレンダラー数481624
マテリアルスロット数481632
テクスチャメモリ(MB)4075110150
ボーン数75150256400
PhysBone コンポーネント481632
PhysBone 対象トランスフォーム1664128256
PhysBone コライダー481632
PhysBone 衝突判定回数32128256512
コンタクト(ローカル除く)8162432
コンストレイント100250300350

ポリゴンは Excellent だけ 32,000、Good / Medium / Poor はすべて 70,000。32,001〜70,000 は Good に載り、70,000 を超えると一気に Very Poor になります。

Quest / iOS(Android)ランク閾値

iOS も Quest(Android)と同じモバイル制限。アップロード可否はサイズ上限(ダウンロード10MB / 展開後40MB)のみで決まり、Very Poor でもアップロード自体は可能(既定でフォールバック表示・Show Avatarで表示可、既定の表示ランクは Medium)。

項目ExcellentGoodMediumPoor
ポリゴン(三角形)7,50010,00015,00020,000
スキンメッシュ数1122
マテリアルスロット数1124
PhysBone コンポーネント0468
PhysBone 対象ボーン0163264
PhysBone コライダー04816
PhysBone 衝突判定回数0163264
コンタクト24816
テクスチャメモリ(MB)10182540
ダウンロードサイズはビルド後圧縮で 10MB まで(超過はアップロード不可)。PhysBone の5項目(コンポーネント 8 / 影響 Transform 64 / コライダー 16 / 衝突判定回数 64 / コンタクト 16)のどれか1つでも Poor 上限を超えると、その分野が Very Poor になり、モバイルでは PhysBone・コンタクト・コンストレイントがすべて無効化されます(揺れもの・Contact が全停止)。
代表値の目安です。実際の判定は VRChat SDK の診断結果に従ってください。診断はエディタ上の状態で計算されるため、AAO がビルド時に統合・削減する分は反映されず、実際より悪めに出ることがあります。
② 構成整理 — トグル固定 / SkinnedMesh統合要AAO

トグルで切り替える衣装・アクセサリを検出し、各グループを「維持 / 常時表示 / 非表示除去」から選びます。

  • 常時表示 — 常に ON 固定にしてトグルアニメを外す。AAO がビルド時に結合できるようになり、スキンメッシュ数・スロット数が減ります。
  • 非表示除去 — そのメッシュを削除(EditorOnly)。ビルドから外れます(AAO 不要)。
  • SkinnedMesh統合(顔以外を1つへ / グループ指定) — 顔(ビセーム / まばたき)以外の SkinnedMeshRenderer を AAO の Merge Skinned Mesh で1つに統合。SkinnedMesh 数とスロット数が同時に減ります(既定:統合)。統合対象外:顔メッシュ、Cloth 付き、EditorOnly、プレビューで個別に「統合しない」を選んだメッシュ。グループ指定モードでは、レンダラーごとにグループ1〜8を割り当て、同じグループのレンダラーだけを1つのメッシュへ統合します(素体と衣装を別メッシュに保ちたいときなどに。顔は自動保護でグループ割り当て不可、未割り当ては統合されません)。

再処理時の残骸削除(1.8.1)。変換済みアバターをもう一度処理する場合、前回の統合先の残骸(命名が RARA_MergedMesh / RARA_MergedMesh_G{n} で、メッシュ未設定のもの)を変換時に複製から自動で削除します(古い AAO Merge Skinned Mesh ごと消えるため、新しい統合先との二重統合の衝突を防ぎます)。削除は複製のみで、元アバターは変更しません。統合プレビューには「前回の統合先(残骸)。実行時に複製から削除されます」と表示し、統合後(概算)の枚数からも除外します。自作のメッシュ未設定レンダラー(本ツールの命名に一致しないもの)は削除しません。

削減サイズの目安(1.5.0)。各トグルグループに「非表示固定で減る専有アセット」の削減量チップ(圧縮後 -◯MB / 展開後 -◯MB)を表示します。専有アセットはそのグループのサブツリー内だけが使うテクスチャ・メッシュで、素体などと共有するものは非表示にしても減らないため計上しません(共有だけのグループは「共有テクスチャのみ」と表示)。サイズ超過時は、削除候補を専有削減量の大きい順に提示するガイドも出ます(合計は入れ子の衣装グループを二重計上しません)。

Quest 対象のときは、続けて Quest 除外(ビルド除外)と 隠面メッシュ削減(服の下に隠れる肌などをブレンドシェイプで削除)もここで設定できます。

EditorOnly / Quest除外の非表示(1.5.1)。EditorOnly タグ付き・Quest除外に登録したオブジェクトは、診断だけでなく各セクションの一覧・プレビュー(マテリアル・衣装/トグル整理・SkinnedMesh統合・PhysBone・ポリゴン削減・隠面メッシュ・テクスチャ)と変換からも自動で外れます(ビルドに含まれないため。統合前後の概算にも数えません)。非表示にした項目があるセクションには「EditorOnly/Quest除外のため n 件を非表示(ビルドに含まれないため)」を1行だけ表示します。Quest除外の登録パネルだけは全件を表示し、既に EditorOnly タグが付いているものには「EditorOnly」バッジを付けます。除外配下だけで使うマテリアルは変換もスキップします(混在利用は従来どおり変換)。

隠面メッシュ削減の検出。① ブレンドシェイプ名が隠し / 縮小系トークン(shrink / hide / 縮小 / 非表示 / 削除 / 消し / 隠し 等)を含む、または部位トークン(肌 / 素体 / パンツ / インナー 等)とオフ系トークン(off / オフ / なし 等)が同居するものを候補化。② 顔まわり(顔 / 目 / 眉 / 口 / 涙 / まつ毛 / ほくろ、あ・い・う・え・お、まばたき 等)は名前・ジオメトリの両面で除外し、表情・MMD標準モーフ・リップシンクの誤削除を防止。③ 名前が一致しなくても、最終フレームで頂点の大部分(約40%以上)を強く動かす形状だけを幾何判定で候補化(保守的な閾値)。

穴に注意。削除されるのは選んだシェイプが動かす領域だけ(=制作者が「隠れる前提」で設計した箇所)です。そのため、その服を後から非表示にすると下の肌が無くなって穴が開いて見えます。削除はビルド時に AAO の Remove Mesh By BlendShape が適用し、そのコンポーネントのプレビューで削除後を確認できます(元アバターは無改変)。
トグルは統合先に追従しません。統合したメッシュは常時表示になり、ON/OFF トグルは効かなくなります。切り替えを残したいメッシュはプレビューで「このメッシュは統合しない」を選んでください。
上描きスロットの削除で統合可能に(1.9.0)。1.7.1 で一律に統合対象外にしていた多重描画(スロット数 > サブメッシュ数)のレンダラーを、上描き(余剰)スロットの削除で統合できるようにしました。(1) 何も描かない上描きは自動削除して統合 — 余剰スロットのうち、スロットが空、または Quest 対応で非表示化される疑似影 FakeShadow / アウトラインのみなど何も描かないものは、統合の直前に複製から自動で削除します。多重描画でなくなるため、ポリゴンを増やさず・見た目も変えずに通常どおり統合されます(Quest の疑似影付き髪などが操作なし・見た目の変化なしで自動統合。統合後の概算が 3 に留まっていたものが 2 に)。(2) 見える上描き(前髪影など)はチェックで削除して統合 — 実際に重ねて描かれている余剰スロット(例: PC の FakeShadow)は、プレビュー各行の「上描きスロットを削除して統合(前髪影などの重ね描き効果が消えます)」チェック(既定オフ)で削除して統合できます。重ね描き効果は失われますが、SkinnedMesh数・スロット数を確実に減らせます(チェックすると理由が「上描きスロット削除により統合します」に変わります)。(3) 差し替えアニメ対象は不可 — マテリアル差し替えアニメ(m_Materials.Array.data[N])の対象レンダラーは、削除するとスロット番号がずれてアニメが壊れるため、自動削除・チェックのいずれの対象にもしません(「マテリアル差し替えアニメがあるためスロット削除不可」と表示)。削除するのは常に余剰スロット(サブメッシュ数を超える分)だけで、基底スロットには手を付けません。複製のみで元アバターは変更しません。
NDMF コンソールの AAO 警告について。変換直後の即時実測(1.4.0 以降)や ▶️(Play)・ビルド時に、NDMF コンソールへ AAO 発の警告(統合ソース間の Root Bone / Anchor Override の食い違い、同名 BlendShape の値不一致)が出ることがあります。これらは 1.4.0 以前からビルド時に発生していたもの で、即時実測で毎回コンソールを通るようになって見えやすくなっただけで、新しい不具合ではありません。1.4.1 では統合先へ Root Bone と Anchor Override を自動設定して食い違いを抑え、アニメで使われていない同名 BlendShape の値衝突は 現在値でメッシュへ焼き込んで自動固定(見た目は変わりません)します。アニメで動かしている BlendShape は表情などが壊れないよう自動固定せず、変換レポートで案内 します。1.7.1 では、統合そのものが逆効果になるレンダラーを自動で統合対象から外すガードを2つ追加しました。(1) 多重描画のメッシュは統合しない — 髪などは影を落とすため mat_hair + FakeShadow の2スロットを1サブメッシュへ重ねて多重描画していることがあり(1.0.9からアトラス化せず残す方針)、AAO はビルド時に多重描画を実体化(サブメッシュを複製)するため、統合すると ビルド後のポリゴン数が増えます(実例では PC の _Opt 複製が 68,674 → 78,948 三角形へ増え、PCの 70,000 の崖を越えて即 Very Poor に)。1.7.1 からは統合せずそのまま残します(SDKのポリゴン数は増えません)。(2) マテリアルアニメーションの対象が食い違うメッシュは統合しない — 統合すると AAO がそのアニメを統合先メッシュ全体へ波及させ、意図しない部分にも適用されることがあるため、アニメの向いているメッシュを統合から外します(統合ソース全員が同じ material. アニメ集合ならそのまま統合)。いずれも統合プレビューに理由を表示します。また、上記の同名 BlendShape の値不一致で「アニメで動かしているシェイプ」(例: ジャケットのトグルで動く shrink_for_jacket)は、実行時にアニメーションが値を決めるため多くの場合は無害 で、変換レポートの案内にもその旨を明記しました(見た目が意図と異なるときだけ該当メッシュを統合から除外します)。AAO が出す最適化結果のログ(「!」アイコン付きで削減量などを報告するもの)は エラーではなく正常な成果報告 です(赤字のエラーでなければ変換は成功しています)。

元アバターの共有アニメクリップは変更されず(クローン側のクリップだけ編集)、m_IsActive 以外のアニメ(ブレンドシェイプ等)は維持されます。

③ PhysBone 整理 — 選別・マージ揺れ維持

残す・削除・マージを設定します。各 PhysBone の「残す」チェックは既定オン(チェック=残す)で、外すと削除されます。マージのオン/オフもこのセクション内で切り替えます。設定が一致する兄弟 PhysBone チェーンを共通の親でまとめ、揺れを維持したままコンポーネント数を削減します。積極マージ(既定オン)では、完全一致しない兄弟チェーンも先頭の設定に統一してマージします(アニメ制御・パラメータ使用などの安全ゲートは維持)。

選択後の値が PC / Quest の上限とあわせて色付きで表示され、コンポーネント・影響 Transform・コライダー・衝突判定回数・コンタクトの5本のメーター(1.11.0)、ランク別の上限ラダー、「次のランクまであと何個」の目安が併記されます。上限を超えた項目は赤くなります。

PhysBone コンポーネント上限ExcellentGoodMediumPoor
PC481632
Quest / iOS0468
Quest の Poor 上限は5項目(コンポーネント 8 / 影響 Transform 64 / コライダー 16 / 衝突判定回数 64 / コンタクト 16)あり、このどれか1つでも超えるとその分野が Very Poor になって、モバイル実機では揺れもの・コンタクトが全て停止します。コンポーネントを 8個 以内に収めても、Transform やコライダー・コンタクトが上限を超えていれば同じく全停止します。超過している場合は「優先度で自動選択」を押すと、髪・胸などを優先して自動的に上限内へ収められます(PC は超過してもアップロード可、ランクが下がるだけ)。
優先度で自動選択の5制約対応(1.11.0)。「優先度で自動選択」は、従来のコンポーネント数(8本)だけでなく、影響 Transform(64)・コライダー(16)・衝突判定回数(64)・コンタクト(16)の5制約すべてが Quest の Poor 上限に同時に収まるよう絞り込むように拡張しました(絞り込みの基準は、PC単独なら目標PCランクの上限、Quest対象ならQuest上限)。あわせて、どの PhysBone からも参照されていないコライダーは変換時に複製から自動削除し、コンタクト(VRCContactSender / VRCContactReceiver)も PhysBone と同様に残す/削除の取捨選択と「優先度で自動選択」の対象になります(いずれも1.11.0・複製のみで元アバターは無改変)。
④ テクスチャ縮小 — VRAM とサイズを減らす

メイン・エミッション・ノーマル・マスク類まで全テクスチャのメモリ寄与を推定し、寄与の大きいものから縮小提案を並べます。個別「適用」または「提案をすべて適用」で縮小計画に登録し、目標ランクの上限に収まるよう自動調整もできます。Quest では、推定サイズを 圧縮後(ダウンロード)10MB と 展開後(非圧縮)40MB の2つの上限に並べて判定し(どちらか一方でも超えるとアップロード不可)、「上限内まで自動調整(圧縮後10MB・展開後40MB)」で両方に収まるよう、寄与の大きいテクスチャから段階的に解像度を下げる計画を自動作成できます(顔・体系の名前を持つテクスチャは後回しにして画質を優先)。テクスチャを最小(縮小フロア)まで下げても届かない場合(展開後がメッシュ・ブレンドシェイプ支配のときなど)は、その旨を正直に表示し、⑤ ポリゴン削減・Quest除外・不要ブレンドシェイプ整理の併用を案内します。

縮小計画のテクスチャは、生成時に低解像度コピーが Generated に作られ、複製がそれを参照します。元のテクスチャとインポート設定には一切触れません。「縮小計画をクリア」でいつでも取り消せます。
⑤ ポリゴン削減(Meshia連携)— Meshia でビルド時に簡略化1.6.0

ポリゴン削減は Meshia Mesh Simplification(Ram.Type-0 氏 / MIT)へ連携する方式です。本ツール自前の頂点間引き UI は 1.6.0 で廃止 し、本ツールは目標三角形数の指定と「_Quest」複製への Meshia コンポーネント追加を担当します(実際の簡略化は Meshia がビルド時に実行)。既定は無効(明示的に有効化)。

  • 目標三角形数(目安 Excellent 7,500 / Good 10,000 / Medium 15,000 / Poor 20,000)を指定し、「_Quest 複製へ Meshia を追加」ボタンでワンボタン設定します。目標へ合わせた配分は Meshia 側の設定として書き込まれます。
  • 反映はビルド時。簡略化は NDMF ビルド時(Play / アップロード)に Meshia が実行するため、エディタの診断値・保存済み複製プレファブには出ません。結果は 即時実測(1.4.0 以降)/ 実測レポート(▶️ Play / SDK ビルド) で確認します。
  • 崩れやすい部位(顔・髪など)は、追加後に Meshia コンポーネント側(Meshia Cascading Avatar Mesh Simplifier)で部位ごとに目標三角形数や保護設定を個別調整でき、EditMode プレビューで品質を確認できます。
  • Meshia 未導入時はパネルに導入手順(VPM リポジトリ https://ramtype0.github.io/VpmRepository/ の追加)を表示します。
移行注記。旧バージョンで保存した自前のポリゴン削減計画(レンダラーごとの配分)は 1.6.0 では適用されません。ポリゴンを削りたい場合は、Meshia を導入して目標三角形数を指定し直してください。Unity Cloth 付きメッシュなど Meshia 側で扱えない対象は簡略化されません。
Meshia(ポリゴン削減の実体)について — 目標指定 → ワンボタンで複製へ追加1.6.0

Meshia Mesh Simplification(Ram.Type-0 氏 / MIT)は、NDMF で ビルド時(Play / アップロード) にメッシュを高品質に簡略化するツールです。1.6.0 から、本ツールの ⑤ ポリゴン削減はこの Meshia へ連携する方式 になりました。目標三角形数を指定すると、本ツールが「_Quest」複製の子オブジェクトへ Meshia のアバター単位コンポーネント(Meshia Cascading Avatar Mesh Simplifier)をワンボタンで追加・設定します(この自動付与には Modular Avatar が必要です。未導入時はパネルに導入案内が出るだけで付与されません)。導入は VPM リポジトリ https://ramtype0.github.io/VpmRepository/ を VCC / ALCOM に追加して行います(公式ドキュメント)。

  • ワンボタン運用(推奨) — 目標三角形数を指定して「_Quest 複製へ Meshia を追加」を押すだけ。顔・髪を含む配分は本ツールが目標へ合わせて設定します。追加後に Meshia コンポーネント側で個別の微調整もできます。
  • レンダラー単位で追い込む — 崩れやすい / 見せ場の部位は、追加された Meshia Cascading Avatar Mesh Simplifier で部位ごとに目標三角形数や保護設定を調整します(さらに細かく詰めたいときは、レンダラー単位の Meshia Mesh Simplifier を手動で足す方法もあります)。EditMode プレビューで品質を確認できます。
  • 二重指定に注意 — 同一レンダラーに、本ツールが追加した Meshia と手動で足した Meshia の両方を効かせないでください(レンダラー単位でどちらか一方にする)。両方が同じ目標へ強くかかると、ビルド後に 削りすぎ になります。
Meshia の削減は ビルド時 に反映されるため、エディタ / 診断のポリゴン数には出ません(EditMode プレビューはありますが、実メッシュの差し替えはビルド時です)。最終的な三角形数は 即時実測(1.4.0 以降)/ 実測レポート(▶️ Play / SDK ビルド) で確認してください。⑤ ポリゴン削減パネルは、手動で追加された Meshia コンポーネントを検出すると二重指定の注意を表示します。
謝辞。Meshia Mesh Simplification(MIT License / Ram.Type-0 氏)に感謝します。
⑥ マテリアル / 透過・アトラス・Quest変換設定PC列 / Quest列

PC 列と Quest 列を並べて、アトラス統合や変換方法を設定します。

変換方法(Quest)

全マテリアルが一覧表示され(透過 / カットアウト / パーティクル / アニメ使用 / メニュー・ギミック参照などのバッジ付き)、マテリアルごとに変換方法を選べます:自動(推奨) / Toon Standard / Toon Lit / MatCap Lit(金属・ツヤ向け) / パーティクル加算 / パーティクル乗算 / 非表示 / 変換しない。各行に「変換後にどうなるか」が表示されます。Modular Avatar の Material Setter や Avatar Menu Creator 等から参照されるマテリアルも収集・変換・差し替えされます(メニューで切り替わる目・衣装・表情差分の消失を防止)。

半透明マテリアルの自動再現(既定)

Quest には半透明シェーダーが無いため、アルファブレンド透過(チーク・涙・ガラス等)は乗算 / 加算の Particles シェーダーで近似再現します。暗めの透過は Particles/Multiply(乗算)、明るい透過は Particles/Additive(加算)へ、メインテクスチャの明るさから自動判定。既定処理は「透過マテリアルの既定処理」で 自動で半透明を再現(推奨) / 非表示にする(最軽量) / 不透明に変換から切り替えられ、マテリアル単位の上書きも可能です。大型メッシュと髪、カットアウト(髪の透け先端など)は保護対象で、常に不透明として変換されます。1.4.2 からは顔も自動保護され、顔(アバターディスクリプタのビセーム / まばたきメッシュ、または名前に face・顔 等を含むメッシュ / マテリアル)の基底マテリアルは、透過設定でも半透明の自動再現(パーティクル化)や非表示の対象にせず、常に不透明(Toon Standard)へ変換します(顔の白飛び・消失を防止)。チーク・涙・ハイライトなどのオプション重ねマテリアル(名前で判定)は従来どおり乗算 / 加算で近似します(既存の大型メッシュ・髪の保護と同じ扱い)。

アトラス統合(実験的)

互換性のある複数マテリアルを1枚のアトラステクスチャ+1マテリアルに統合し、メッシュの UV を再マップしてスロット数を減らします。同一メッシュ内は変換時、メッシュをまたぐ統合はビルド時に AAO が実施。アニメでマテリアル差し替えされるもの、UV が 0..1 範囲外(タイリング使用)のものは自動で対象外(理由付きで表示)。PC 列では、テクスチャ無しの色だけ材質は色セルを、エミッションはエミッションマスクセルをアトラスにベイクして、統合後も色・発光が保たれます。

PC 列のマットキャップは外れます。lilToon のマットキャップ(映り込み)を持つマテリアルは、統合時にマットキャップを外します(UV 再配置でマットキャップのマスクが壊れ、全面が白飛びするため)。映り込みを残したいマテリアルは「アトラス除外」に指定してください(統合対象から外れ、マットキャップも保たれます)。外したマテリアルは変換レポートに一覧表示され、統合プレビューにも「マットキャップは外れます」と表示されます。
既にQuest対応のマテリアルもアトラス統合の対象(1.8.0)。これまで Quest のアトラス統合は本ツールが変換したマテリアルだけを対象にしていましたが、1.8.0 からは既に VRChat/Mobile/Toon Standard・Toon Lit のマテリアルも統合対象になりました。購入した Quest 対応済みアバターや、元アバターを持たない過去の変換結果(本ツールの過去のアトラス出力 RARA_Atlas_* を含む)でも、そのまま使いつつスロットを削減できます。変換済みマテリアルと同じグループ規則(シェーダー・カリング・影ランプ・マットキャップの同一性)で統合します。MatCap Lit・パーティクル系は対象外です。過去のアトラス出力が入力に含まれるときは、変換レポートに「元アバターから変換し直すとより効率的に統合できます」と案内します。

Quest 対象のときは、表情デカール(チーク / 涙 / アイハイライト)の再現・非表示や、Quest 変換設定(シェーダー・テクスチャ形式など)もこのステップで設定します。変換設定の詳細設定では、マットキャップの引き継ぎ(既定オン。オフ=削除相当、映り込みが乱れる場合はオフ推奨)や Network ID の割り当て(PC/Quest間の揺れ物の掴み同期・既定オン)も切り替えられます。変換設定は実行の直前に最終確認できるよう末尾に配置されています。

マットキャップ(金属・ツヤの映り込み)1.1.0

金属パーツやツヤのある面に使う「マットキャップ(MatCap)」を、Quest / iOS でも近い見た目で再現します。⑥ マテリアルの Quest 列で設定します。

Toon Standard への自動引き継ぎ(既定)

lilToon のマットキャップは 1.1.0 から、変換先の Toon Standard が持つ内蔵マットキャップへ自動で引き継がれます(設定不要)。NonToon も従来どおり近似変換され(乗算 / 加算の2枠を Toon Standard の1枠へ近似)、VRM MToon の加算スフィア(SphereAdd)も加算マットキャップとして引き継がれます。Poiyomi のマットキャップは自動では引き継がれません(変換レポートに表示)。金属パーツなど映り込みを残したい場合は、マテリアル別指定「MatCap Lit(金属向け)」を選ぶと Poiyomi のマットキャップ画像を引き継いで変換できます。この引き継ぎは Quest 変換設定の詳細設定「マットキャップを引き継ぐ」でオン/オフでき(既定オン)、オフにすると引き継がれません(削除相当。映り込みが乱れる場合はオフ推奨)。

  • 引き継がれるもの — マットキャップ画像 / 合成モード(乗算はそのまま乗算、通常・加算・スクリーンは加算で近似)/ 強さ / マスク。
  • 引き継がれないもの — 2ndマットキャップ(2枚目)、カスタム法線・視差(パララックス)・カスタム UV などの高度なオプション(変換レポートに警告)。

MatCap Lit(金属パーツ向けの変換先)

変換方法で、変換先に VRChat/Mobile/MatCap Lit を選べます。メインテクスチャ × マットキャップの乗算にライティングを足したシンプルなシェーダーで、金属のツルッとした映り込みに最適です。

  • 制約 — 不透明のみ / ノーマルマップ・影ランプなし / マットキャップの性質上 アトラス統合の対象外(マテリアルスロットを1つ使う)。
  • 使い分けの目安 — 通常は自動引き継ぎ(Toon Standard)で十分です。より強い金属感が欲しいパーツだけ MatCap Lit を選びます。
アトラス統合との関係。異なるマットキャップを持つマテリアル同士は、同じアトラスに統合されません(見た目を守るための仕様)。マットキャップを使うマテリアルはスロットを1つ使うことを見込んでおいてください。
⑦ 実行 — 非破壊で複製を生成_Opt / _Quest

実行オプション(プレファブ保存・AAO 付与)を確認し、「この実行で行われること」の要約と実行前の確認ダイアログを見てから実行します。元アバターは変更されず、PC 用に {名前}_Opt、Quest 用に {名前}_Quest の複製がシーンとプレファブの両方に生成されます。アップロードするのはこの複製です。

実行後は、変換前後の比較テーブル(PC / Quest、目標との突き合わせ)と、Quest の変換結果チェック(元 ←→ 変換後マテリアルのサムネイル比較)が結果欄に表示されます。

繰り返し再生成は安全です。実行のたびに前回の _Opt / _Quest 複製は自動で作り直され、生成アセットは決まった場所へ GUID 保持で上書きされるので、複製が増え続けたり参照が壊れたりしません。元アバターの名前を変えたあとに取り残された古い複製がある場合は、実行結果に名前付きで警告が出ます(自動削除はしません)。
ビルド時に効く処理があります。AAO によるメッシュ・スロット統合や非表示メッシュ削減は、ビルド(アップロード)時に反映されます。生成直後にシーンや診断表で見える数値は最終ビルドより控えめに出ます。最終確認は SDK のビルド結果、または実測レポート(下の「実測レポート」参照)で行ってください。
実測レポート — 変換直後の自動実測 / ビルド・Play 時に最終数値を確認別ウィンドウ

診断は「見積り」ですが、実測レポートは ビルド / Play 時の最終的な複製そのもの を VRChat SDK と同じ計算で実測して確認できる別ウィンドウです。メニューの RARA / 実測レポート から開きます。MA(Modular Avatar)・AAO・Meshia・lilToon などの適用後、EditorOnly 除去後の本当の数値が分かるため、診断のエディタ数値が控えめに出る分をここで確認できます。1.4.0 からは、変換が完了すると自動で ビルド不要の即時実測 も走り、生成直後の複製の最終値を ▶️(Play)や SDK ビルドを待たずにその場で確認できます(下記)。

  • 変換直後の自動実測(ビルド不要・1.4.0) — 変換が完了すると、自動で「ビルド不要の実測」が走ります。NDMF の手動ベイク API で、ビルド時と同じ MA(Modular Avatar)・AAO などの処理を一時コピーへ適用し、数秒で測定します(測定に使った一時コピーと生成した中間アセットは自動削除)。▶️(Play)や SDK ビルドを待たずに、生成直後の複製の最終ランク・項目値をその場で確認できます。ウィンドウの「今すぐ実測(ビルド不要)」ボタンからも同じ即時実測を実行でき、自動実測は設定でオフにできます(既定オン)。
  • 即時実測の範囲(正直な注記) — ランク・ポリゴン数などの計算はビルド / Play 時の実測と同一の結果です。ただし ダウンロードサイズ(10MB 判定)の実ファイルサイズは、本物の SDK ビルド / アップロードでしか得られないため即時実測では推定表示のまま です。lilToon など SDK ビルド固有の処理も即時実測には含まれません(この点は ▶️(Play)・SDK ビルド時の実測のほうがより厳密)。NDMF 未導入時は即時実測をスキップします。
  • ▶️(Play)で実測 — _Opt / _Quest 複製を ▶️(Play)すると、ビルド時と同じ前処理を通した最終複製を実測し、結果がポップアップ表示されます。PC 基準・Quest 基準の両方の総合ランク・項目別の値・目標ランクとの達成判定・元アバターとの差を並べます。
  • 実バンドルサイズの記録 — SDK の Build & Test / Upload でビルドすると、生成されたアセットバンドルの実ファイルサイズも記録されます(エディタの推定ではなく実際にアップロードされるサイズ。Quest / Android は 10MB 上限との判定つき)。
  • 対象と再計測 — 既定では _Opt / _Quest 複製だけを計測します。「_Opt / _Quest 以外のアバターも計測する」で全アバターを対象にでき、編集モードでは「再計測」でスタジオ診断による測り直しもできます。
  • オフにする方法 — 計測を止めるにはウィンドウ上部の「ビルド/Play時に実測する」をオフにします(ビルドや Play の動作自体には影響しません)。自動表示だけを止めるには「▶️(Play)・ビルドのたびに実測レポートを表示する」をオフにします。
アップロードガイド — Blueprint ID で PC / Quest 両対応内蔵

1つの Blueprint ID で _Opt(PC)と _Quest(Quest / iOS)を同一アバターの両対応版(フォールバック)として上げる手順が、ウィンドウに内蔵されています。

  1. Windows で _Opt をアップロード。ビルドターゲットを Windows にして _Optだけをアクティブ化 ボタンを押し、SDK コントロールパネルから _Opt をアップロードすると、Blueprint ID が割り当てられます。
  2. その ID を _Quest へ同期。「同期」ボタンで _Opt の Blueprint ID を _Quest へコピーします(宛先に別の ID がある場合は確認ダイアログ)。
  3. ビルドターゲットを Android に切替。切替はテクスチャ等の再インポートを伴い時間がかかります。完了してから進みます。
  4. Android で _Quest をアップロード。_Questだけをアクティブ化 ボタンを押し、PC 版と同じ Blueprint ID のままアップロードすると、1つのアバターで PC / Quest 両対応になります。

_Optだけ / _Questだけをアクティブ化(1.5.1)。手順①・④のボタンで、アップロードする複製だけをシーンでアクティブにし、元アバターともう一方の複製(_Opt / _Quest)だけを非アクティブにします(無関係なアバターや非アバターには触れません。Undo で元に戻せます)。SDK パネルはアクティブなアバターを一覧するため、誤って別のアバター(PC 用シェーダーのままの _Opt や元アバター)を選んでしまう事故を防げます。ボタンの隣に現在のアクティブ状態を表示します。

ビルドターゲットとの食い違い警告(1.5.1)。ビルドターゲットが Android / iOS なのに _Quest が非アクティブで元または _Opt がアクティブなときは、赤い警告(SDK パネルで PC 用アバターを選んでいると Mobile 非対応シェーダーの警告が大量に出てビルドできない旨)を表示します。

SDK の「Multi-Platform Build & Publish」(複数プラットフォーム同時ビルド)は使わないでください。本ツールは PC 版と Quest 版を別々の複製でアップロードする方式のため、プラットフォームは1つずつ選び、手順①〜④の順に進めます。
トラブルシューティング — 見えない / 見えすぎる両方向

Quest 版で消えた・見えない

  • 髪が消えた — 旧版の透過自動非表示が原因。最新版では大型メッシュ・髪は自動非表示の対象外なので、再変換すれば直ります。
  • メニューで切り替える目・衣装が消える — 最新版ではメニュー / ギミック参照のマテリアルも自動変換されます。マテリアル設定に「メニュー/ギミック参照」バッジが付いているか確認してください。
  • ストッキング等が消えた — 一覧の「不透明にする」/「乗算で再現」ボタンで、非表示になったマテリアル行を個別に戻せます。

白く光る・板になる・見えすぎる

  • 一部が真っ白に光る — エミッション引き継ぎが原因のことが多く、再変換で直ります。残る場合は該当マテリアルの Emission を生成マテリアルで手動調整。
  • チーク等が顔に板として乗る — 既定は「自動で半透明を再現」で乗算 / 加算に近似されます。板に見える場合は、その既定処理(非表示にする 等)や個別指定を確認してください。
  • 暗いワールドで真っ黒 — 最新版は lilToon の最低明るさを引き継ぐため、再変換で改善します。

反映されない・改善しない

  • SDK に赤いシェーダーアラート — 変換前の元アバターを選んでいないか確認。アップロードするのは _Quest の方です。
  • 軽くならない / PhysBone が減らない — 前回の古い複製をアップロードしている可能性大。再変換してハイライトされた新しい複製をアップロードしてください。
生成マテリアルの手動シェーダー変更は、再生成で上書きされます。恒久的に変えたい場合は、マテリアル行の「変換方法」で指定してください(手動でシェーダーを差し替えても、次の生成でツールの変換結果に戻ります)。
軽くなる仕組み — 何をすると何が減るか
  • トグル固定(常時表示) — 表示アニメを常時 ON に固定 → AAO がビルド時に同一メッシュへ結合でき、SkinnedMesh 数が減る(要 AAO)。
  • トグル固定(非表示除去) — 使わない衣装を EditorOnly 化 → ビルドから外れ SkinnedMesh 数が減る(AAO 不要)。
  • SkinnedMesh 統合 — 顔以外を1つにまとめる → SkinnedMesh 数が減る(結合はビルド時に AAO が実施)。
  • アトラス統合 — 複数マテリアルのテクスチャを1枚に → マテリアルスロット数が減る。
  • テクスチャ縮小 — 解像度を下げる → テクスチャメモリ(VRAM)とダウンロードサイズが減る。
  • ポリゴン削減(Meshia連携) — Meshia がビルド時にメッシュを簡略化(「_Quest」複製へ Meshia を追加)→ 三角数が減る。
  • PhysBone 整理 — 揺れもの設定を選別・マージ → PhysBone コンポーネント数が減る。
  • 透過処理 — Quest には半透明シェーダーが無いため、乗算 / 加算の Particles シェーダーで見た目を近似(ランク削減ではなく Quest 対応のための処理)。

対応シェーダー・動作環境

対応シェーダー

lilToon / NonToon(jp.lilxyzw)/ Poiyomi Toon(ロック済みも可)/ Unity Standard・Unlit / VRM MToon(VRoid)。lilToon が最も忠実で、他はプロパティ読み取り+ティント焼き込みの近似変換です。前髪影(FakeShadow)やアウトライン専用などのエフェクト専用シェーダーは、Quest で再現できないため自動で非表示化されます。

Quest 変換先

VRChat/Mobile/Toon Standard(既定)または Toon Lit(最軽量)へ変換。質感をテクスチャにベイク。透過は Particles Multiply / Additive で近似。マットキャップは Toon Standard へ引き継ぎ、金属パーツは MatCap Lit も選べます。

動作環境

Unity 2022.3 系(2022.3.22f1 で確認)。VRChat Avatars SDK 3.8.1 以降(3.10.4 で確認)。レンダーパイプラインは Built-in のみ。

非破壊設計

元アバターは無変更。_Opt / _Quest のシーン複製とプレファブを出力。何度でも安全に再生成できます。

変換元シェーダーの拡充(1.3.0)。Unity Standard/Unlit と VRM MToon(VRoid)を変換元として追加し、Poiyomi Toon はロック済みマテリアルまで対応しました。各ファミリーで メイン色・ノーマル・エミッション・カットアウト/透過方針・カリング を引き継ぎます(マットキャップの自動引き継ぎは lilToon・NonToon・MToon の SphereAdd=加算のみ。Poiyomi のマットキャップは自動では引き継がれず、「MatCap Lit(金属向け)」指定で引き継げます)。ただし lilToon が最も忠実で、それ以外は「プロパティ読み取り+ティント焼き込み」の近似です。シェーダー固有の色調補正・デカール・ラメ等は非対応(変換レポートに警告)、Unity Standard のメタリックは無視(金属パーツは MatCap Lit を推奨)、アウトラインは従来どおり外れます。
AAO(Avatar Optimizer)の導入を強く推奨。 メッシュ・スロットの統合や非表示メッシュ削減はビルド時に AAO が担当します。導入は https://vpm.anatawa12.com/add-repo を VCC / ALCOM に追加して行います。