ARKit : 苹果推出的AR开发平台
ARCore : Google 推出的增强现实 SDK
ARFoundation : ARFoundation是ARKit XR插件和ARCore XR插件 的集合
vuforia : 高通推出的针对移动设备扩增实境应用的软件开发工具包
EasyAR : 国内 上海视辰信息 增强现实(AR)互动营销技术和解决方案
2017年,Apple公司与Google公司相继推出了各自的AR开发SDK工具包ARKit和ARCore,分别对应iOS平台与Android平台AR开发。ARKit和ARCore推出后,极大的促进了AR在移动端的普及发展,将AR从实验室带入到普通消费场景中。由于当前的移动手机操作系统主要由iOS与Android两大系统统治,ARKit和ARCore分别服务于各自己的系统平台,这意味着软件产商要开发一套移动AR应用就必须使用ARKit开发一个iOS版本、使用ARCore开发一个Android版本,这无疑增加了开发时间与成本。
ARCore提供了Android、Android NDK、Unity、Unreal开发包,ARKit官方只提供了Xcode开发包,这也提高了利用其他工具进行开发的开发者学习成本。在这种情况下,Unity构建了一个AR开发平台,这就是ARFoundation,这个平台架构于ARKit和ARCore之上,其目的就是利用Unity的跨平台能力构建一种与平台无关的AR开发环境,换句话说,ARFoundation对ARKit与ARCore进行了再次封装,并按照用户的发布平台自动选择合适的底层SDK版本。
因此,ARFoundation是ARKit XR插件(com.unity.xr.arkit)和ARCore XR插件(com.unity.xr.arcore)的集合,虽然最终都使用ARKit SDK和ARCore SDK,但因为Unity再次封装的缘故,与专业平台(如ARKit插件和ARCore SDK for Unity)相比,C#调用的API略有不同。
ARFoundation的目标并不局限于ARKit与ARCore,它的目标是建成一个统一、开放的AR开发平台,因此,ARFoundation极有可能在下步发展中纳入其他AR SDK,进一步丰富AR开发环境。在进一步的发展中,ARFoundation不仅支持移动端AR设备,还会支持穿戴式AR设备开发。
从上面的描述我们也可以看出,ARFoundation它并不提供AR的底层开发API,这些与平台相关的API均由第三方如ARKit与ARCore提供,因此ARFoundation对某特定第三方功能的实现要比原生的晚(ARFoundation将某第三方SDK的特定功能集成需要时间)。
ARFoundation提供了一个独立于平台的脚本API和MonoBehaviour,因此,开发者可以通过ARFoundation使用ARCore和ARKit共有的核心功能构建同时适用于iOS和Android两个平台的AR应用程序。换句话说,这可以让开发者只需开发一次应用,就可以部署到两个平台的设备上,不必做任何改动。
如前所述,ARFoundation实现实现某底层SDK的功能会比原生的晚,因此,如果我们要开发ARFoundation尚不支持的功能,可以单独使用对应的原生SDK。目前,如果我们只面向ARCore进行开发并希望获取完整的功能集,Google为Unity开发提供了ARCore SDK for Unity;如果只面向ARKit进行开发并希望获取完整的功能集,Unity提供了适用于Unity开发的ARKit插件(Apple并未提供Unity的ARKit SDK开发插件,在ARFoundation发展起来以后,Unity肯定不会再继续维护ARKit插件)。
ARFoundation与ARCore、ARKit的关系如下图所示:
2018年10月Unity发布AR Foundation 1.0版本,支持平面追踪、特征点云检测、参考点/锚点、设备追踪、光照估计、射线碰撞。
2019年5月,AR Foundation 2.1 支持图像追踪、物体追踪、面部追踪、环境探针。
2019年6月,AR Foundation 3.0 支持 ARKit 3.0,新增动作捕捉、人物遮挡、多人协作等功能。
2019年9月[MOU1] ,AR Foundation 支持 Magic Leap 以及 HoloLens 1 和 2 。
2019年11月,SenseAR正式集成进了Unity中国增强版2018.4.11C版本中。
设备跟踪:跟踪设备在物理空间中的位置和方向。
平面检测:检测水平和垂直表面。
锚点:设备跟踪的任意位置和方向。
环境探针:一种用于生成表示物理环境特定区域的立方体贴图的方法。视频链接: https://live.csdn.net/v/embed/163218
人脸跟踪:检测和跟踪人脸。
2D图像跟踪:检测和跟踪2D图像。
网格划分:生成与物理空间相对应的三角形网格划分。
多人协作:在共享的AR体验中跟踪其他设备的位置和方向。
人体分割和遮挡:将距离现实世界中的对象的距离应用于渲染的3D内容,从而实现物理对象与虚拟对象的逼真的融合。https://www.bilibili.com/video/av455309216/
射线广播:查询物理环境中检测到的平面和特征点。
直通视频:优化了将移动摄像机图像渲染到触摸屏上作为AR内容的背景。
会话管理:启用或禁用AR功能时自动对平台级配置进行操作。
遮挡:在真实场景中的位置实现虚拟物体遮挡 视频资源: https://v.qq.com/x/page/g3104nljtqb.html
2017年9月 ARKit 1.0:支持环境光照估测、用户设置锚点、追踪状态更改、AR会话中断和恢复的事件通知等。
2018年3月 ARKit 1.5: 新增垂直平面识别、图像识别、图像分辨率提升50%等。
2018年9月 ARKit 2.0:新增多个玩家联机、图像跟踪、3D对象识别、usdz格式文件和测距仪APP等。
2019年9月 ARKit 3.0:新增人体轮廓抠图、人体四肢识别、原型化和制作AR内容的Reality Composer工具软件等。
2020年3月 ARKit 3.5:新增场景几何体、即时增强现实、定位跟踪配置等。
2020年9月 ARKit 4.0:新增深度API、定位锚、增加面部跟踪支持的设备。
**ARKit 4.0:**运行iOS 14,配置了A12芯片的设备
**ARKit 3.5:**运行iPadOS 13.4,配置了激光雷达扫描仪的第四代iPad Pro
**ARKit 3.0:**运行iOS 13,人体抠图和人体识别需要A12芯片
**ARKit 2.0:**运行iOS 12,芯片要求A9以上
**ARKit 1.5:**运行iOS 11.3,芯片要求A9以上
**ARKit 1.0:**运行 iOS 11,芯片要求A9以上
芯片数据:https://www.apple.com.cn/ipad/compare/
5.3 ARKit支持iPad
ARKit 1和ARKit 2需要设备是A9、A10、A11芯片,ARKit 3的人体抠图和人体识别需要A12芯片。
1、12.9英寸iPad Pro
第三代 A12X
第二代 A10X
第一代 A9X
2、11英寸iPad Pro
A12X
3、9.7英寸iPad Pro
只销售了3个月,Apple官网未显示该款产品。
4、iPad Air
第三代 10.5英寸 A12
第二代 9.7英寸 A8X 不支持ARKit
第一代 9.7英寸 A7 不支持ARKit
5、9.7英寸 iPad
第六代 A10
第五代 A9
6、7.9英寸 iPad mini
第五代 A12
第四代 A8 不支持ARKit
第三代 A7 不支持ARKit
第二代 A7 不支持ARKit
ARWorldTrackingConfiguration
世界跟踪配置(6DOF),只能使用后置摄像头,需要iOS 11以上。图像识别和垂直平面识别,需要iOS 11.3以上。
ARFaceTrackingConfiguration
人脸跟踪配置,只能使用前置的TrueDepth摄像头,需要iOS 11以上。
AROrientationTrackingConfiguration
方向跟踪配置(3DOF),只能使用后置摄像头,需要iOS 11以上。
ARImageTrackingConfiguration
图像跟踪配置,只能使用后置摄像头,需要iOS 12以上。
ARImageTrackingConfiguration与ARWorldTrackingConfiguration的区别如下:
1、ARImageTrackingConfiguration当图像快速移动时,也能跟踪上,而ARWorldTrackingConfiguration当图像缓慢的移动,才能跟踪上。
2、ARWorldTrackingConfiguration依赖IMU(惯性测量单元),当周围环境发生运动时,无法正常工作。比如用户在交通工具上,AR显示的虚拟物体会飘走。
3、当使用ARImageTrackingConfiguration时,无法使用ARWorldTrackingConfiguration,也就无法使用ARWorldTrackingConfiguration的水平面识别。
ARObjectScanningConfiguration
对象扫描配置,只能使用后置摄像头,需要iOS 12以上。
ARBodyTrackingConfiguration
人体跟踪配置,只能使用后置摄像头,需要iOS 13以上和A12芯片。
配置要求: https://developer.apple.com/documentation/arkit/arconfiguration
ARCore 要求:
运行在搭载 Google Play 应用商店的设备上
Android 7.0 或更高版本 (如下所示,个别型号需要更高的版本)
若你的应用为AR可选应用, 请修改 minSdkVersion 声明: ‘minSdkVersion≥
14` (API Level 14, Ice Cream Sandwich, version 4.0.1 - 4.0.2)
若你的应用为AR必备应用, 请修改 minSdkVersion 声明: minSdkVersion
≥ 24
(API Level 24, Nougat, version 7.0)
在中国,设备不搭载 Google 应用商店。 您可以从以下应用商店中选择其一来安装 ARCore:
Xiaomi app store (小米应用商店)
Huawei Apps Gallery (华为应用商店)
OPPO APP Market (OPPO 软件商店)
Samsung Galaxy Apps (三星应用市场)
V-Appstore (vivo应用商店)
在中国区域,ARCore 支持以下设备:
谷歌官方查看支持ARCore设备地址:https://developers.google.cn/ar/devices
配置相关 : https://zhuanlan.zhihu.com/p/330235815
返回状态:
namespace UnityEngine.XR.ARFoundation
{
///
/// Represents the current state of the AR system.
///
public enum ARSessionState
{
///
/// The AR system has not been initialized. Availability is unknown.
/// .
/// AR系统尚未初始化,可用性未知。
None,
///
/// AR is not supported on the current device.
/// 当前设备不支持AR。
Unsupported,
///
/// The system is checking for the availability of AR.
/// .
/// 系统正在检查当前设备上AR的可用性。
CheckingAvailability,
///
/// AR is supported, but requires an additional install.
/// .
/// 当前设备支持AR,但是AR支持需要安装其他软件。
NeedsInstall,
///
/// AR software is being installed. .
/// 正在安装AR软件。
Installing,
///
/// AR is supported and ready.
/// AR已支持并准备就绪。
Ready,
///
/// An AR session is initializing (i.e., starting up). This usually means AR is working
/// but has not yet gathered enough information about the environment.
/// AR会话正在初始化(即正在启动)。这通常意味着AR正在运行,但尚未收集到足够的有关环境的信,
SessionInitializing,
///
/// An AR session is running and is tracking (i.e., the device is able to determine its
/// position and orientation in the world).
/// AR会话正在运行并且正在跟踪(也就是说,设备能够确定其在世界上的位置和方向)。
SessionTracking
}
}
三方插件: https://zhuanlan.zhihu.com/p/335236675
目前世界上主流的AR SDK提供厂商,国外的主要是Vuforia、Metaio,国内的主要是EasyAR。其中Metaio在2015年5月已被Apple重金收购,之后就没有再对外公开过SDK,经过两年的封闭开发,Apple已经打造出了强大的ARKit,能够基于庞大的iOS和iPad设备生产出各种惊艳的AR产品。Vuforia也在2015年11月被PTC公司重金收购,但是后续一直在更新并提供SDK,因此在ARKit普及之前,Vuforia一直是开发者最青睐的AR SDK,众多的功能以及高质量的识别技术,良好的跨平台性和兼容性,兼容目前主流的PC,Android,IOS平台.使得Vuforia早已深入人心,是学习AR应用开发的必备技能。
这个引擎是一个静态链接库,作为客户端封装进最终的App中,用来进行最主要的识别功能,支持iOS、Android和UWP,并且根据不同的平台开放出了不同的SDK,可以根据需要从Android Studio、Xcode、Visual Studio以及Unity中任选一种作为开发工具。本系列是以Unity为开发工具,因为Unity本来就是个游戏引擎,对3D模型的导入以及控制非常方便,非常适合开发AR程序;
Vuforia提供了一系列的工具,用来创建对象、管理对象数据库以及管理程序licenses。Target Manager是一个网页程序,开发者在里面创建和管理对象数据库,并且可以生成一系列的识别图像,用在AR设备以及云端上。Licenses Manager用来创建和管理程序licenses,因为每一个AR程序都有一个唯一的licenses。Vuforia Object Scanner是Vuforia近段时间新出的工具,用来进行十分黑科技的功能–实物扫描,但是很遗憾目前只支持某些Android设备。
当你的AR程序需要识别数量很庞大的图片对象,或者你的对象数据库需要经常更新,可以选择Vuforia的云识别服务。Vuforia Web Services可以让你很轻松的管理数量庞大的对象数据库,并且可以建立自动的工作流。
4.1 Image Targets(图像目标)
4.2 Cylinder Targets(圆柱体目标)
识别形状类似于圆柱形的图片,可以将这些图片贴到一些圆柱形物体上比如瓶子、杯子等等,进行识别。
4.3 Multi Targets(多目标)
多对象识别,可以同时识别多张Image Targets,并且可以把它们和几何立体物体结合起来,比如一个纸盒子,或者任意形状的平面。
4.4 Model Targets(模型目标)
通俗点说就是3D物体的识别,也就是形状的识别。这个技术相对于传统的印刷媒体、产品包装的Image Targets识别来说,它能够更详细直观地展示产品的功能和设计。展示的内容可以准确地被附加到物体上,例如汽车、家电以及工业设备和机械设备。这个技术有望取代传统的用户手册和技术服务指导。
4.5 VuMark
这是Vuforia自己研发的一种新型条形码,并且被称为下一代条形码,你能够自己随意设计这种条形码的样式,并且在其中融入相关的数据信息。
4.6 Cloud Rec(云识别)
当你的AR程序需要识别数量很庞大的图片对象,或者你的对象数据库需要经常更新,可以选择Vuforia的云识别服务。Vuforia Web Services可以让你很轻松的管理数量庞大的对象数据库,并且可以建立自动的工作流。
4.7 Ground Plane
随着ARKit和ARCore的发布,这个功能大家应该比较能够理解,下一个版本的Vuforia也将具有类似功能。使用Vuforia,你也可以将增强显示的内容放置到一些平面上,例如地板、桌面以及地面等,不管是在室内还是室外均可。
4.8 User Defined Targets(用户自定义目标)
用户从画面选择元素作为自定义目标,进行扫描与追踪
4.9 Virtual Buttons(虚拟按钮)
虚拟按钮是图像上的目标,用户可以在现实世界中触摸,以触发交互动作。
Vuforia提供了三种类型的Database,分别是Device、VuMark和Cloud。这三种类型都各有自己的优势,在开发产品时需要根据需求来选择不同的Database:
包含了安装在设备本地的图片以及3D模型对象的数据库,可以开发Image Target(图片识别)、Multi Targets(多对象识别)、Cylinder Targets(圆柱图像识别)以及Object Target(3D模型识别)。当你的产品需要最快速的图像识别,而且图片对象小于1000张,并且数据库中的对象不会经常更新,那么Device Database就是最好的选择。如果需要开发识别真实3D物体识别的产品,那就只能选择Device类型的。
包含了存储于网络云服务器上的对象的数据库,需要通过网络进行获取。Cloud类型的数据库可以包含数量百万级别的对象,因此当识别对象超过1000个,而且对象需要经常进行更新时,Cloud Database是最好的选择。需要注意的是,Cloud Database只支持单一的图像识别,并不支持Multi target和Cylinder Target。因为是通过网络识别,因此采用Cloud进行识别的话需要根据网络情况花费一定时间。
这是Vuforia自家研发的条形码,被誉为下一代条形码。和目前市面上通用的条形码不一样的是,VuMark的外观可以完全自主定制,只要符合VuMark的相关规范就行,而且VuMark中还能包含诸如字符串之类的数据信息,非常适合于企业级产品的开发。
配置相关: https://www.cnblogs.com/mrmocha/p/9737448.html
教程相关: https://www.jianshu.com/p/a3640e8837b5
EasyAR Sense Unity Plugin是一个建立在EasyAR Sense C# API之上的非常薄的封装,用于在Unity中暴露EasyAR Sense的功能。建议阅读 [EasyAR Sense 文档](https://help.easyar.cn/EasyAR Sense/v4_4/) 来理解EasyAR Sense是如何工作的。
插件的发布包内包含了EasyAR Sense的库文件,因此在使用插件的时候不需要再使用独立的EasyAR Sense。
插件中的EasyAR Sense库文件总是与同版本的EasyAR Sense的文件相同。如果你在尝试让插件运行在不同版本的EasyAR Sense上,必须保证csapi与库文件版本一致。
https://help.easyar.cn/EasyAR%20Sense%20Unity%20Plugin/v4_4/GettingStarted/PluginIntroduction.html
EasyAR Sense Unity Plugin需要使用 Unity 2019.4 或更高版本。
Unity > 2019.4 的兼容性
通常来说, EasyAR Sense不依赖很多变化的Unity API,所以如果Unity发布了新版本,EasyAR Sense Unity Plugin一般都可以正常使用。
Unity 2020.2 或更高版本 删除了iOS设备的OpenGLES支持,在这些版本中,视频录制功能将无法在iOS设备上使用。
Unity < 2019.4 的兼容性
· 为了提供更好的插件包体验以及支持最新的Unity XR工作流,我们在持续迁移我们的资产文件和脚本到 Unity 2019.4。这会逐渐打破对老版本Unity的兼容性。如果你由于某些原因仍就在使用老版本的Unity,可以尝试从 tgz
包中解压文件,放在工程的 Assets
目录,然后解决使用过程中出现的错误。对于这种用法我们不会提供官方支持,但有一些建议可以参考:
Unity 2019.3: 看上去插件可以在这个版本的Unity上正常工作,因为Unity 2019.3 和 2019.4的差异有限。这个兼容性并不是在设计中的,新的版本可能无法正常工作。
Unity 2019.2: 看上去插件可以在这个版本的Unity上正常工作,你可能需要手动修改package manifest,以添加tarball到工程中。这个兼容性并不是在设计中的,新的版本可能无法正常工作。在Windows上,由于Unity对路径长度限制的不当处理,插件的样例可能无法正常导入,你可以通过文件系统直接复制样例文件到 Assets
文件夹中。
Unity 2019.1: 这个版本的Unity Package Manager UI看起来并不能很好的支持tgz文件。你可以尝试embed插件包,如果这样也不能使用,打破包的封装,将文件直接解压到 Assets
文件夹中。
Unity 2018.4: 这个版本的Unity Package Manager UI不支持sample。并且由于插件使用 Unity 2019.4打包,一些重要文件的 meta文件无法正常工作。你需要打破package封装,将文件直接解压到 Assets
文件夹中。在重新构建meta文件后,可能可以让大部分功能正常工作,但这并未经过测试。
Unity 2017 或 Unity 5: 在这些版本中不存在Unity Package Manager。并且一些兼容这些版本的代码路径已经被删除。你可能需要花更大的力气才能使插件在这些版本中正常使用。
Unity使用的mono脚本后台不支持Android arm64-v8a。如果需要使用应开启IL2CPP。
EasyAR Sense 从3.0版本开始终止了对iOS armv7的支持。在库文件中存在空的代码层以确保 XCode 工程始终可以构建,但如果编译时只选择了armv7运行后功能将无法使用。
EasyAR Sense Unity Plugin兼容 .NET Standard 2.0 API。
从EasyAR Sense 3.0开始,EasyAR Sense Unity Plugin 直接使用Unity的渲染管线,所有Unity中可以使用的图形API都可以天然被支持。
特例:由于EasyAR Sense的内部实现,录屏功能将只能在某些特定条件下工作,即在Android上Graphics API是OpenGLES2或OpenGLES3的情况以及在iOS上Graphics API是OpenGLES2的情况。
EasyAR Sense Unity Plugin 支持 Universal Render Pipeline (URP) 7.0.0 或更新版本。
EasyAR Sense Unity Plugin 不支持 High Definition Render Pipeline (HDRP)。
EasyAR Sense Unity Plugin 支持 AR Foundation 4.0.8 或更新版本。
EasyAR Sense Unity Plugin 支持官方的 Huawei AR Engine Unity SDK
2.11.0,其发布文件是 arenginesdk-tool-2.11.0.2.zip
。
华为目前不再维护 AR Engine 的 Unity SDK,因此我们并不确定是否更新版本的 AR Engine 可以使用。同时,由于 Huawei AR Engine Unity SDK
使用了一些废弃的 Unity API,它不能在 Unity 2020.1 或更新版本上使用。
EasyAR Sense Unity Plugin 不支持没有官方Unity SDK的华为 AR Engine。
https://help.easyar.cn/EasyAR%20Sense%20Unity%20Plugin/v4_4/Guides/Guides.html
https://help.easyar.cn/EasyAR%20Sense%20Unity%20Plugin/v4_4/ApiReference/ApiReference.html
稀疏空间地图
稠密空间地图
运动跟踪
表面跟踪
3D物体跟踪
平面图像跟踪
录屏
支持功能 | ARFoundation | ARCore | ARKit | vuforia | EasyAR |
---|---|---|---|---|---|
依赖项 | ARCore/ARKit | Android 7 | ip6以上 | 无 | 部分依赖系统 |
费用 | 免费 | 免费 | 免费 | 收费/免费带水印 | 收费/免费带水印 |
垂直平面检测 | √ | √ | √ | ? | ? |
水平平面检测 | √ | √ | √ | √ | ? |
特征点检测 | √ | - | √ | √ | √ |
光照估计 | √ | - | √ + Color Temperature | - | - |
射线测试(Hit Testing,对特征点与平面的射线碰撞测试) | √ | √ | √ | √ | √ |
图像跟踪 | √ | √ | √ | √ | √ |
3D物体检测与跟踪 | √ | - | √ | √ | √ |
环境光探头(Environment Probes) | √ | - | √ | - | - |
世界地图(World maps) | √ | - | √ | - | √ |
人脸跟踪(识别、姿态、网格和形状混合) | √ | √ | √(iPhoneX 及更高型号A12仿生芯片) | - | - |
云锚点(Cloud Anchors) | √ | √ | - | - | √ |
远程调试(Editor Remoting) | 开发中 | √-Instant Preview | √ -ARKit Remote | ? | ? |
模拟器(Editor Simulation) | √ | - | - | √ | √ |
LWRP支持(支持使用ShaderGraph) | √ | 开发中 | 开发中 | √ | √ |
摄像机图像API | √ | √ | - | √ | √ |
人体动作捕捉(Motion capture) | √ | - | √(iPhoneX 及更高型号) | - | - |
人形遮挡(People occlusion) | √ | - | √(iPhoneX 及更高型号) | - | √ |
多人脸检测 | √ | - | √(iPhoneX 及更高型号) | - | - |
多人协作(Collaborative session) | √ | - | √(iPhoneX 及更高型号) | - | - |
多图像识别 | √ | √ | √(iPhoneX 及更高型号) | √ | √ |
VuMark(Vuforia自己研发的一种新型条形码) | - | - | - | √ | - |
虚拟按钮 | - | - | - | √ | - |
空间地图 | - | - | - | - | √ |
教程地址: https://learn.u3d.cn/tutorial/how-to-use-face-capture#
https://zyb-shizi-app-1253445850.cos.ap-beijing.myqcloud.com/pinyin/md_res/ar/QQ20211231-161740-HD.mp4
AR的一些基本知识: https://zhuanlan.zhihu.com/p/29217512
参考链接:
ARKit : 苹果推出的AR开发平台
ARCore : Google 推出的增强现实 SDK
ARFoundation : ARFoundation是ARKit XR插件和ARCore XR插件 的集合
vuforia : 高通推出的针对移动设备扩增实境应用的软件开发工具包
EasyAR : 国内 上海视辰信息 增强现实(AR)互动营销技术和解决方案
2017年,Apple公司与Google公司相继推出了各自的AR开发SDK工具包ARKit和ARCore,分别对应iOS平台与Android平台AR开发。ARKit和ARCore推出后,极大的促进了AR在移动端的普及发展,将AR从实验室带入到普通消费场景中。由于当前的移动手机操作系统主要由iOS与Android两大系统统治,ARKit和ARCore分别服务于各自己的系统平台,这意味着软件产商要开发一套移动AR应用就必须使用ARKit开发一个iOS版本、使用ARCore开发一个Android版本,这无疑增加了开发时间与成本。
ARCore提供了Android、Android NDK、Unity、Unreal开发包,ARKit官方只提供了Xcode开发包,这也提高了利用其他工具进行开发的开发者学习成本。在这种情况下,Unity构建了一个AR开发平台,这就是ARFoundation,这个平台架构于ARKit和ARCore之上,其目的就是利用Unity的跨平台能力构建一种与平台无关的AR开发环境,换句话说,ARFoundation对ARKit与ARCore进行了再次封装,并按照用户的发布平台自动选择合适的底层SDK版本。
因此,ARFoundation是ARKit XR插件(com.unity.xr.arkit)和ARCore XR插件(com.unity.xr.arcore)的集合,虽然最终都使用ARKit SDK和ARCore SDK,但因为Unity再次封装的缘故,与专业平台(如ARKit插件和ARCore SDK for Unity)相比,C#调用的API略有不同。
ARFoundation的目标并不局限于ARKit与ARCore,它的目标是建成一个统一、开放的AR开发平台,因此,ARFoundation极有可能在下步发展中纳入其他AR SDK,进一步丰富AR开发环境。在进一步的发展中,ARFoundation不仅支持移动端AR设备,还会支持穿戴式AR设备开发。
从上面的描述我们也可以看出,ARFoundation它并不提供AR的底层开发API,这些与平台相关的API均由第三方如ARKit与ARCore提供,因此ARFoundation对某特定第三方功能的实现要比原生的晚(ARFoundation将某第三方SDK的特定功能集成需要时间)。
ARFoundation提供了一个独立于平台的脚本API和MonoBehaviour,因此,开发者可以通过ARFoundation使用ARCore和ARKit共有的核心功能构建同时适用于iOS和Android两个平台的AR应用程序。换句话说,这可以让开发者只需开发一次应用,就可以部署到两个平台的设备上,不必做任何改动。
如前所述,ARFoundation实现实现某底层SDK的功能会比原生的晚,因此,如果我们要开发ARFoundation尚不支持的功能,可以单独使用对应的原生SDK。目前,如果我们只面向ARCore进行开发并希望获取完整的功能集,Google为Unity开发提供了ARCore SDK for Unity;如果只面向ARKit进行开发并希望获取完整的功能集,Unity提供了适用于Unity开发的ARKit插件(Apple并未提供Unity的ARKit SDK开发插件,在ARFoundation发展起来以后,Unity肯定不会再继续维护ARKit插件)。
ARFoundation与ARCore、ARKit的关系如下图所示:
2018年10月Unity发布AR Foundation 1.0版本,支持平面追踪、特征点云检测、参考点/锚点、设备追踪、光照估计、射线碰撞。
2019年5月,AR Foundation 2.1 支持图像追踪、物体追踪、面部追踪、环境探针。
2019年6月,AR Foundation 3.0 支持 ARKit 3.0,新增动作捕捉、人物遮挡、多人协作等功能。
2019年9月[MOU1] ,AR Foundation 支持 Magic Leap 以及 HoloLens 1 和 2 。
2019年11月,SenseAR正式集成进了Unity中国增强版2018.4.11C版本中。
设备跟踪:跟踪设备在物理空间中的位置和方向。
平面检测:检测水平和垂直表面。
锚点:设备跟踪的任意位置和方向。
环境探针:一种用于生成表示物理环境特定区域的立方体贴图的方法。视频链接: https://live.csdn.net/v/embed/163218
人脸跟踪:检测和跟踪人脸。
2D图像跟踪:检测和跟踪2D图像。
网格划分:生成与物理空间相对应的三角形网格划分。
多人协作:在共享的AR体验中跟踪其他设备的位置和方向。
人体分割和遮挡:将距离现实世界中的对象的距离应用于渲染的3D内容,从而实现物理对象与虚拟对象的逼真的融合。https://www.bilibili.com/video/av455309216/
射线广播:查询物理环境中检测到的平面和特征点。
直通视频:优化了将移动摄像机图像渲染到触摸屏上作为AR内容的背景。
会话管理:启用或禁用AR功能时自动对平台级配置进行操作。
遮挡:在真实场景中的位置实现虚拟物体遮挡 视频资源: https://v.qq.com/x/page/g3104nljtqb.html
2017年9月 ARKit 1.0:支持环境光照估测、用户设置锚点、追踪状态更改、AR会话中断和恢复的事件通知等。
2018年3月 ARKit 1.5: 新增垂直平面识别、图像识别、图像分辨率提升50%等。
2018年9月 ARKit 2.0:新增多个玩家联机、图像跟踪、3D对象识别、usdz格式文件和测距仪APP等。
2019年9月 ARKit 3.0:新增人体轮廓抠图、人体四肢识别、原型化和制作AR内容的Reality Composer工具软件等。
2020年3月 ARKit 3.5:新增场景几何体、即时增强现实、定位跟踪配置等。
2020年9月 ARKit 4.0:新增深度API、定位锚、增加面部跟踪支持的设备。
**ARKit 4.0:**运行iOS 14,配置了A12芯片的设备
**ARKit 3.5:**运行iPadOS 13.4,配置了激光雷达扫描仪的第四代iPad Pro
**ARKit 3.0:**运行iOS 13,人体抠图和人体识别需要A12芯片
**ARKit 2.0:**运行iOS 12,芯片要求A9以上
**ARKit 1.5:**运行iOS 11.3,芯片要求A9以上
**ARKit 1.0:**运行 iOS 11,芯片要求A9以上
芯片数据:https://www.apple.com.cn/ipad/compare/
5.3 ARKit支持iPad
ARKit 1和ARKit 2需要设备是A9、A10、A11芯片,ARKit 3的人体抠图和人体识别需要A12芯片。
1、12.9英寸iPad Pro
第三代 A12X
第二代 A10X
第一代 A9X
2、11英寸iPad Pro
A12X
3、9.7英寸iPad Pro
只销售了3个月,Apple官网未显示该款产品。
4、iPad Air
第三代 10.5英寸 A12
第二代 9.7英寸 A8X 不支持ARKit
第一代 9.7英寸 A7 不支持ARKit
5、9.7英寸 iPad
第六代 A10
第五代 A9
6、7.9英寸 iPad mini
第五代 A12
第四代 A8 不支持ARKit
第三代 A7 不支持ARKit
第二代 A7 不支持ARKit
ARWorldTrackingConfiguration
世界跟踪配置(6DOF),只能使用后置摄像头,需要iOS 11以上。图像识别和垂直平面识别,需要iOS 11.3以上。
ARFaceTrackingConfiguration
人脸跟踪配置,只能使用前置的TrueDepth摄像头,需要iOS 11以上。
AROrientationTrackingConfiguration
方向跟踪配置(3DOF),只能使用后置摄像头,需要iOS 11以上。
ARImageTrackingConfiguration
图像跟踪配置,只能使用后置摄像头,需要iOS 12以上。
ARImageTrackingConfiguration与ARWorldTrackingConfiguration的区别如下:
1、ARImageTrackingConfiguration当图像快速移动时,也能跟踪上,而ARWorldTrackingConfiguration当图像缓慢的移动,才能跟踪上。
2、ARWorldTrackingConfiguration依赖IMU(惯性测量单元),当周围环境发生运动时,无法正常工作。比如用户在交通工具上,AR显示的虚拟物体会飘走。
3、当使用ARImageTrackingConfiguration时,无法使用ARWorldTrackingConfiguration,也就无法使用ARWorldTrackingConfiguration的水平面识别。
ARObjectScanningConfiguration
对象扫描配置,只能使用后置摄像头,需要iOS 12以上。
ARBodyTrackingConfiguration
人体跟踪配置,只能使用后置摄像头,需要iOS 13以上和A12芯片。
配置要求: https://developer.apple.com/documentation/arkit/arconfiguration
ARCore 要求:
运行在搭载 Google Play 应用商店的设备上
Android 7.0 或更高版本 (如下所示,个别型号需要更高的版本)
若你的应用为AR可选应用, 请修改 minSdkVersion 声明: ‘minSdkVersion≥
14` (API Level 14, Ice Cream Sandwich, version 4.0.1 - 4.0.2)
若你的应用为AR必备应用, 请修改 minSdkVersion 声明: minSdkVersion
≥ 24
(API Level 24, Nougat, version 7.0)
在中国,设备不搭载 Google 应用商店。 您可以从以下应用商店中选择其一来安装 ARCore:
Xiaomi app store (小米应用商店)
Huawei Apps Gallery (华为应用商店)
OPPO APP Market (OPPO 软件商店)
Samsung Galaxy Apps (三星应用市场)
V-Appstore (vivo应用商店)
在中国区域,ARCore 支持以下设备:
谷歌官方查看支持ARCore设备地址:https://developers.google.cn/ar/devices
配置相关 : https://zhuanlan.zhihu.com/p/330235815
返回状态:
namespace UnityEngine.XR.ARFoundation
{
///
/// Represents the current state of the AR system.
///
public enum ARSessionState
{
///
/// The AR system has not been initialized. Availability is unknown.
/// .
/// AR系统尚未初始化,可用性未知。
None,
///
/// AR is not supported on the current device.
/// 当前设备不支持AR。
Unsupported,
///
/// The system is checking for the availability of AR.
/// .
/// 系统正在检查当前设备上AR的可用性。
CheckingAvailability,
///
/// AR is supported, but requires an additional install.
/// .
/// 当前设备支持AR,但是AR支持需要安装其他软件。
NeedsInstall,
///
/// AR software is being installed. .
/// 正在安装AR软件。
Installing,
///
/// AR is supported and ready.
/// AR已支持并准备就绪。
Ready,
///
/// An AR session is initializing (i.e., starting up). This usually means AR is working
/// but has not yet gathered enough information about the environment.
/// AR会话正在初始化(即正在启动)。这通常意味着AR正在运行,但尚未收集到足够的有关环境的信,
SessionInitializing,
///
/// An AR session is running and is tracking (i.e., the device is able to determine its
/// position and orientation in the world).
/// AR会话正在运行并且正在跟踪(也就是说,设备能够确定其在世界上的位置和方向)。
SessionTracking
}
}
三方插件: https://zhuanlan.zhihu.com/p/335236675
目前世界上主流的AR SDK提供厂商,国外的主要是Vuforia、Metaio,国内的主要是EasyAR。其中Metaio在2015年5月已被Apple重金收购,之后就没有再对外公开过SDK,经过两年的封闭开发,Apple已经打造出了强大的ARKit,能够基于庞大的iOS和iPad设备生产出各种惊艳的AR产品。Vuforia也在2015年11月被PTC公司重金收购,但是后续一直在更新并提供SDK,因此在ARKit普及之前,Vuforia一直是开发者最青睐的AR SDK,众多的功能以及高质量的识别技术,良好的跨平台性和兼容性,兼容目前主流的PC,Android,IOS平台.使得Vuforia早已深入人心,是学习AR应用开发的必备技能。
这个引擎是一个静态链接库,作为客户端封装进最终的App中,用来进行最主要的识别功能,支持iOS、Android和UWP,并且根据不同的平台开放出了不同的SDK,可以根据需要从Android Studio、Xcode、Visual Studio以及Unity中任选一种作为开发工具。本系列是以Unity为开发工具,因为Unity本来就是个游戏引擎,对3D模型的导入以及控制非常方便,非常适合开发AR程序;
Vuforia提供了一系列的工具,用来创建对象、管理对象数据库以及管理程序licenses。Target Manager是一个网页程序,开发者在里面创建和管理对象数据库,并且可以生成一系列的识别图像,用在AR设备以及云端上。Licenses Manager用来创建和管理程序licenses,因为每一个AR程序都有一个唯一的licenses。Vuforia Object Scanner是Vuforia近段时间新出的工具,用来进行十分黑科技的功能–实物扫描,但是很遗憾目前只支持某些Android设备。
当你的AR程序需要识别数量很庞大的图片对象,或者你的对象数据库需要经常更新,可以选择Vuforia的云识别服务。Vuforia Web Services可以让你很轻松的管理数量庞大的对象数据库,并且可以建立自动的工作流。
4.1 Image Targets(图像目标)
4.2 Cylinder Targets(圆柱体目标)
识别形状类似于圆柱形的图片,可以将这些图片贴到一些圆柱形物体上比如瓶子、杯子等等,进行识别。
4.3 Multi Targets(多目标)
多对象识别,可以同时识别多张Image Targets,并且可以把它们和几何立体物体结合起来,比如一个纸盒子,或者任意形状的平面。
4.4 Model Targets(模型目标)
通俗点说就是3D物体的识别,也就是形状的识别。这个技术相对于传统的印刷媒体、产品包装的Image Targets识别来说,它能够更详细直观地展示产品的功能和设计。展示的内容可以准确地被附加到物体上,例如汽车、家电以及工业设备和机械设备。这个技术有望取代传统的用户手册和技术服务指导。
4.5 VuMark
这是Vuforia自己研发的一种新型条形码,并且被称为下一代条形码,你能够自己随意设计这种条形码的样式,并且在其中融入相关的数据信息。
4.6 Cloud Rec(云识别)
当你的AR程序需要识别数量很庞大的图片对象,或者你的对象数据库需要经常更新,可以选择Vuforia的云识别服务。Vuforia Web Services可以让你很轻松的管理数量庞大的对象数据库,并且可以建立自动的工作流。
4.7 Ground Plane
随着ARKit和ARCore的发布,这个功能大家应该比较能够理解,下一个版本的Vuforia也将具有类似功能。使用Vuforia,你也可以将增强显示的内容放置到一些平面上,例如地板、桌面以及地面等,不管是在室内还是室外均可。
4.8 User Defined Targets(用户自定义目标)
用户从画面选择元素作为自定义目标,进行扫描与追踪
4.9 Virtual Buttons(虚拟按钮)
虚拟按钮是图像上的目标,用户可以在现实世界中触摸,以触发交互动作。
Vuforia提供了三种类型的Database,分别是Device、VuMark和Cloud。这三种类型都各有自己的优势,在开发产品时需要根据需求来选择不同的Database:
包含了安装在设备本地的图片以及3D模型对象的数据库,可以开发Image Target(图片识别)、Multi Targets(多对象识别)、Cylinder Targets(圆柱图像识别)以及Object Target(3D模型识别)。当你的产品需要最快速的图像识别,而且图片对象小于1000张,并且数据库中的对象不会经常更新,那么Device Database就是最好的选择。如果需要开发识别真实3D物体识别的产品,那就只能选择Device类型的。
包含了存储于网络云服务器上的对象的数据库,需要通过网络进行获取。Cloud类型的数据库可以包含数量百万级别的对象,因此当识别对象超过1000个,而且对象需要经常进行更新时,Cloud Database是最好的选择。需要注意的是,Cloud Database只支持单一的图像识别,并不支持Multi target和Cylinder Target。因为是通过网络识别,因此采用Cloud进行识别的话需要根据网络情况花费一定时间。
这是Vuforia自家研发的条形码,被誉为下一代条形码。和目前市面上通用的条形码不一样的是,VuMark的外观可以完全自主定制,只要符合VuMark的相关规范就行,而且VuMark中还能包含诸如字符串之类的数据信息,非常适合于企业级产品的开发。
配置相关: https://www.cnblogs.com/mrmocha/p/9737448.html
教程相关: https://www.jianshu.com/p/a3640e8837b5
EasyAR Sense Unity Plugin是一个建立在EasyAR Sense C# API之上的非常薄的封装,用于在Unity中暴露EasyAR Sense的功能。建议阅读 [EasyAR Sense 文档](https://help.easyar.cn/EasyAR Sense/v4_4/) 来理解EasyAR Sense是如何工作的。
插件的发布包内包含了EasyAR Sense的库文件,因此在使用插件的时候不需要再使用独立的EasyAR Sense。
插件中的EasyAR Sense库文件总是与同版本的EasyAR Sense的文件相同。如果你在尝试让插件运行在不同版本的EasyAR Sense上,必须保证csapi与库文件版本一致。
https://help.easyar.cn/EasyAR%20Sense%20Unity%20Plugin/v4_4/GettingStarted/PluginIntroduction.html
EasyAR Sense Unity Plugin需要使用 Unity 2019.4 或更高版本。
Unity > 2019.4 的兼容性
通常来说, EasyAR Sense不依赖很多变化的Unity API,所以如果Unity发布了新版本,EasyAR Sense Unity Plugin一般都可以正常使用。
Unity 2020.2 或更高版本 删除了iOS设备的OpenGLES支持,在这些版本中,视频录制功能将无法在iOS设备上使用。
Unity < 2019.4 的兼容性
· 为了提供更好的插件包体验以及支持最新的Unity XR工作流,我们在持续迁移我们的资产文件和脚本到 Unity 2019.4。这会逐渐打破对老版本Unity的兼容性。如果你由于某些原因仍就在使用老版本的Unity,可以尝试从 tgz
包中解压文件,放在工程的 Assets
目录,然后解决使用过程中出现的错误。对于这种用法我们不会提供官方支持,但有一些建议可以参考:
Unity 2019.3: 看上去插件可以在这个版本的Unity上正常工作,因为Unity 2019.3 和 2019.4的差异有限。这个兼容性并不是在设计中的,新的版本可能无法正常工作。
Unity 2019.2: 看上去插件可以在这个版本的Unity上正常工作,你可能需要手动修改package manifest,以添加tarball到工程中。这个兼容性并不是在设计中的,新的版本可能无法正常工作。在Windows上,由于Unity对路径长度限制的不当处理,插件的样例可能无法正常导入,你可以通过文件系统直接复制样例文件到 Assets
文件夹中。
Unity 2019.1: 这个版本的Unity Package Manager UI看起来并不能很好的支持tgz文件。你可以尝试embed插件包,如果这样也不能使用,打破包的封装,将文件直接解压到 Assets
文件夹中。
Unity 2018.4: 这个版本的Unity Package Manager UI不支持sample。并且由于插件使用 Unity 2019.4打包,一些重要文件的 meta文件无法正常工作。你需要打破package封装,将文件直接解压到 Assets
文件夹中。在重新构建meta文件后,可能可以让大部分功能正常工作,但这并未经过测试。
Unity 2017 或 Unity 5: 在这些版本中不存在Unity Package Manager。并且一些兼容这些版本的代码路径已经被删除。你可能需要花更大的力气才能使插件在这些版本中正常使用。
Unity使用的mono脚本后台不支持Android arm64-v8a。如果需要使用应开启IL2CPP。
EasyAR Sense 从3.0版本开始终止了对iOS armv7的支持。在库文件中存在空的代码层以确保 XCode 工程始终可以构建,但如果编译时只选择了armv7运行后功能将无法使用。
EasyAR Sense Unity Plugin兼容 .NET Standard 2.0 API。
从EasyAR Sense 3.0开始,EasyAR Sense Unity Plugin 直接使用Unity的渲染管线,所有Unity中可以使用的图形API都可以天然被支持。
特例:由于EasyAR Sense的内部实现,录屏功能将只能在某些特定条件下工作,即在Android上Graphics API是OpenGLES2或OpenGLES3的情况以及在iOS上Graphics API是OpenGLES2的情况。
EasyAR Sense Unity Plugin 支持 Universal Render Pipeline (URP) 7.0.0 或更新版本。
EasyAR Sense Unity Plugin 不支持 High Definition Render Pipeline (HDRP)。
EasyAR Sense Unity Plugin 支持 AR Foundation 4.0.8 或更新版本。
EasyAR Sense Unity Plugin 支持官方的 Huawei AR Engine Unity SDK
2.11.0,其发布文件是 arenginesdk-tool-2.11.0.2.zip
。
华为目前不再维护 AR Engine 的 Unity SDK,因此我们并不确定是否更新版本的 AR Engine 可以使用。同时,由于 Huawei AR Engine Unity SDK
使用了一些废弃的 Unity API,它不能在 Unity 2020.1 或更新版本上使用。
EasyAR Sense Unity Plugin 不支持没有官方Unity SDK的华为 AR Engine。
https://help.easyar.cn/EasyAR%20Sense%20Unity%20Plugin/v4_4/Guides/Guides.html
https://help.easyar.cn/EasyAR%20Sense%20Unity%20Plugin/v4_4/ApiReference/ApiReference.html
稀疏空间地图
稠密空间地图
运动跟踪
表面跟踪
3D物体跟踪
平面图像跟踪
录屏
支持功能 | ARFoundation | ARCore | ARKit | vuforia | EasyAR |
---|---|---|---|---|---|
依赖项 | ARCore/ARKit | Android 7 | ip6以上 | 无 | 部分依赖系统 |
费用 | 免费 | 免费 | 免费 | 收费/免费带水印 | 收费/免费带水印 |
垂直平面检测 | √ | √ | √ | ? | ? |
水平平面检测 | √ | √ | √ | √ | ? |
特征点检测 | √ | - | √ | √ | √ |
光照估计 | √ | - | √ + Color Temperature | - | - |
射线测试(Hit Testing,对特征点与平面的射线碰撞测试) | √ | √ | √ | √ | √ |
图像跟踪 | √ | √ | √ | √ | √ |
3D物体检测与跟踪 | √ | - | √ | √ | √ |
环境光探头(Environment Probes) | √ | - | √ | - | - |
世界地图(World maps) | √ | - | √ | - | √ |
人脸跟踪(识别、姿态、网格和形状混合) | √ | √ | √(iPhoneX 及更高型号A12仿生芯片) | - | - |
云锚点(Cloud Anchors) | √ | √ | - | - | √ |
远程调试(Editor Remoting) | 开发中 | √-Instant Preview | √ -ARKit Remote | ? | ? |
模拟器(Editor Simulation) | √ | - | - | √ | √ |
LWRP支持(支持使用ShaderGraph) | √ | 开发中 | 开发中 | √ | √ |
摄像机图像API | √ | √ | - | √ | √ |
人体动作捕捉(Motion capture) | √ | - | √(iPhoneX 及更高型号) | - | - |
人形遮挡(People occlusion) | √ | - | √(iPhoneX 及更高型号) | - | √ |
多人脸检测 | √ | - | √(iPhoneX 及更高型号) | - | - |
多人协作(Collaborative session) | √ | - | √(iPhoneX 及更高型号) | - | - |
多图像识别 | √ | √ | √(iPhoneX 及更高型号) | √ | √ |
VuMark(Vuforia自己研发的一种新型条形码) | - | - | - | √ | - |
虚拟按钮 | - | - | - | √ | - |
空间地图 | - | - | - | - | √ |
教程地址: https://learn.u3d.cn/tutorial/how-to-use-face-capture#
https://zyb-shizi-app-1253445850.cos.ap-beijing.myqcloud.com/pinyin/md_res/ar/QQ20211231-161740-HD.mp4
AR的一些基本知识: https://zhuanlan.zhihu.com/p/29217512
参考链接: