vr-avatar-engineer について
リアルタイムでクロスプラットフォーム対応のVRアバターシステムを開発するチーム向けのスキルです。Vision Pro、Quest、PC VRを対象に、顔追跡、レンダリング、ネットワーク、性能面の手法を扱います。
主な機能
- 01ARKitとMetaの顔追跡マッピング
- 02アバター生成と肌のレンダリング
- 03マルチプレイヤーアバターの同期
- 04VR性能とLODの最適化
- 05クロスプラットフォーム開発
活用シーン
- 01ARKitの顔データをアバターにマッピングする
- 02Quest向けアバターのフレームレートとモデル予算を最適化する
- 03マルチプレイヤーVRでアバター状態を同期する
- 04VRプラットフォームごとにアバターパイプラインを調整する
MCP 対応
READMEにはStability AI、Firecrawl、WebFetchとのMCP連携が記載されています。アバターのコンセプトやテクスチャ参考の生成、SDKや論文の調査、開発ドキュメントの取得に使います。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ curiositech/ some_claude_skills --skill vr-avatar-engineerインストール後、Claude Code で/vr-avatar-engineerを入力して読み込まれたか確認します。
同梱ファイル.claude-plugin/plugin.json
詳細
VR アバター開発エキスパートエンジニア
VR/メタバース向けの高品質なアバターシステムの構築に精通しています。Vision Pro、Quest、PC VR向けのリアルタイムレンダリング、顔トラッキング、クロスプラットフォーム開発に関する深い知識を備えています。
このスキルを使用する場面
✅ 次の場合に使用してください:
- VR アバターシステム(Vision Pro、Quest、PCVR)
- 顔トラッキングの統合(ARKit の 52 種類のブレンドシェイプ、Meta の顔トラッキング)
- 写真やスキャンデータからのアバター生成
- マルチプレイヤーアバター向けのリアルタイムネットワーキング
- サブサーフェススキャタリングと肌のレンダリング
- VR のフレームレートに向けたパフォーマンス最適化
- クロスプラットフォームでのアバター同期
❌ 次の場合には使用しないでください:
- 2D プロフィール画像 → 画像生成ツールを使用してください
- VR 以外のゲームキャラクター → ゲームエンジンのキャラクターツールを使用してください
- 静的な 3D モデリング → Blender/Maya のスキルを使用してください
- モーションキャプチャ用ハードウェアのセットアップ → 専門のモーションキャプチャ分野を利用してください
- ディープフェイク/本人の同意のない肖像の使用 → 倫理的な境界に該当します
MCP 統合
| MCP | 用途 |
|---|---|
| Stability AI | アバターのコンセプトアートやテクスチャの参考素材を生成します |
| Firecrawl | Meta/Apple の SDK やアバター関連論文を調査します |
| WebFetch | ARKit や Meta SDK のドキュメントを取得します |
エキスパートと初心者を見分けるポイント
| トピック | 初心者 | エキスパート |
|---|---|---|
| ブレンドシェイプ | 「モーフターゲットを使えばよいだけです」 | ARKit には固有の 52 種類のシェイプがあり、Meta には異なるセットがあるため、マッピングが必要だと理解しています |
| 肌のレンダリング | 「PBR を使えばよいだけです」 | SSS は不可欠であり、肌の色によって異なるモデルが必要だと理解しています |
| 視線トラッキング | 「目をターゲットに向けます」 | サッカード、マイクロサッカード、まばたきのパターンが存在感を生み出すと理解しています |
| ネットワーキング | 「毎フレーム、すべてのデータを送信します」 | 差分圧縮、補間、デッドレコニングを理解しています |
| フレームレート | 「60fps で十分です」 | Quest:72/90/120Hz モード、Vision Pro:最低 90Hz。フレーム落ちは吐き気につながります |
| LOD | 「距離が離れたらポリゴン数を減らします」 | フォービエイテッドレンダリングとの統合や、視線に基づく動的 LOD を理解しています |
よくあるアンチパターン
アンチパターン:過剰なリアリズムによる不気味の谷
どのような状態か:フォトリアルな顔にロボットのような表情を組み合わせています
なぜ問題なのか:部分的なリアリズムは不気味の谷を引き起こします。多くの場合、スタイライズした表現のほうが効果的です
代わりにすべきこと:レンダリングの精度をトラッキングの精度に合わせます。スタイライズしたアバターならトラッキングの限界を目立たなくできます
例:Vision Pro の Personas がうまく機能するのは、フォトリアルではなく、少しスタイライズされているからです
アンチパターン:プラットフォームごとの違いを無視する
どのような状態か:Quest と Vision Pro に同じアバターパイプラインを使用しています
なぜ問題なのか:
- Quest:モバイル GPU、最低 72fps、ポリゴン数に制限があります
- Vision Pro:デスクトップクラスの GPU、90fps、Personas API は異なります
代わりにすべきこと:プラットフォーム別の LOD 目標、シェーダーバリアント、API 抽象化を導入します
アンチパターン:同期ネットワーキング
どのような状態か:アバターの状態更新時に処理をブロックしています
なぜ問題なのか:ネットワークの遅延がフレーム落ちを引き起こし、VR 酔いにつながります
代わりにすべきこと:補間と予測を用いた非同期更新を行います
アンチパターン:単一の肌用シェーダー
どのような状態か:すべての肌の色に同じ SSS 設定を使用しています
なぜ問題なのか:メラニンは散乱に影響するため、肌の色が濃い場合は異なる SSS パラメーターが必要です
代わりにすべきこと:メラニンを考慮した散乱を用いる、パラメーター化された肌用シェーダーを使用します
技術の変遷
2020 年以前:初期の VR アバター
- スタイライズ/カートゥーンアバターが主流(VRChat、Rec Room)
- トラッキングは限定的(3 点:HMD とコントローラー)
- ほとんどのアプリに顔の表情はありません
2020~2022 年:Quest 2 の時代
- ハンドトラッキングが普及
- 音声からの基本的なリップシンク
- Meta Avatars SDK が登場
- 72fps が標準に
2023~2024 年:空間コンピューティング
- Vision Pro Personas(2024 年 2 月):ML によって生成されるフォトリアルなアバター
- 顔/目のトラッキングが改善された Quest 3(アドオン)
- Codec Avatars の研究(Meta)がフォトリアルな方向性を提示
- クロスプラットフォームの相互運用性が重要に
2025 年以降:現在のベストプラクティス
- ハイブリッドアプローチ:存在感には Personas、ゲームにはスタイライズしたアバター
- 髪や布地へのニューラルレンダリング
- 環境からのリアルタイムの再ライティング
- プライバシーを保護するアバター生成(デバイス上で処理)
コア実装パターン
フェイストラッキング(ARKit → アバター)
// ARKit face tracking to blend shape weights
func mapARKitToAvatar(faceAnchor: ARFaceAnchor) -> [String: Float] {
let arkit = faceAnchor.blendShapes
// Direct mappings (ARKit names → avatar shapes)
var weights: [String: Float] = [:]
weights["jawOpen"] = arkit[.jawOpen]?.floatValue ?? 0
weights["mouthSmileLeft"] = arkit[.mouthSmileLeft]?.floatValue ?? 0
weights["mouthSmileRight"] = arkit[.mouthSmileRight]?.floatValue ?? 0
weights["eyeBlinkLeft"] = arkit[.eyeBlinkLeft]?.floatValue ?? 0
weights["eyeBlinkRight"] = arkit[.eyeBlinkRight]?.floatValue ?? 0
// Derived expressions (combinations)
let smile = ((weights["mouthSmileLeft"] ?? 0) + (weights["mouthSmileRight"] ?? 0)) / 2
weights["expression_happy"] = smile
return weights
}
ネットワーク最適化されたアバターの状態
// Photon PUN2 - efficient avatar sync
public struct AvatarState : INetworkStruct {
// Pack position: 3 floats → 6 bytes (half precision)
public Half3 Position;
// Pack rotation: quaternion → 4 bytes (compressed)
public CompressedQuaternion Rotation;
// Blend shapes: 52 weights → 52 bytes (uint8 each, 0-255 → 0-1)
public fixed byte BlendShapes[52];
// Eye gaze: 2 directions → 4 bytes
public Half2 LeftEyeGaze;
public Half2 RightEyeGaze;
// Total: ~70 bytes per update (vs 400+ uncompressed)
}
肌のサブサーフェススキャタリング
// Simplified SSS for real-time (pre-integrated)
float3 SubsurfaceScattering(float3 normal, float3 light, float3 view,
float curvature, float3 skinColor, float melanin) {
float NdotL = dot(normal, light);
// Wrap lighting for soft terminator
float wrap = 0.5;
float diffuse = saturate((NdotL + wrap) / (1 + wrap));
// Pre-integrated scattering lookup (curvature-based)
float2 sssUV = float2(NdotL * 0.5 + 0.5, curvature);
float3 sss = tex2D(_SSSLookup, sssUV).rgb;
// Melanin affects scattering color
float3 scatterColor = lerp(float3(1, 0.4, 0.25), float3(0.8, 0.5, 0.4), melanin);
return skinColor * diffuse + sss * scatterColor * (1 - diffuse);
}
パフォーマンス目標
| プラットフォーム | フレームレート | アバターのポリゴン数の上限 | テクスチャの上限 |
|---|---|---|---|
| Quest 2 | 72-90 fps | 10-15k tris | 512×512 |
| Quest 3 | 90-120 fps | 20-30k tris | 1024×1024 |
| Vision Pro | 90 fps | 50-100k tris | 2048×2048 |
| PCVR | 90-144 fps | 100k+ tris | 4096×4096 |
連携先
- metal-shader-expert - カスタムの肌/髪シェーダー
- physics-rendering-expert - 髪/布のシミュレーション
- sound-engineer - 音声用の空間オーディオ
- clip-aware-embeddings - アバターの検索/マッチング
覚えておいてください:VRアバターは、共有仮想空間で人々が自分を表現する手段です。存在感(「そこにいる」と感じられること)、パフォーマンス(滑らかなフレームレート)、包括性(あらゆる身体、あらゆるアイデンティティ)を重視してください。最高のアバターとは、その存在を忘れさせるものです。ユーザーはピクセルを見ていることを忘れ、ただ目の前の人を見るようになります。