阅读 1141

学 AR 到底学什么?我的 AR 之路反思与展望

“谁是我们的敌人?谁是我们的朋友?这个问题是革命的首要问题。”

反思

做为一个写了很多文章,一直在鼓吹 AR 的AR 神棍,我对 AR 的兴趣开始于 2015 年,那时刚入门 iOS 开发一年左右,正是 AR/VR 又一次火起来的时候,当时苹果也还没有拿出 ARKit,只好先学开发基础知识和 SceneKit。 从 ARKit 推出后,我就利用业余时间不停学习这个框架,并尝试写一些 Demo 和基础文章,学习相关数学基础,整整三年从 ARKit 1 跟着学到了 ARKit 3。
在这四五年里,看到了 AR/VR 行业经历了一个完整的泡沫周期:概念普及 --> 引人瞩目 --> 期望过高骗子横行 --> 热情下降 --> 无人问津。

到 2020 年中,虽然 AR 仍然没有火起来,但我已经在移动 AR 行业完整工作一年了,开发了 10 多个大大小小的 Demo 和几个完整的 AR 产品,对 iOS 平台的 ARKit 比较熟悉,对苹果新推出的 RealityKit 及 Unity 平台的 ARFoundation 也有一定了解。 但是,即使我在 AR 方面付出了这么多努力,有了不少经验,我却从没有认真深入思考过革命的首要问题:AR 到底需要学什么?用 AR 又该做什么?

AR 基本流程

要搞明白这些问题,就必须先来梳理一下 AR 的基本流程:

  • 即时定位与地图映射(SimultaneousLocalizationAndMapping,SLAM):依靠 VIO+IMU+CV+TOF 等技术,实现特征点提取,场景重建,平面识别,图片识别等功能;
  • 场景感知和识别:依靠 CV 、ML 等技术,识别不同场景和其中的物体,比如 ARKit 已经能够识别桌子、椅子、墙面、天花板、人体等;
  • 叠加 3D 图像和声音:依靠 3D 渲染技术,将虚拟的画面和声音,叠加在的场景中或者已识别的物体上。比如 ARKit 依赖于 SceneKit 提供渲染,而 Unity 则自己提供渲染(追踪和识别依然是对 ARKit 和 ARCore 的封装);
  • 多人协作与分享:依靠 GPS + 特征点 + 网络等技术,如苹果的MultipeerConnectivity + CollaborativeSession + WorldMap共享,2020年LocationAnchor,以及谷歌的云锚点等,实现多人共享 AR 效果。

能够同时把这些都做好,才是一个很完善的 AR 应用。至少,也要做好这四项中的两项,而不是目前很多只是将原来的 3D 内容简单改为 AR 形式。

考虑到第一项 SLAM 其实是 AR 平台或硬件提供的功能,实际上大部分 AR 应用只要做好后面三项中的两项,就是一个很棒的 AR APP 了。

AR 产品的方向

我心目中对于 AR 产品有几个经典例子:三维建模软件shapr 3D,身体解剖软件Complete Anatomy,和沙雕风格的らくがきAR(RakugakiAR)(即涂鸦 AR)

下面是shapr 3D的演示 Demo,直接用 LiDar 扫瞄房间,生成房间和家具的三维图纸,编辑后,再以 AR 方式预览:

身体解剖软件Complete Anatomy则将动作捕捉和人体解剖模型关联起来,让人更清楚看到人体的动作状态:

涂鸦 AR识别平面图形,将其变成 3D 物体,并以 AR 方式展现:

这几个 app 都做到了利用 CV+ML 来识别并提取场景中物体信息,并提供了有创意的或强大的 3D 渲染技术,来展现 AR 效果,这也是它们成功的原因。

当然,也可以类似Pokémon Go那样,依靠 GPS+3D 渲染,来制作多人 LBS 类 app。

AR 学习路线

那么,了解 AR 产品的 4 个基本流程后,作为一个 AR 开发者,到底应该学什么?怎么学?我根据自己的理解,列举一个知识矩阵:

我个人认为,应该从易到难,从具体看得见的,到抽象看不见的。也就是先学第三步,因为 3D 渲染能看得到,比较引发学习兴趣。 比如:从 3D 引擎基础知识出发,到 ARKit 相关,初中高级知识依次学习。

数学基础方面推荐3Blue1Brown的视频:线性代数的本质,B 站上有中文字幕和翻译。

图形学基础方面推荐Games101系列视频:现代计算机图形学入门-闫令琪,B 站上有中文版。

iOS 教程方面Raywenderlich家的几本教程就挺不错,适合 iOS 开发者入门。

Unity 方面也可以了解下,教程又多质量也比较高。比如 《AR 开发权威指南:ARFoundation》(该作者同时还在写作一本关于 RealityKit 的书籍,预计2021年发布),和 catlike coding 上面的教程。

还要学习的就是第二步:场景感知和识别,主要依靠 CV+ML 来实现,对于 iOS 开发者来说,苹果对 ML 进行了封装,模型训练和使用都非常简单(当然,目前功能并不强大,性能也不够优秀),依靠 CreateML + CoreML+Vision 来实现整个 ML 过程,且非常容易和 ARKit 相结合,比如识别 AR 中的特定动作,触发 AR 效果。

除了场景感知会用到 ML 相关知识外,苹果实际上在第一步的 SLAM 阶段也用到了 ML 来提升追踪稳定性,在第三阶段渲染时,也可以使用 ML 来完成风格迁移等视频效果(2020年 CreateML app 已经支持了这种模型的训练)。

其实我们可以看到,Metal 在所有这些流程和技术中,都起到了底层支撑作用。不管是 3D 渲染,还是机器学习框架,图像处理,都用到了 Metal。这也说明 Metal 在 Apple 生态中的重要作用,不可不学。

第四步位置和多人共享,则需要学习 GPS 和网络相关知识,这个更多是从工作项目中学习。iOS 开发者可以参考 ARKit-CoreLocation 这个框架。

需要避免的错误

  • 简单搬运:将原来的 2D 或 3D 内容,简单转制后变成 AR 版的,虽然工作量比较少,但效果一般都不好。主要原因是内容与现实世界没有联系,玩法没有结合新的形式,为了 AR 而 AR。
  • 左倾与右倾:左倾是激进冒险主义和机会主义,就是希望花一两个月,读一两本书,就能学会 AR 并取得成就。右倾则是保守主义和投降主义,有畏难思想害怕学不会,看见矩阵和数学公式就怂了,过早放弃。
  • 现在不成熟,等效果稳定、 AR 眼镜发布:根据目前情况,就算苹果的 AR 眼镜发布,前几代产品也会有各种限制和缺陷,手机 AR 虽然效果鸡肋,但在很长一段时间仍会是主流。正如当年 iPhone 第一代发布时,功能远不如诺基亚 S60 智能手机一样,对用户来说差别很大,但对开发者来说,其实技术是类似的,现代手机上的各种 app 都可以从当年找到技术原型和创意原型。当年有很多开发者从 S60 和 PPC 平台转到了 iOS、安卓平台,未来我们可以也要经历类似的过程:从手机 AR 转到 AR 眼镜平台。

苹果的各种态度已经很明确,AR 就是未来,是下一代的计算平台。微软、Facebook、华为也都在做 AR 研发。虽然现在并不成熟,问题也很多,但是作为开发者,提前学起来总是没有错的。

总结

总结一下:

  • 学 AR 到底学什么?学四大步骤,尤其是 ML 和 3D 渲染相关知识,以及绕不开的 Metal 知识。
  • 用 AR 做什么?做类似涂鸦 AR这样的产品,理解场景,再以 AR 方式展示出来。考虑到现在的 AR 平台能力有限,稳定性不足,依靠创意去实现一些小而美的 app 是条非常好的路。

这就是我对自己在 AR 学习过程中的思考与展望。AR 未来的路还很长,要学的知识也很多,生命不熄学习不止,才能走得更好更远。