一,视频效果
把虚拟的3d椅子放在了真实的世界里。
更多视频:
二,应用场景
1,模拟一辆车在马路上行驶的效果,卖车嘛
2,模拟房屋的装修
3,服装。
4,等你来无限脑暴.......
三,arkit的工作原理
1,打开摄像头开始构建3d场景
怎么构建的3d场景呢?
答:打开摄像头,初始化3d场景,以当前摄像头的位置为3d坐标系原点位置,也是rootNode;
初始化的坐标系是世界坐标系,
ARKit里坐标系都是使用的右手坐标系。(关于坐标系后面会详细讲到)
摄像头前方z的负方向
摄像头右边x的正方向
摄像头上面y的正方向
附图(坐标系,和右手)
2,再把虚拟的3d模型添加到3d场景,与真实世界进行合适的交互。
arkit本身不提供虚拟3d模型的加载能力,而是由专门的3d绘制引擎来加载;市面上用的比较多的是
sceneKit,
unity3D 5.6.2以上,
Unreal 4.1.7以上
如果是做普通的商业应用,建议选择scenekit,原因:
1)sceneKit是系统动态库,对安装包不会有增量
2)sceneKit是OC写的,可以OCS
3)sceneKit虽然能力不如unity3d和Unreal,但是毕竟不是做一款很复杂的游戏,sceneKit完全够用了
3,摄像头在移动时,通过摄像头的位置,角度以及图像检测,实时的计算并渲染出当前的3d世界
ARKit 使用视觉惯性测距技术,对摄像头采集到的图像序列进行计算机视觉分析,并且与设备的运动传感器信息相结合。ARKit 会识别出每一帧图像中的特征点,并且根据特征点在连续的图像帧之间的位置变化,然后与运动传感器提供的信息进行比较,实现了一系列非常庞大的算法计算,最终得到高精度的设备位置和偏转信息,来建立一个非常准确的SLAM(simultaneous localization and mapping)系统,构建虚拟世界和现实世界之间的映射,所以原来添加在3d场景的物理模型相对于相机的真实矩阵位置就能被计算出来。
4,场景解析:目前开放了能力有平地捕捉,环境光估计,尺度估计,iphonex前置摄像头的人脸识别等;以后应该会开放更多能力
- 平地捕捉:苹果为了让更多的iphone都能支持AR,选择了单目SLAM技术;但是苹果这次单目SLAM就做的非常好,不止能估计平面,还能识别边界。https://v.qq.com/x/page/d0511twrvrj.html该视频中小人跳出桌面的就是用的边界估计。
- 尺度估计:这个就更厉害了。单目SLAM能非常准确估计尺度的,貌似没有其他公司能做到了。
- 环境光估计:通过摄像头捕捉并计算捕捉到的场景中光的总量,来给虚拟物体施加正确的光照条件,渲染效果更加真实。
- iphonex的人脸识别,并不是识别不同人的脸。而是从图像帧里找到一张3D脸;并且提取该脸上51个位置的特征值;将脸型以及脸部表情量化成数据。
AR系统的大致结构图,附图
四,scenekit重要类的介绍
SCNView:继承UIView,用来显示3D世界的。
SCNScene:可以从3d模型中加载一个3d场景(arkit没有这个能力,必须依赖scenekit去加载虚拟的3d模型)
SCNNode:一个scene的基本构成快,可以把摄像机,灯光,几何体附加到节点上。
SCNGeometry:三维几何体
SCNMaterial:材质,上色,贴图靠它
SCNLight:光源可以附加到节点上
http://www.itdadao.com/articles/c15a923684p0.html
一共有4种光源
- 环境光(SCNLightTypeAmbient),这种光的特点,没有方向,位置在无穷远处,光均匀的散射到物体上.
- 点光源(SCNLightTypeOmni),有固定的位置,方向360度,可以衰减
- 平行方向光(SCNLightTypeDirectional),只有照射的方向,没有位置,不会衰减
- 聚焦光源(SCNLightTypeSpot),光源有固定的位置,也有方向,也有照射区域 ,可以衰减
看文字太抽象了。
附图: