本文是Ray Wenderlich上《ARKit by Tutorials》3.0 版新增章节的读书笔记,主要讲内容概要和读后感
本章节介绍了 RealityKit & Reality Composer 简单应用。
RealityKit
RealityKit 是苹果在 WWDC 2019 上宣布的纯 Swift 框架。主要作用是帮助我们更方便地创建 AR 应用。它充分利用了 Swift 的高性能,同时简单的 API。
RealityKit 的目标是创建出超高真实感的,基于物理的图形,同时还有精确的物理模拟和碰撞。它有很多惊人的特性:骨骼动画,真实感阴影,光照,反射和后置效果。
- Rendering :RealityKit 在 Metal 的基础上,提供了新的基于物理的渲染,并为所有的苹果设备做了优化。
- Animation:内置对骨骼动画和变换动画(Transform-based animation)的支持。比如一个僵尸动画(骨骼动画),或者平移,缩放和旋转(变换动画)任意物体。
- Physics:内置强大的物理引擎,可模拟真实世界的质量,阻力和碰撞等。
- Audio:带有空间音频理解和自动的收听者配置,你可以给 3D 物体添加音频效果。这声音会根据在真实世界位置的不同而不同。
- ECS:RealityKit 强制使用 Entity Component Design Pattern 来构建真实世界中的物体。
- Synchronization:内置的网络框架,用于多人共享体验。它甚至能够在不同的多个用户之间,自动同步实体。
RealityKit API components
项目的创建与以前区别不大,只是注意选择语言为 Swift,内容技术为 RealityKit 就行了。 惟一不同的是,多了个Experience.rcproject文件,它其实是用Reallity Composer创建的工程。
对于 RealityKit 的 API 结构,我们有必要说明一下:
- ARView:ARView 在 RealityKit 中处于核心位置,它负责干所有的脏活累活。它支持全部手势,允许你将手势添加到 entity 上。它还负责后置处理的相机效果,类似于 AR Quick Look 中看到的那样。
- Scene:可以看做是所有 entity 的容器。
- Anchor:RealityKit 中将所有可用的 ARKit 锚点(Plane,Face,Body,Image 和 Object)作为第一等公民。Anchor 构成了 entity 结构的根结点。注意:附加到 Anchor 上的物体一开始是隐藏的,直到 anchor 被成功识别并连接到真实世界,才会显示出来。
- Entity:所有场景中的虚拟内容都可以被看做是Entity。entity 可以组成树状的层级结构。
- Component:Entity 中包含了不同类型的Component,可以赋予 entity 特有的特性和功能,比如模型,碰撞和物理效果。
Reality Composer
Reality Composer 是苹果推出的所见即所得的创作工具,支持 iOS 和 macOS。iPad版界面如下:
用 macOS 打开前面创建项目中的Experience.rcproject,界面如图:
Reality Composer 自带了一个丰富的素材仓库,但我们也可以点击右上角的 Import 按钮来导入我们自己的素材:
添加行为 behavior
通过Triggers 和 Actions 可以让你的模型活起来。
Code generation
Reality Composer 是和 Xcode 紧密结合在一起的。当你 build 你的项目时,Xcode 将检查所有关联的 Reality 文件并为其生成对应的 Swift 代码。生成的代码提供了对 Reality 文件中所有内容的强类型访问。同时也提供了直接访问并调用 trigger 来自定义动作的能力。 在ViewController.swift中的**viewDidLoad()**中添加代码:
// 1
let pigAnchor = try! Experience.loadPig()
// 2
arView.scene.anchors.append(pigAnchor)
然后运行一下,点击小猪,它就会触发内置的动作,跳起来
总结
现在,你已经了解了苹果最新,最出色的RealityKit框架,该框架首先为AR设计,旨在帮助降低AR开发人员每天必须面对的复杂性。
还对 Reality Composer 进行了基本介绍,Reality Composer是一个适用于macOS和iOS的全新应用程序,可通过简单直观的设计构建基本的交互式AR体验。
Reality Composer紧密集成到Xcode中,它将生成伴随代码,使您可以对虚拟场景和内容进行强类型访问。