这一年我给 Vision Pro 开发了两款 App, 还开源了一个手势匹配框架

1,335 阅读5分钟

我的 AR 之路

我是苹果 API 搬运工,一个专注于 iOS 平台 AR 开发的程序员,持续多年的 ARKit 神棍。一直以来,我都在盼望着苹果 AR 眼镜的发布,但 Vision Pro 发布后,却和我的预期产生了巨大偏差。 不过,调整预期后奋起直追,一口气上架了两款 App:手指运动 FingerEmoji 和植物形态生成 PlantMatrix,还顺势开源了一个手势匹配的框架:HandVector

Apple Vision Pro 带来的冲击

2023 年 WWDC,苹果宣布了 Apple Vision Pro ,受到万众关注。但它却和我预想的不一样,我原本以为,苹果头显虽然外形与 Quest 3 不一样,但功能上本质是 Meta Quest 3 的 AR 增强版:把手机 ARKit 上的所有功能搬到头显上去,并提供更强大的性能和更稳定的体验。

事实却是,Vision Pro 提出了 空间计算 概念,故意走了一条既不同于 Quest 3 又不同于手机 AR 的路:它侧重于交互体验与显示效果,如果单论 AR 功能 Vision Pro 还不如手机 ARKit 支持功能多。

这样带来的后果就是:普通的 iPhone 和 iPad 版软件,只要稍加修改,就可以在 Vision Pro 上以兼容模式运行;但是所有用到 ARKit 的软件都必须重新设计与开发,才能在 Vision Pro 上运行,有些受限于隐私甚至压根无法运行(比如手机上使用相机画面的 AR App)。这些意料之外的变化让我措手不及,感觉多年努力被套牢在手机上,难以平滑迁移到 Vision Pro 上。

缓过神来后,我认真分析了 Vision Pro 目前的优缺点: 优点:

  • 高清晰低延迟的显示效果
  • 简单好用的手眼交互
  • 相对完善的操作逻辑,整体感觉更接近一台电脑

缺点:

  • 售价过高
  • 使用不便,尤其近视用户
  • FOV 小,暗光条件下透视噪点多
  • 没有手柄,难以精确进行 3D 输入,对游戏不够友好
  • AR 功能开放太少,不兼容手机 AR
  • 全面使用 SwiftUI 和 Async/Await 框架,重新学习有一定成本

目前的诸多争议主要还是从用户角度看来,很不方便,有些不值。然而从开发者的角度看,Vision Pro 的优点非常明显,有些还是跨时代性比如手眼交互。而缺点中硬件相关的可以通过产品迭代来优化改进,软件相关可以通过 App 重新设计和 OS 生态迭代来改进。

我相信未来版本的 Vision Pro 会在以下方面进行软件、硬件改进:

  • 降低售价或提供廉价款
  • 自带屈光度矫正功能
  • 优化透视效果,尤其是暗光条件下
  • 开放更多 ARKit 功能,如 Face Tracking、 Object Tracking、Object Capture、RoomPlan 等
  • 优化 3D 编辑器功能,增强 Reality Composer Pro 功能

转而开发 visionOS App 与手势匹配框架 HandVector

认真思考过后,感觉苹果提出的“空间计算”更有意义,不应该继续对手机 AR 产生路径依赖。我决定花费时间学习 SwiftUI 和 Async/Await 框架,为 Vision Pro 开发应用。

因为已经有多年的手机 ARKit 开发经验,我对 Swift + ARKit + RealityKit 都比较熟悉,但是 SwiftUI 和 Async/Await 框架给我带来了不少挫折。这里推荐下 Jane 的 ChaoCode 系列 SwiftUI 中文教程,内容较新,讲解细致,我认为是目前中文网络上最好的 SwiftUI 视频教程系列。

简单学习 SwiftUI 之后,我利用这些年积累下来的数学知识,制作了两款 App:手指运动 FingerEmoji 和植物形态生成 PlantMatrix,还开源了 FingerEmoji 使用的手势匹配框架:HandVector

手势匹配原理:余弦相似度

在 Vision Pro 发布之初,很多人就在想象:是不是可以用手势来触发一些效果?比如像火影一样结印,触发特效。但是,visionOS 目前并没有自带这个功能,苹果的机器学习框架 CreateML 暂时也不支持 3D 的手势匹配,所以目前无法在 Vision Pro 上使用。其它第三方的 ML 与 AI 框架理论上能实现 3D 手势匹配功能,但需要自己训练与部署,费时费力且往往运行效率不高。

而余弦相似度的计算并不复杂,它的数学本质就是向量的点乘。所以,我们只需要事先“录制”一个手势,接下来将手部关节位置转化为 3D 向量,与录制好的手势向量进行点乘,得到的结果就是当前手势与录制好手势之间的相似度。

未来计划

开发过 App 之后,我认为虽然 Vision Pro 不能像 iPhone 一样在消费市场高度普及,但仍然代表了未来计算机交互的发展方向:3D 化信息显示与交互。我对改进后的 Vision Pro 下一代表示谨慎乐观,也许普通消费者目前不支持是正常现象,但开发者有一定机会。

下一步,我将围绕 HandVector 的功能,创造更多的 App,同时也将继续完善手势匹配功能。

Vision Pro 开发,我来了!