UE4移动平台AR开发底层库主要是iOS系统的Apple ARKit和Android系统的Google ARCore,UE4的AR开发对AR底层库进行了统一的接口包装(封装的接口还包括Hololens AR、Magic AR等其他AR库),我们实际用UE4开发移动AR应用时并不直接调用ARCore或ARKit的底层库原生接口。
注意:由于Google ARCore需要GMS服务(Google Play),国内的安卓手机和平板安装GSM很不友好,有些品牌的手机平板还无法安装。
UE4 AR开发构架与Apple ARKit非常类似,大家可以看一下ARKit帮助文档,了解一下AR开发的一般流程。 https://developer.apple.com/cn/documentation/arkit/
UE4通过AR Session管理整个AR识别过程,AR Session生命期由底层库管理,用户并不能直接对AR Session进行修改,调用AR函数族时也不需要传递AR Session变量。用户只能通过AR Session Config对AR扫描和识别进行配置。
UE4 Augmented Reality的一般开发流程和主要蓝图函数:
- StartARSession - 打开AR
- StopARSession - 关闭AR
- GetARSessionStatus - 返回AR状态
- GetARSessionConfig - 返回AR配置
- GetAllARGeometries - 返回所有识别物体
- GetARCandidateObject - 生成点云识别模板
- GetARPointCloud - 返回所有扫描点云数组
- GetARTexture - 返回摄像机画面
打开AR
StartARSession蓝图有一个输入参数 - ARSessionConfig,通过参数设置管理即将打开的AR Session识别属性。 Session Type - AR识别类型,扫描采集AR点云模板用Object Scanning模式,三维识别用World模式,其他的还有平面图案识别,人脸识别等等其他模式。 Cardidate Objects - 识别对象数据模板,该数据是识别模块的点云二进制数据,通常需要通过蓝图或者C++代码动态添加
关闭AR
StopARSession没有任何参数,调用后结束AR识别,关闭摄像机
返回AR状态
GetARSessionStatus蓝图返回当前AR识别状态,可以根据状态来确定目前AR识别情况
返回AR配置
GetARSessionConfig返回当前AR识别配置,读取配置属性,修改ARSessionConfig并不确定有效,可能需要调用StopARSession后,用修改过的ARConfig重新调用StartARSession打开AR Session
返回所有识别物体
GetAllARGeometries是AR识别的核心,可以返回当前摄像机范围内可识别的所有AR对象,包括AR Session Config配置的Candidate Object识别对象,也包括识别出的空间中其他平面对象等,可以通过对返回的Geometry类来判断识别物体的类型。 也可以直接通过GetAllARGeometriesByClass返回特定识别类型的对象数组
Geometry类型在ARSessionConfig配置中也有对应属性,可以修改派生对象类型,生成自己自定义的Geometry对象
生成点云识别模板
GetARCandidateObject是AR扫描的核心。函数有两个输入参数:创建点云识别对象的矩形中心坐标和矩形框大小,函数将用指定的矩形范围内已识别点云信息生成三维识别对象(如果点云数量不够则会生成失败)。建立的点云识别对象可以加入到ARSessionConfig的Candidate Objects列表,作为三维物体识别的模板。 可以将Candidate Object存储下来(保存Candidate Object的Data点云二进制数组),供AR识别程序读取,之后通过填充创建Candidate Object并加入ARSessionConfig实现。 GetARPointCloud返回当前已识别的点云数组。AR扫描系统可以通过绘制Box扫描框和范围内点云,帮助用户进行AR识别物扫描,建立AR Candidate识别模板。
返回摄像机画面
GetARTexture返回摄像机画面,函数接受一个参数,可以返回需要的摄像机贴图(彩色、深度画面等,需要硬件支持)。需要在调用StartARSession之后才能获得摄像机表面。 以上就是UE4 AR识别程序开发的整个过程,通过以上蓝图函数即可实现一个从AR扫描到AR识别的完整应用程序。
|