ARKit 增强现实简介
什么是增强现实?
增强现实 (AR) 就是将虚拟元素以数字方式放入现实世界并与这些元素进行交互,就像它们真的存在一样。AR 为许多领域开辟了令人兴奋的新可能性,包括导航、游戏、军事技术、旅行增强等。
我们可以用 AR 出现之前不可能的方式来美化现实世界的环境。可能性是无穷无尽的,唯一的限制就是我们的创造力。
苹果于 2017 年 6 月在全球开发者大会 (WWDC) 上发布了ARKit 框架。ARKit框架依赖于 iOS 的高级功能,例如实时世界跟踪和命中测试、水平平面检测以及将真实照明应用于虚拟物体的能力。
但我们不必成为所有这些领域的专家。ARKit 隐藏了所有底层复杂性,使创建 AR 应用程序变得相当简单。
以下是我们将在本教程中构建的 AR 演示的屏幕截图:
跟着我一起看看我们是如何实现的。你可以从Github下载演示项目。
您的第一个 AR 应用程序
您将在几分钟内创建您的第一个 iOS 增强现实应用。兴奋吗?继续阅读。
先决条件
要实现本教程中的 ARKit 演示,您需要一台装有Xcode 9或更高版本的Mac。此外,ARKit 需要 A9 或更新的处理器来实时执行所有复杂的计算。因此,您需要 iPhone SE、iPhone 6s、iPhone 6s Plus、第 5 代 iPad 或运行 iOS 11 的较新设备。
请注意,ARKit 应用程序不会在模拟器中运行。
让我们开始吧
通过 Xcode 9 和上述硬件,Apple 让我们能够轻松创建精美逼真的增强现实应用和游戏。Xcode 9 甚至附带专用模板,让我们能够在几分钟内构建我们的第一个 ARKit 应用。
打开 Xcode 并选择File -> New -> Project。选择Augmented Reality App模板:
点击Next,然后为你的项目选择一个名字(例如,“FirstARKitApp”)。你可以保留其他设置的默认设置(语言:Swift,内容技术:SceneKit)。点击Next,然后在你选择的文件夹中创建项目。
恭喜!您刚刚创建了您的第一个增强现实应用程序。
是的,你没看错!无需编码。在真实设备上运行应用后,你将看到以下内容:
现在,让我们仔细看看生成的项目。 Main.storyboard包含一个视图控制器,该控制器具有ARSCNView类型的主视图。ARSCNView是一种特殊视图,用于显示将设备的摄像头视图与虚拟 3D 内容融合的场景。 该视图连接到ViewController.swift文件中的 sceneView 出口:
@IBOutlet var sceneView: ARSCNView!
接下来,让我们检查一下 ViewController 的viewDidLoad()方法:
override func viewDidLoad() {
super.viewDidLoad()
// Set the view's delegate
sceneView.delegate = self
// Show statistics such as fps and timing information
sceneView.showsStatistics = true
// Create a new scene
let scene = SCNScene(named: "art.scnassets/ship.scn")!
// Set the scene to the view
sceneView.scene = scene
}
sceneView 的委托设置为self ,但在本演示中我们不会使用ARSCNViewDelegate 。
sceneView.showsStatistics = true
通过将showsStatistics属性设置为 true,我们将在运行应用程序时看到实时统计数据。
点击左下角的+图标可以显示更多详细信息:
- 绿色条是性能指标。满条表示性能良好。
- 渲染引擎显示在性能指示器的右侧。可能的值是 GL(OpenGL)和 Mt(Metal)。在能够运行 ARKit 的现代设备上,您会看到 Mt。
- FPS 计数器显示帧速率,即每秒屏幕更新的次数。60 是最大值,30 以上的值也是可以接受的。
- 节点数(菱形图标旁边的值)显示场景图中的节点数。稍后将详细介绍。
- 下一条信息是多边形数量指示器。它显示当前场景中渲染了多少个多边形。
- 环形图显示了渲染一帧所花费的时间。我们还可以看到渲染一帧需要多少时间。在这个例子中,显示一帧仅花费了 0.4 毫秒。因此,如果设备支持如此高的帧速率,我们可以显示高达 2500 帧/秒。
接下来我们加载场景:
let scene = SCNScene(named: "art.scnassets/ship.scn")!
SCNScene实例表示 3D 场景及其内容,包括灯光、3D 对象、摄像头和其他属性。当前场景使用与 ARKit 模板捆绑在一起的ship.scn进行初始化:
这艘船将会在我们的演示中显示并与现实世界相结合。最后,我们将场景分配给ARSceneView对象:
sceneView.scene = scene
我们几乎准备好运行我们的第一个 AR 应用了。最后的配置步骤在viewWillAppear()委托方法中执行:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Create a session configuration
let configuration = ARWorldTrackingConfiguration()
// Run the view's session
sceneView.session.run(configuration)
}
ARSCNView有一个与之关联的 AR 会话。ARSession处理摄像头图像并跟踪设备的运动。调用ARsession的run()方法后,AR 处理开始。run ()方法需要一个有效的ARConfiguration实例。此配置对象定义会话的运动和场景跟踪行为。
ARConfiguration无法直接实例化。请改用 ARKit 提供的以下子类之一。
引用 ARKit 文档:
- ARWorldTrackingConfiguration:提供高质量的 AR 体验,使用后置摄像头精确跟踪设备的位置和方向,并允许平面检测和命中测试。
- AROrientationTrackingConfiguration:提供使用后置摄像头并仅跟踪设备方向的基本 AR 体验。
- ARFaceTrackingConfiguration:提供使用前置摄像头并跟踪用户脸部运动和表情的 AR 体验。
ARKit 模板使用ARWorldTrackingConfiguration类。此类配置还将跟踪设备的位置和方向变化。因此,我们将能够自由移动保持在现实世界固定位置的宇宙飞船模型。
如果我改用AROrientationTrackingConfiguration,设备的位置变化将不会被跟踪。因此,星际飞船将与设备一起移动。我们可以使用此配置来显示围绕我们设备运行的太阳系行星。
然而,缺乏位置变化跟踪对于大多数 AR 应用和游戏来说是一个大问题,所以你最终可能会使用ARWorldTrackingConfiguration。除了位置和方向变化之外,ARFaceTrackingConfiguration还可以跟踪面部表情,这为更多应用提供了可能。
请注意,ARFaceTrackingConfiguration 需要iPhoneX 的 TrueDepth 相机。
下一步
继续阅读本系列的下一篇指南《客厅中的虚拟 3D 形状》。
如果您喜欢这篇关于 ARKit 的快速介绍,您可能想了解更多。您可能想查看我在 Pluralsight 上的 Swift 课程。我谈论设计模式和 Swift 最佳实践、技巧和窍门。
我还为您收集了几个链接:
介绍 ARKit(WWDC 2017):https://developer.apple.com/videos/play/wwdc2017/602/ 官方 ARKit 网站:https://developer.apple.com/arkit 适用于您的 ARKit/SceneKit 应用的免费和高级 3D 模型:https://free3d.com、https://sketchfab.com、https://www.turbosquid.com Blender,免费 3D 创作工具:https://www.blender.org
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~