T 沙龙移动实践日总结 —— From Idea To an AR App

栏目: IOS · 发布时间: 7年前

内容简介:。Roc此次详细的介绍了ARKit的新特性以及他自己正在尝试的一个项目。首先Roc带来了这次WWDC 2018的亲身见闻。根据应用情报公司Sensor Tower提供的新数据,自从2017年9月19日发布iOS 11以来,已经下载了超过1300万个使用苹果ARKit构建的增强现实应用。
Roc Zhang,本名张鹏,曾在MoreTech实习,现在流利说担任iOS研发。自己已有多款App上架app store,Adonis、Mr.Weather、Year Timer,去美国参加了这次WWDC2018。经验丰富,非常优秀。个人博客:, 微博:

。Roc此次详细的介绍了ARKit的新特性以及他自己正在尝试的一个项目。

首先Roc带来了这次WWDC 2018的亲身见闻。 AR is the future!

T 沙龙移动实践日总结 —— From Idea To an AR App

根据应用情报公司Sensor Tower提供的新数据,自从2017年9月19日发布iOS 11以来,已经下载了超过1300万个使用苹果ARKit构建的增强现实应用。

ARKit

  • ARKit 是一个移动端 AR 平台,用于在 iOS 上开发增强现实 app。
  • ARKit 提供了接口简单的高级 API,有一系列强大的功能。
  • 但更重要的是,它也会在目前的数千万台 iOS 设备上推出。为了获得 ARKit 的完整功能,需要 A9 及以上芯片。其实也就是大部分运行 iOS 11 的设备,包括 iPhone 6S。

1.功能

追踪(Tracking)

追踪是 ARKit 的核心功能,也就是可以实时追踪设备。

  • 世界追踪(world tracking)可以提供设备在物理环境中的相对位置。
  • 借助视觉惯性里程计Visual–Inertial Odometry(VIO),可以提供设备所在位置的精确视图以及设备朝向,视觉惯性里程计使用了相机图像和设备的运动数据。
  • iPhone X独有的人脸追踪

场景理解(Scene Understanding)

追踪上面一层是场景理解,即确定设备周围环境的属性或特征。

  • 平面检测(plane detection) 平面检测能够确定物理环境中的表面或平面。例如地板或桌子。
  • 命中测试(hit test) 为了放置虚拟物体,Apple 还提供了命中测试功能。此功能可获得与真实世界拓扑的相交点,以便在物理世界中放置虚拟物体。
  • 光线估算(Lighting Conditions) 光线估算用于正确光照你的虚拟几何体,使其与物理世界相匹配

渲染(Rendering)

结合使用上述功能,可以将虚拟内容无缝整合进物理环境。所以 ARKit 的最后一层就是渲染。

  • Apple 让我们可以轻易整合任意渲染程序。他们提供的持续相机图像流、追踪信息以及场景理解都可以被导入任意渲染程序中。
  • 对于使用 SceneKit 或 SpriteKit 的人,Apple 提供了自定义 AR view,替你完成了大部分的渲染。所以真的很容易上手。
  • 同时对于做自定义渲染的人,Apple 通过 Xcode 提供了一个 metal 模板,可以把 ARKit 整合进你的自定义渲染器。
  • Unity 和 UNREAL 会支持 ARKit 的全部功能

2.ARKit历程

  • 2017年,苹果在WWDC 2017大会上推出ARKit 1.0版本。
  • 2018年初,伴随着iOS11.3的发布,ARKit 1.5版本推出。
    • 支持2D的图像检测,将真实世界的图像集成到AR体验中;
    • 支持虚拟对象放置在垂直表面;
    • 支持自动对焦,从而获得更清晰的视图
  • WWDC 2018 ARKit 2.0横空出世,带来了一些新特性。
    • 加载和保存地图,提供了全新的持久化及多人体验
    • 环境纹理,可以更真实地渲染 AR 场景
    • 图像追踪,实时追踪 2D 图片
    • 物体检测,检测场景中的 3D 物体
    • 面部追踪提升

SwiftShot

接下来Roc为大家带来了一款WWDC18上的游戏。

T 沙龙移动实践日总结 —— From Idea To an AR App
T 沙龙移动实践日总结 —— From Idea To an AR App

这个游戏体现了ARKit2的什么特性呢?

  • 多用户体验。SwiftShot使用 MultipeerConnectivity 框架与其他本地玩家建立连接,并在设备之间发送游戏数据。
  • 当你开始自己的会话时,开始会话的玩家会创建一个 ARWorldMap ,它包含ARKit对游戏板周围区域的空间理解。
  • 其他参与的玩家会收到地图的副本,并看到一张主人游戏台的照片。移动他们的设备,帮助ARKit处理接收到的地图,并建立多人游戏的 共享参考框架

How to Create an ARKit App –– Roc's idea

接下来Roc通过自己的项目想法向大家介绍了如何去创建一个ARKit应用。

T 沙龙移动实践日总结 —— From Idea To an AR App
T 沙龙移动实践日总结 —— From Idea To an AR App

ARKit 是基于 session 的 API。所以首先你要做创建一个简单的 ARSession。ARSession 对象用于控制所有处理流程,这些流程用于创建增强现实 app。但首先需要确定增强现实 app 将会做哪种类型的追踪。所以,还要创建一个 ARSessionConfiguration。ARSessionConfiguration 及其子类用于确定 session 将会运行什么样的追踪。只要设置好对应的属性,就可以获得不同类型的场景理解,并让 ARSession 做不同的处理。

要运行 session,只要对 ARSession 调用 run 方法即可,带上所需的 configuration。 run(_ configuration) 然后处理流程就会立刻开始。同时底层也会开始捕捉信息。幕后会自动创建 AVCaptureSession 和 CMMotionManager。它们用于获取图像数据和运动数据,这些数据会被用于追踪。

处理完成后,ARSession 会输出 ARFrames。

ARFrame 就是当前时刻的快照,包括 session 的所有状态,所有渲染增强现实场景所需的信息。要访问 ARFrame,只要获取 ARSession 的 currentFrame 属性。或者也可以把自己设置为 delegate,接收新的 ARFrame。

代码实现

class ViewController: UIViewController { 
...
@IBOutlet var sceneView: ARSCNView!
overide func viewDidLoad() { 
...
let scene = SCNScene(named: “xxx”)
sceneView.scene = scene }
override func viewWillAppear(_ animated: Bool) { 
...
let configuration = ARWorldTrachingConfiguration() Configuration.planeDetection = .horizontal
sceneView.session.run(configuration) }
}
复制代码

场景理解(Scene Understanding)

平面检测

  • 平面检测可以提供相对于重力的水平面。包括地面以及类似桌子等平行平面。ARKit 1.5 开始也支持了垂直平面检测。
  • ARKit会在后台聚合多个帧的信息,所以当用户绕着场景移动设备时,它会掌握更多有关平面的信息。
  • 平面检测还能校准平面的边缘,即在平面所有检测到的部分四周套上一个矩形,并将其与主要区域对齐。所以从中也能得知物理平面的主要角度。
  • 如果同一个物理平面检测到了多个虚拟平面,ARKit会负责合并它们。组合后的平面会扩大至二者范围,因此后检测的那些平面就会从session中移除。

代码实现

// 创建新的 world tracking configuration
let configuration = ARWorldTrackingSessionConfiguration()

// 启用平面检测
configuration.planeDetection = .horizontal

// 改变运行中 session 的 configuration
mySession.run(configuration) 
复制代码

命中测试(hit test)

  • 命中测试就是从设备发送一条光线,并与真实世界相交并找到相交点。
  • ARKit 会使用所有能用的场景信息,包括所有检测到的平面以及3D特征点,这些信息都被 ARWorldTracking 用于确定位置。
  • ARKit 然后发射光与所有能用的场景信息相交,然后用数组返回所有相交点,以距离升序排序。所以该数组的第一个元素就是离摄像头最近的相交点。
  • 有不同的相交方式。可以通过 hit-test type 来定义。一共有四种方式。
    • Existing plane using extent: 如果在运行平面检测,并且 ARKit 已在环境中检测到了某个平面,就可以利用此平面。但你可以选择使用平面的范围或忽视它的范围。也就是说,例如你想让用户在某个平面上移动对象,就应该考虑范围,所以若光在范围内相交,就会产生一个相交点。如果这束光打到了范围的外面,就不会产生相交点。
    • Existing plane: 但如果你只检测到了地面的一小部分,但希望来回移动家具,就可以选择忽略范围,把当前平面当做无限平面。在这种情况下,你总是会获得相交点。
    • Estimated plane: 如果没有在运行平面检测或者还没有检测到某个平面,也可以根据目前的 3D 特征点来估算平面。在这种情况下,ARKit 会寻找环境中的处于共同平面的点并为它们安装一个平面。随后也返回与此平面的相交点。
    • Feature point: 如果你想在某个很小的表面上放东西,但此表面无法生成平面,或者是某个非常不规则的环境,也可以选择直接和特征点相交。也就是说光线会与特征点产生相交点,并将距离最近的特征点其作为结果返回。

代码实现

if let point = sceneView.hitTest(screenCenter, type: [.estimatedHorizontalPlane]).first {

// Creat ARAnchor using result 

}
复制代码

一些手势

我们可以添加一些手势,来控制物体的缩放,旋转和移动。

T 沙龙移动实践日总结 —— From Idea To an AR App

多用户操作 Multiuser

  • 捕获AR World Map

    T 沙龙移动实践日总结 —— From Idea To an AR App
  • 捕获并发送AR World Map ARKit提供了一个worldMappingStatus值:notAvailable,extending,limited,mapped,该值指示当前是否是捕获世界地图的好时机

    T 沙龙移动实践日总结 —— From Idea To an AR App
  • 接收当前世界地图

    T 沙龙移动实践日总结 —— From Idea To an AR App
  • 通过MultipeerConnectivity链接

    T 沙龙移动实践日总结 —— From Idea To an AR App
  • 接收并重新定位到共享地图

    T 沙龙移动实践日总结 —— From Idea To an AR App

Beat PM

T 沙龙移动实践日总结 —— From Idea To an AR App

这是Roc正在构思的一个小游戏,可以在繁忙的工作中放松身心。相信不久就会呈现在大家面前,让我们拭目以待。

MultipeerConnectivity&Peertalk

最后Roc又延伸介绍了下MultipeerConnectivity以及Peertalk(An iOS and Mac Cocoa library for communicating over USB),感兴趣的童鞋可以详细了解下。

T 沙龙移动实践日总结 —— From Idea To an AR App
T 沙龙移动实践日总结 —— From Idea To an AR App

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Book of CSS3

The Book of CSS3

Peter Gasston / No Starch Press / 2011-5-13 / USD 34.95

CSS3 is the technology behind most of the eye-catching visuals on the Web today, but the official documentation can be dry and hard to follow. Luckily, The Book of CSS3 distills the heady technical la......一起来看看 《The Book of CSS3》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换