这段时间又开始了多线程的工作,忙到不可开交,最多的时候同时负责了4个项目,这个容我之后转门写一篇文章来吐槽。转眼间也做了2年多的AR开发,是时候对这两年多所用到的各种技术做一个总结了。
记得公司刚成立的时候,是ARKit刚发布几个月,所以我们第一个产品就是要围绕iOS平台利用ARKit来开发应用,而刚好Unity自家推出了一个名为UnityARKitPlugin的插件放在资源商店里,我们项目刚上线的版本,正是我基于这个插件开发出来的,它本身刚开始支持的也只是ARKit1.0的功能,基本就是支持SLAM和平面识别,而平面也仅限于水平面,再到后来ARKit发布了1.5版本,UnityARKitPlugin也同步更新,支持了垂直面的识别,和iphoneX的面部识别。在我们的iOS版本上线后,Google也推出了自家的AR开发SDK---ARCore用来对飙苹果的ARKit,不同于ARKit的是,ARCore的Unity版本是Google自家出的,也就是说ARCore的UnitySDK是可以直接从Google官网下载的,里面也有详细的说明文档。而ARCore在出现后其实能够支持的手机型号屈指可数,再加上国内的特有情况(这让我想到了国内安卓应用市场的乱象。。。)导致了国内也有不少自家的AR开发SDK,比如后面用到的华为AREngine,是华为的AR SDK,还有商汤科技的SenseAR,我都有所涉猎,但这么多的ARSDK,说实话,作为一个AR开发者,尤其是国内的AR应用开发者,真的苦不堪言。想到国外的开发者也至少需要掌握ARKit和ARCore两种技术的痛点,再后面,Unity自家又推出了新的AR开发套件----ARFoundation,它符合了面向对象开发中的封装思想,将ARKit和ARCore做了封装,使你不必关心在不同平台怎么启动不同的SDK,调用不同的接口,现在你只需要统一的API,就可以快速的实现自己的业务,而且Unity也明确以后只会继续维护ARFoundation,而原来的UnityARKitPlugin已经从AssetStore里消失了,成为了历史。在这之后,由于公司的业务方向需要更多的中低端手机用户也能够使用,又需要引入图片扫描的AR功能,而我又选择去使用了Vuforia这个老牌的ARSDK,其实ARKit和ARCore后面也推出了图片识别的功能,但无奈他们还是对机型有着较高的要求,所以没有使用,而Vuforia其实很久前就有了,它比ARKit和ARCore出现的都要早,只不过开始时它并不支持SLAM技术,只是基于图片识别的AR。
说完了我自己的使用经历,下面来说说,经过我自己的使用感受,来给AR开发者的一些建议。首先,为什么使用Unity来开发AR,因为Unity是一个非常强大的3d游戏引擎,它包含了UI,动画,粒子特效,等等3d中的强大功能,这对开发AR的3D应用提供了很强的便利性,其次,由于它跨平台的特点,使得你可以一次开发,不同平台发布。如果你是一名iOS工程师或者Android工程师,你当然可以使用原生的ARKit和ARCore来开发应用,但这两个平台据我所知,没有类似于unity一样强大的3d引擎库,iOS的SceneKit远不及Unity强大。所以如果你只是开发一些简单的AR应用,用原生开发可行,但是但凡随着你公司的业务升级,需要做重度AR应用开发时,你就不得不面对需要一个强大的3d引擎的现实,当然不排除你是位大牛,可以自己开发一个3d库,但我相信你所需要付出的成本是巨大的,Android也是同理。说完ARKit和ARCore再说说Vuforia,它比起前两个有一个最大的优点就是它对你移动设备的硬件要求低,可以使得在一些中低端手机也可以运行,它是我目前用过的,比起国内的其他ARSDK来说,图片识别功能最好的,无论是稳定性还是准确度,当然唯一不好的是,他是付费的(不过都已经2020年了,版权意识该有了,为技术知识付费是值得的)。其他的如华为AREngine和商汤的sdk,其实都和ARCore相差不大(至少截止在我使用前,未来各家SDK的发展不得而知)。这些SDK在功能上基本上也都包含了现在ARSDK主流的功能,如SLAM,平面识别,图片识别,面部识别等。如何取舍,还是看实际需求,我个人还是偏爱ARKit和ARCore,也就是使用Unity的ARFoundation来开发。
关于目前主流的ARSDK的总结,就先说到这里,马上就要春节了,希望自己新的一年里自己在各方面继续提升