vrc-avatars について
Unity と VRChat SDK を使って VRChat アバターを作成・最適化するスキルです。アバター設定、表情、アニメーション、性能制限を扱い、Quest 向けの個別対応も説明します。
主な機能
- 01Avatar 3.0 の設定
- 02表情メニューとパラメーター
- 03パフォーマンス最適化
- 04PhysBones とコンタクト
- 05Animator コントローラーの指針
活用シーン
- 01性能目標に沿ったアバター設計
- 02表情メニューと同期パラメーターの設定
- 03Quest 用アバタービルドの準備
- 04アニメーションと PhysBones の動作確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ alexanderstephenthompson/ claude-hub --skill vrc-avatarsインストール後、Claude Code で/vrc-avatarsを入力して読み込まれたか確認します。
同梱ファイルreferences/avatar3-setup.mdassets/avatar-performance-limits.md
詳細
VRChat アバタースキル
バージョン: 1.0 スタック: VRChat SDK、Unity
VRChatのパフォーマンスランキングシステムでは、「Poor」または「Very Poor」にランク付けされたアバターは、ほとんどのプレイヤーのセーフティ設定によって自動的に非表示になります。丁寧に作り込んだアバターが、見えないロボットのシルエットになってしまうのです。マテリアルが多すぎるとバッチ処理が崩れます。ボーンが多すぎるとCPU負荷が高まります。Write Defaultsが混在すると、アニメーションの挙動が予測不能になります。また、Questには大幅に厳しい制限があり、ポリゴン数を減らしただけの同じアバターではなく、別途ビルドする必要があります。
最初からGoodランクの制限内で作れば、アバターはほかのプレイヤーから実際に見えるようになります。パラメーターの予算やPhysBoneの制限は恣意的なものではありません。見えるか見えないかの境界なのです。
対象範囲と境界
このスキルの対象:
- Avatar 3.0のセットアップ
- 表情メニューとパラメーター
- パフォーマンス最適化
- PhysBoneとコンタクト
- Animatorコントローラー
ほかのスキルに委ねる内容:
unity-csharp:C#のパターンとパフォーマンス最適化
このスキルを使う場面: VRChatアバターの作成や最適化。
基本原則
- パフォーマンスランクは重要です — Poorのアバターはブロックされます。
- Questとの互換性 — 別途ビルドが必要で、制限も厳しくなります。
- パラメーターの予算 — 同期パラメーターは最大256ビットです。
- PhysBoneの制限 — ボーンが増えるほど負荷も高まります。
- 実機でテストする — ミラーとパフォーマンスは異なります。
パフォーマンス制限
Quest(目標:Good)
| 指標 | Good | Medium | Poor |
|---|---|---|---|
| 三角形数 | 10,000 | 15,000 | 20,000 |
| マテリアル数 | 1 | 2 | 4 |
| ボーン数 | 90 | 150 | 256 |
| PhysBone数 | 0 | 6 | 8 |
PC(目標:Good)
| 指標 | Good | Medium | Poor |
|---|---|---|---|
| 三角形数 | 32,000 | 70,000 | - |
| マテリアル数 | 4 | 8 | 16 |
| ボーン数 | 150 | 256 | 400 |
| PhysBone数 | 16 | 32 | 64 |
| PhysBoneコライダー数 | 8 | 16 | 32 |
パターン
階層構造
Avatar Root
├── Armature
│ └── Hips
│ ├── Spine → Chest → Neck → Head
│ │ ├── Eye_L, Eye_R
│ │ └── Hair bones
│ ├── Leg_L → Knee → Foot → Toe
│ ├── Leg_R → ...
│ └── (Shoulder → Arm → Elbow → Hand → Fingers)
├── Body (SkinnedMeshRenderer)
├── Clothes (optional separate mesh)
└── Accessories
パラメーターの予算(256ビット)
Type Bits Common Uses
─────────────────────────────────
Bool 1 Toggles
Int 8 Outfit index, state machines
Float 8 Blend shapes, radial controls
Example Budget:
- VRCEmote (int) 8 bits
- VRCFaceBlendH (float) 8 bits
- VRCFaceBlendV (float) 8 bits
- Custom toggles ×10 10 bits
- Outfit selector 8 bits
- Remaining 214 bits
表情メニューの構造
Main Menu
├── Expressions
│ ├── Happy
│ ├── Sad
│ └── Surprised
├── Toggles
│ ├── Hat On/Off
│ ├── Glasses On/Off
│ └── Jacket On/Off
├── Outfits (Radial)
│ └── Select 1-4
└── Settings
├── PhysBone Intensity
└── Fallback Toggle
Write Defaultsのパターン
Choose ONE approach project-wide:
Write Defaults ON:
- Simpler setup
- Properties return to default when state exits
- Can cause conflicts between layers
Write Defaults OFF (Recommended):
- More control
- Must explicitly set all animated properties
- Each state fully defines its output
アンチパターン
| アンチパターン | 問題 | 対処法 |
|---|---|---|
| マテリアルが多すぎる | バッチ処理が崩れ、ランクに悪影響を及ぼします | テクスチャを統合し、アトラス化します |
| Write Defaultsが混在している | 挙動が未定義になります | どちらかに統一します |
| PhysBoneが最適化されていない | パフォーマンスに負荷がかかります | 数を減らし、チェーンを簡素化します |
| フォールバックアバターがない | ブロックされたユーザーにはロボットが表示されます | パフォーマンスに優れたフォールバックを設定します |
| ローカル専用の項目に同期パラメーターを使用している | 同期予算を浪費します | ローカル専用として正しく設定します |
| Questで全身メッシュを使用している | 三角形数が増えます | Quest用のメッシュを別途用意します |
チェックリスト
セットアップ
- アーマチュアがヒューマノイド構造に従っている
- アバターディスクリプターが設定されている
- 該当する場合、アイトラッキングが設定されている
- ビゼームが設定されている
- 視点位置が正しく設定されている
パフォーマンス
- 三角形数が目標ランクの範囲内である
- マテリアル数が最小限になっている(アトラス化)
- ボーン数が制限内である
- PhysBoneが最適化されている
- 該当する場合、Quest版がアップロードされている
表情
- 表情メニューが整理されている
- パラメーターが256ビットの予算内に収まっている
- Write Defaultsが統一されている
- ジェスチャーレイヤーが設定されている
- トグルがテストされている
品質
- デフォルトポーズでクリッピングがない
- PhysBoneが自然に動作する
- 表情が正しく見える
- VRChatでテスト済みである(Unityだけでなく)
参考資料
references/avatar3-setup.md— Avatar 3.0の設定ガイド
アセット
assets/avatar-performance-limits.md— QuestおよびPCのパフォーマンス制限
コメント
Markdown 対応