AR出来已经有些年日了,而我现在才去学习惭愧惭愧。其实网上已经有很多资料了,而我现在只是做一个归纳总结,以达到一个我自己看起来比较好理解的效果。
所参考到的文章: ARKit从入门到精通 ,SceneKit框架详细解析,直击苹果 ARKit 技术
官方资料传送门:ARKit官方文档,SceneKit官方文档,AR官方视频
话不多说,开始。
1.首先是概念问题
新鲜事物的学习都是要从概念开始学习的,我这里说的概念并不是严格意义上的概念,只是我对AR的一些通俗的理解。学习AR必不可少的要先了解它所用到的框架。
(好吧,AR的严格概念:增强现实技术(Augmented Reality,简称 AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像、视频、3D模型的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动。)
ARKit:增强现实
SceneKit:3D场景引擎
SpriteKit:2D场景引擎
关于三者的关系:SceneKit 与 SpriteKit二者都可以实现增强现实,现在主流的都是用SceneKit 3D实现的,ARKit框架本身只包含了相机追踪,并不能直接加载模型,所以只能依赖SceneKit或SpriteKit游戏引擎去加载模型,从而实现AR(ARKit限制:iOS11以上且iPhone6s及以上的A9处理器才能使用ARKit) 本文,主要也是讲述SceneKit如何实现AR。
概念总结:
一:相机捕捉现实世界图像(由ARKit来实现)
二:在图像中显示虚拟3D模型(由SceneKit来实现)
2.几个重要的类
了解了基本概念,现在我们就要了解AR的实现需要用到哪些类,以及每个类负责了哪一块的工作。首先看一张框架关系图
ARKit框架图.png
从图中我们可以看到AR技术用到的主要框架是ARKit和SceneKit,常用的几个重要类:
ARScnView:继承自SCNView,用来展示3D场景与模型;
ARCamera:通过相机来捕捉真实世界的图像;
ARSession:会话,连接ARScnView与ARCamera,使ARCamera捕捉到的图像可以以3D场景的形式展示在ARScnView上;
ARConfiguration:运行会话就需要进行会话配置,ARConfiguration类或其子类,确定了ARKit将如何跟踪设备相对于现实世界的位置和运动,从而影响你创建的AR体验的种类;
ARFrame:ARKit传输ARCamera获取到的跟踪信息和图像参数的对象;
SCNScene:3D世界的场景,万物皆Scene
SCNNode:节点,就是3D模型
ARConfiguration的子类主要有以下三种:
ARWorldTrackingConfiguration:提供高品质的AR体验,使用后置摄像头精确跟踪设备的位置和方向,并允许平面检测和点击测试。
AROrientationTrackingConfiguration:提供使用后置摄像头并仅跟踪设备方向的基本AR体验。
ARFaceTrackingConfiguration:提供使用前置摄像头并跟踪用户脸部的移动和表情的AR体验。
AR工作流程图.png
3.创建Demo
了解了概念,知道了有哪些类以及每个类的功能,下面就来实际敲码Demo一下。首先是创建工程,①苹果有专门的AR框架工程“Augmented Reality App”,注意在“content Technology”选择Scenekit;②我们也可以创建“Single View App”,然后再在controller上添加ARSCNView等AR所需的控件。
下面说一下AR特有文件的创建,如下图。
Demo文件.png
文件创建.png
3D模型需要专门的3D软件制作,动画效果则可以自己在Xcode上创建设置。具体各个参数的效果可参考"SceneKit框架详细解析"。
动画参数设置.png
以上。都是些比较基础入门的东西以及一些个人的理解,文章开头的参考文章有不少干货,大家可以去看看。后续再放个小Demo。