パフォーマンス最適化
このガイドでは、VRChat アバターのパフォーマンスランクを理解し、改善するための最適化手法を解説します。パフォーマンスランクの確認から、具体的な最適化手順、最適化前後の比較まで、すべてを自然言語で実行できます。
パフォーマンスランクとは
VRChat はすべてのアバターにパフォーマンスランクを付与しています。ランクが低い(重い)アバターは、他のプレイヤーの設定によって表示がブロックされたり、簡略化されたりすることがあります。
| ランク | 表示 | 他プレイヤーからの見え方 |
|---|---|---|
| Excellent | 緑 | 常に表示される |
| Good | 緑 | ほとんどの環境で表示される |
| Medium | 黄 | 一部のプレイヤーから非表示にされる場合がある |
| Poor | 赤 | 多くのプレイヤーから非表示にされる可能性がある |
| Very Poor | 赤 | 既定で非表示、手動での表示切り替えが必要 |
パフォーマンスランクが Good 以上であれば、ほとんどのプレイヤーにアバターが表示されます。イベントやパブリックインスタンスでは Good 以上を求められることが多いため、可能であれば Good を目指すことを推奨します。
ランク別の制限値
各ランクの主要な制限値を以下に示します。
| 項目 | Excellent | Good | Medium | Poor |
|---|---|---|---|---|
| ポリゴン数 | 32,000 | 70,000 | 70,000 | 無制限 |
| マテリアル数 | 1 | 1 | 2 | 4 |
| ボーン数 | 75 | 90 | 150 | 256 |
| PhysBone コンポーネント | 0 | 4 | 8 | 16 |
| PhysBone 影響ボーン数 | 0 | 16 | 64 | 256 |
| PhysBone コライダー | 0 | 8 | 16 | 32 |
| メッシュ数 | 1 | 1 | 2 | 8 |
| テクスチャメモリ | 10 MB | 18 MB | 25 MB | 40 MB |
| Skinned Mesh | 1 | 1 | 2 | 8 |
| パーティクルシステム | 0 | 0 | 2 | 8 |
パフォーマンスランクは、すべての項目のうち最も悪いランクの項目によって決まります。例えば、ポリゴン数が Excellent の範囲内でも、マテリアル数が Medium の範囲であれば、総合ランクは Medium になります。
パフォーマンスランクの確認 (check_avatar_rank)
あなた:
アバターのパフォーマンスランクを確認して
AI の動き: check_avatar_rank が実行され、現在のランクと各項目の詳細が表示されます。
AI の返答例:
パフォーマンスランク: Poor
項目別ランク:
ポリゴン数: 52,000 Good (70,000 以下)
マテリアル数: 6 Poor (4 以下を超過)
ボーン数: 142 Medium (150 以下)
PhysBone コンポーネント: 6 Medium (8 以下)
PhysBone 影響ボーン: 48 Medium (64 以下)
PhysBone コライダー: 10 Medium (16 以下)
メッシュ数: 5 Medium (2 以下を超過)
テクスチャメモリ: 22 MB Medium (25 MB 以下)
Skinned Mesh: 4 Medium (2 以下を超過)
ボトルネック: マテリアル数 (6 → 4 以下にする必要あり)
最適化の提案 (suggest_optimizations)
あなた:
最適化の提案をして。Good ランクを目指したい
AI の動き: suggest_optimizations が実行され、Good ランクに到達するための具体的な提案が表示されます。
AI の返答例:
Good ランク達成のための最適化提案:
1. [最優先] マテリアル結合: 6 → 1 に削減
- テクスチャアトラスを作成して全マテリアルを 1 つに統合
- 予想効果: Poor → Good (マテリアル制限クリア)
- 手順: 「テクスチャアトラスを作成してマテリアルを統合して」
2. [推奨] メッシュ結合: 5 → 1 に削減
- 体、髪、衣装のメッシュを 1 つに結合
- 予想効果: Skinned Mesh 数も同時に改善
- 手順: 「メッシュを結合して」
3. [推奨] ボーン削減: 142 → 90 以下
- 未使用ボーンの削除: 約 12 ボーン削減可能
- 指ボーンの簡略化: 約 20 ボーン削減可能
- 手順: 「不要なボーンを削除して」
4. [任意] テクスチャ圧縮: 22 MB → 18 MB 以下
- 4096x4096 テクスチャを 2048x2048 に縮小
- 手順: 「大きいテクスチャを 2048 にリサイズして」
自動最適化 (auto_optimize_avatar)
あなた:
自動最適化を実行して。Good ランクを目指して
AI の動き: auto_optimize_avatar が実行され、以下の処理が自動的に行われます。
- テクスチャアトラスの作成(複数のテクスチャを 1 枚にまとめる)
- マテリアルの統合
- メッシュの結合
- 未使用ボーンの削除
- テクスチャの圧縮(必要に応じて)
AI の返答例:
自動最適化完了:
実行した処理:
1. テクスチャアトラス作成: 6 テクスチャ → 1 アトラス (2048x2048)
2. マテリアル統合: 6 → 1
3. メッシュ結合: 5 → 1
4. ボーン削除: 12 本の未使用ボーンを削除
5. テクスチャ圧縮: 体テクスチャを 4096 → 2048 にリサイズ
最適化前 → 最適化後:
ポリゴン数: 52,000 → 52,000 (変化なし)
マテリアル数: 6 → 1
ボーン数: 142 → 130
メッシュ数: 5 → 1
テクスチャメモリ: 22 MB → 14 MB
Skinned Mesh: 4 → 1
ランク: Poor → Good
自動最適化は非破壊で実行されます。最適化前の状態はバックアップされるので、結果に問題がある場合は元に戻せます。
手動での最適化手法
自動最適化では対応しきれない場合や、より細かい制御が必要な場合の手動手法です。
ポリゴン削減
ポリゴン数を大幅に削減する必要がある場合は、Blender のクロスアプリ連携機能を使います。
あなた:
アバターのポリゴン数を減らしたい。Blender で Decimate して 32,000 以下にして
AI の動き: アバターのメッシュが Blender に転送され、Decimate モディファイアが適用されてポリゴン数が削減されます。その後 Unity に戻されます。
あなた:
顔はあまり崩さないで。体と衣装を中心に減らして
AI の動き: 顔メッシュの Decimate 比率を控えめに、体と衣装のメッシュをより強く削減します。
ポリゴン削減は見た目に影響します。特に顔やシルエットに関わる部分は慎重に行ってください。削減後はスクリーンショットで確認することを推奨します。
テクスチャアトラス
複数のマテリアルを 1 つにまとめるために、テクスチャアトラス(複数のテクスチャを 1 枚の大きなテクスチャにまとめたもの)を作成します。
あなた:
テクスチャアトラスを作成して。全マテリアルを 1 つにまとめて
AI の動き: 全テクスチャが 1 枚のアトラステクスチャにまとめられ、UV マッピングが再計算されます。マテリアルが 1 つに統合されます。
あなた:
アトラスの解像度はいくつになった?
AI の返答例: 「アトラス解像度: 4096x4096 です。2048x2048 に縮小しても大きな画質低下はないと思われます。」
あなた:
2048x2048 に縮小して
ボーン削減
あなた:
使われていないボーンを一覧表示して
AI の返答例:
未使用ボーン一覧 (12 個):
Accessory_Holder_L, Accessory_Holder_R
Wing_Root_L, Wing_Root_R, Wing_Mid_L, Wing_Mid_R, Wing_Tip_L, Wing_Tip_R
Belt_Bone_1, Belt_Bone_2, Belt_Bone_3, Belt_Bone_4
これらのボーンにはメッシュのウェイトが割り当てられていません。
あなた:
すべて削除して
AI の動き: 未使用ボーンが削除されます。
あなた:
指のボーンを簡略化して。5 本指から 3 本指にして
AI の動き: 薬指と小指のボーンが統合されます。
メッシュ結合
あなた:
体と衣装のメッシュを結合して
AI の動き: 複数の Skinned Mesh Renderer が 1 つに統合されます。
メッシュを結合すると、個別のメッシュの ON/OFF 切り替えができなくなります。衣装の着せ替え(Modular Avatar)を使用している場合は、Modular Avatar が自動的にアップロード時にメッシュを統合するため、手動での結合は不要です。
最適化前後の比較 (compare_before_after)
最適化の効果を数値で確認します。
あなた:
最適化前後の比較を見せて
AI の動き: compare_before_after が実行されます。
AI の返答例:
最適化前後の比較:
項目 最適化前 最適化後 変化 ランク変化
ポリゴン数 52,000 35,000 -32.7% Good → Good
マテリアル数 6 1 -83.3% Poor → Excellent
ボーン数 142 88 -38.0% Medium → Good
PhysBone 6 4 -33.3% Medium → Good
メッシュ数 5 1 -80.0% Medium → Excellent
テクスチャメモリ 22 MB 10 MB -54.5% Medium → Excellent
Skinned Mesh 4 1 -75.0% Medium → Excellent
総合ランク: Poor → Good
あなた:
見た目の比較もスクリーンショットで見せて
AI の動き: 最適化前と最適化後のアバターを並べたスクリーンショットが撮影されます。
ワールドの最適化
アバターだけでなく、ワールドのパフォーマンス最適化も重要です。
ワールドの主な最適化項目
| 項目 | 推奨値 | 確認方法 |
|---|---|---|
| ドローコール | 200 以下 | 「ドローコール数を教えて」 |
| ポリゴン数 | 50 万以下 | 「シーンのポリゴン数を教えて」 |
| テクスチャサイズ | 1 枚あたり 2048x2048 以下 | 「テクスチャサイズを確認して」 |
| ライトマップ | ベイク済み | 「ライトマップをベイクして」 |
| オクルージョンカリング | 有効 | 「オクルージョンカリングを有効にして」 |
ワールド最適化の例
あなた:
ワールドのパフォーマンスを確認して
AI の返答例:
ワールドパフォーマンス:
ドローコール: 156
ポリゴン数: 320,000
テクスチャメモリ: 85 MB
ライトマップ: ベイク済み
オクルージョンカリング: 未設定
推奨: オクルージョンカリングの有効化でドローコールを削減できます
あなた:
オクルージョンカリングを有効にして
AI の動き: オクルージョンカリング(カメラから見えないオブジェクトを描画しないようにする機能)が設定されます。
次のステップ
最適化が完了したら、以下のガイドに進んでください。
- アップロード -- VRChat へのアップロード手順
- アバターセットアップ -- アバターの全体的なセットアップ
- VRChat レシピ集 -- 最適化を含む自動化レシピ