前言
AR(Augmented Reality)中文翻译为增强现实,不同于VR的沉浸式体验,AR是通过在真实世界增加一些虚拟元素提升视觉和交互上的体验,传统的AR对空间属性的处理并不明显,多是通过识别现实世界中的图片或是二维码,实现对真实世界的锚定。随着激光雷达和空间算法的引入和优化,AR的特性更多体现在对现实世界的三维空间识别上,让现实世界的空间与虚拟空间进行融合,或者说让虚拟空间完全叠合在现实空间中。那么,对人物的抓取和定位,就成了AR进一步发展的必然,让真实世界的人物与虚拟世界融合,并带来更多的应用场景。
本篇文章主要总结ARKit4.0,通过使用unity3d提供的AR Foundation如何快速实现和使用人体深度感应或者人体识别。ARFoundation确实提供了一个比较方便的实现AR的方式,但是其提供的默认UI确实太丑了。ARFoundation适合快速实现AR,但不适合深度开发,其在深度开发的时候需要进行大量的修改。
人体感应和人体遮挡的功能在ARKit4.0以及华为的huawei ar engine中提供了相关的功能,但是Android的ARCore暂时还没有相关功能。华为自己的AR或者XR引擎提供相应的API,并没有整合到ARFoundation中,我会在以后的文章中解释华为引擎的使用,实测华为引擎的性能要优于ARCore,这可能是有针对性的软硬件优化的结果,但是华为引擎还是略逊于ios的ARKit。
一、工作背景
在深度感应和识别方面苹果确实做的更好,但是也可以看到华为的努力,最差的是android,他们似乎并不关心这方面的应用,也许是其AR眼镜做得有点儿伤心吧。所有的工作都是基于unity3d展开的,下面的总结主要是对苹果设备进行的,其他设备开发的小伙伴请自动略过。
二、工作步骤
1.准备工作,导入相应的依赖
我使用的UnityLTS版本 2019.4(注意:较低的Unity版本可能无法使用ARFoundation),平台是ios,接着在unity=》window=》Package Manager中找到AR Foundation进行升级,升级到version4.1.1,另外务必确保ARKitXRPlugin、ARCoreXRPlungin、ARSubsystems以及ARKitFaceTracking的版本和ARFoundation保持一致,否则可能会有问题,同时注意XRPluginManagement的版本,我选择的是3.2.16配合ARFoundation的4.1.1来配置。如果没有安装请一并安装。ARKit对一些手机的系统和设置是有要求的,例如硬件必须是iphone6S及已上机型必须是iOS11系统及以上,可以选择在Unity的PlayerSettings里勾选require ARKit support ,根据你的应用需求来确定。然后将程序运行的最小版本变为11.0,接着再把Architecture设置为ARM 64的,因为ARKit只能运行在ARM 64程序上。
在场景中可以直接鼠标右键在XR中生成AR Session和AR Session Origin两个控件。
在AR Camera中加入了AR Occlusion Manage方法,该方法就是用来实现人体遮挡的方法,加入它,并可根据需要调整性能和选项,遮挡功能就可实现了。
2.Player Settings设置
生成AR照相机后要对Player Settings进行设置,主要是Player和XR Plug-in Management这两个子项进行设置。
Player设置截图如下:
XR Plug-in Management设置截图如下:
这里勾选ARKit会将依赖的库拷贝到xcode依赖库中。
3.Build Xcode文件测试
以上都设置完后,就可以生成xcode文件进行测试,在Xcode中要对相关的依赖库进行引用,否则会报出无法找到的错误,如果是从arkit2.0升级,注意要将原来的unityarkit.a的依赖删除,否则会一直报错找不到文件,因为这个库在arkit4.0和arfoundation中,已经被libunityarkit.a代替。
总结
上述方法已经经过真机测试,完全有效,希望对其他小伙伴有所帮助。