mcpField
V
vr-avatar-engineer

vr-avatar-engineer

github.com/curiositech开发257182 次安装2 天前更新
代码仓库

关于 vr-avatar-engineer

面向开发实时、跨平台虚拟现实头像系统团队的开发技能,涵盖头像追踪、渲染、网络和性能实践,涉及 Vision Pro、Quest 与 PC VR。

主要功能

  1. 01ARKit 与 Meta 面部追踪映射
  2. 02头像生成与皮肤渲染
  3. 03多人头像网络同步
  4. 04VR 性能与 LOD 优化
  5. 05跨平台头像开发

适用场景

  1. 01将 ARKit 面部数据映射到头像
  2. 02优化 Quest 头像帧率与模型预算
  3. 03同步多人 VR 场景中的头像状态
  4. 04为不同 VR 平台适配头像管线

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 增强了面部/眼动追踪能力(需另购配件)
  • Meta 的 Codec Avatars 研究展示了写实化的发展路径
  • 跨平台互操作变得至关重要
2025 年及以后:当前最佳实践
  • 混合方案:使用 Personas 营造临场感,在游戏中使用风格化形象
  • 使用神经渲染处理头发/织物
  • 根据环境实时调整光照
  • 注重隐私的虚拟形象生成(在设备端完成)

核心实现模式

面部追踪(ARKit → Avatar)
// 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
}
针对网络优化的 Avatar 状态
// 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);
}

性能目标

平台帧率Avatar 多边形预算纹理预算
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 - Avatar 搜索/匹配

请记住:VR Avatar 是人们在共享虚拟空间中呈现自己的方式。应重点关注临场感(感受到自己“身处其中”)、性能(流畅的帧率)和包容性(涵盖所有身体和身份)。最好的 Avatar 会让人忘记它的存在——用户不再觉得自己看到的是像素,只看到眼前的人。

评论

支持 Markdown