关于 RealityKit
Blender → *.gltf
→ Converter → *.usdz
→ Composer → *.rcproject
→ RealityKit / ARKit
RealityKit 是Apple 在 WWDC2019 推出的增强现实应用开发框架,是一个包含了虚拟对象渲染、动画、物理、音频等功能的3D引擎,配合 LiDAR 扫描仪和 ARKit 的场景理解能力,开发者可以更轻松地创造高质量的增强现实体验。除了用于渲染 3D 内容的 RealityKit 之外,Apple 还提供了配套的 3D 内容生产工具:Reality Converter 和 Reality Composer,并以 USDZ 3D文件格式为中介,串联起增强现实应用的内容生产工作流程。
RealityKit 中 Entity 的继承关系
RealityKit 中所有的虚拟对象都继承自
Entity
,其中默认包含了Transform
和Synchronization
信息.
- Transform Component:坐标信息
- Synchronization Component:同步信息,用于多人 AR 体验
无论是通过 USDZ 文件格式还是通过 Reality Composer 导入到项目的 3D 文件,在 RealityKit 中都是通过Entity
的树形结层级构来存储的。
AnchorEntity 【链接到Apple官方RealityKit文档】
Anchor Entity 用于表示 AR 场景中的坐标信息,既可以是用于锚定对象的空坐标,也可以是实现 HasAnchoring 协议的 Model Entity。不过更常用的两种方式是作为 Raycast 或平面检测结果的载体:
- 从 Raycast 返回的空间坐标生成 Anchor,例如将屏幕点击的位置转换成 AR 世界坐标:
let touchLocation = sender.location(in: arView)
guard let raycastResult = arView.raycast(from: touchLocation, allowing: .estimatedPlane, alignment: .any).first else {
messageLabel.displayMessage("No surface detected, try getting closer.", duration: 2.0)
return
}
let anchor = AnchorEntity(raycastResult: raycastResult)
anchor.addChild(entity)
arView.scene.addChild(anchor)
ModelEntity【链接到Apple官方RealityKit文档】
用于平面检测,过滤符合面积要求的平面坐标,例如选定游戏场景所在平面:
RealityKit 实际渲染的虚拟对象存储在 Model Enityt 中的 ModelComponent
中;Model Entity 中也可以定义对象的碰撞属性、物理属性、物理运动等。
一个虚拟对象的视觉部分由 Mesh 和 Material 组成,前者定义对象的几何形状,后者定义纹理材质。RealityKit 支持 4 种基本几何形状,意味着可以在程序运行过程中生成(同时也意味着除此之外的复杂形状需要从其它建模工具中产生):
.generateBox
.generatePlane
.generateSpere
.generateText
RealityKit 支持 4 种基本材质:
-
SimpleMaterial
:基本材质,能够根据材质属性(金属、粗糙等)反射环境、虚拟光源; -
UnlitMaterial
:不反射光线的基本材质; -
VideoMaterial
:将视频素材作为材质,例如虚拟播放器/小电视; -
OcclusionMaterial
:遮挡素材,可以造成遮挡效果:
从其它 3D 建模工具导入
由于 RealityKit 目前只支持少量基本几何形状,更复杂的虚拟场景仍然需要通过其他专业 3D 建模工具生成。接下来以 Blender 为例,说明从建模到实现 AR 效果的开发过程。
在 Blender 中完成模型、贴图、动画等设计后,可以导出 3D 文件(其中兼容性最好的是glTF 2.0
格式),然后通过 Reality Converter 转换为 USDZ 文件(也可以利用 Blender 插件,直接导出到 .usd
文件,其原理是一样的)。
在 Reality Converter 中可以对 3D 对象的材质等属性进行简单修改:
从 Reality Converter 导出的 USDZ 文件可以直接导入到 Reality Composer 中:
在 Composer 中可以重新编辑对象的物理属性、空间坐标、动画效果等,但更重要的是明确不同对象的分组、层级关系,因为在 RealityKit 中很有可能需要分别独立或成组地访问这些资源;在实际 AR 场景中的坐标关系也是在当前资源相对位置关系的基础上重新定义的。
Composer 导出的 .rcproject
文件可以直接导入到 Xcode ,并可以在 Swift
中直接通过文件名访问
let scene = try! RocketLaunch.loadTower()
文章转载自: RealityKit 开发增强现实应用 - 掘金