mcpField
V
vr-avatar-engineer

vr-avatar-engineer

github.com/curiositech開発257182 回インストール2 日前に更新
リポジトリ

vr-avatar-engineer について

リアルタイムでクロスプラットフォーム対応のVRアバターシステムを開発するチーム向けのスキルです。Vision Pro、Quest、PC VRを対象に、顔追跡、レンダリング、ネットワーク、性能面の手法を扱います。

主な機能

  1. 01ARKitとMetaの顔追跡マッピング
  2. 02アバター生成と肌のレンダリング
  3. 03マルチプレイヤーアバターの同期
  4. 04VR性能とLODの最適化
  5. 05クロスプラットフォーム開発

活用シーン

  1. 01ARKitの顔データをアバターにマッピングする
  2. 02Quest向けアバターのフレームレートとモデル予算を最適化する
  3. 03マルチプレイヤーVRでアバター状態を同期する
  4. 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アバターのコンセプトアートやテクスチャの参考素材を生成します
FirecrawlMeta/Apple の SDK やアバター関連論文を調査します
WebFetchARKit や 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 272-90 fps10-15k tris512×512
Quest 390-120 fps20-30k tris1024×1024
Vision Pro90 fps50-100k tris2048×2048
PCVR90-144 fps100k+ tris4096×4096

連携先

  • metal-shader-expert - カスタムの肌/髪シェーダー
  • physics-rendering-expert - 髪/布のシミュレーション
  • sound-engineer - 音声用の空間オーディオ
  • clip-aware-embeddings - アバターの検索/マッチング

覚えておいてください:VRアバターは、共有仮想空間で人々が自分を表現する手段です。存在感(「そこにいる」と感じられること)、パフォーマンス(滑らかなフレームレート)、包括性(あらゆる身体、あらゆるアイデンティティ)を重視してください。最高のアバターとは、その存在を忘れさせるものです。ユーザーはピクセルを見ていることを忘れ、ただ目の前の人を見るようになります。

コメント