RealityKit 开发加强现实应用

Blender*.gltfConverter*.usdzComposer*.rcprojectRealityKit / ARKitmarkdown

🔗 原文连接 app

关于 RealityKit

RealityKit 是Apple 在 WWDC2019 推出的加强现实应用开发框架,是一个包含了虚拟对象渲染、动画、物理、音频等功能的3D引擎,配合 LiDAR 扫描仪和 ARKit 的场景理解能力,开发者能够更轻松地创造高质量的加强现实体验。除了用于渲染 3D 内容的 RealityKit 以外,Apple 还提供了配套的 3D 内容生产工具:Reality Converter 和 Reality Composer,并以 USDZ 3D文件格式为中介,串联起加强现实应用的内容生产工做流程。框架

RealityKit 中 Entity 的继承关系

image.png

RealityKit 中全部的虚拟对象都继承自 Entity ,其中默认包含了TransformSynchronization 信息:ide

  • Transform Component:坐标信息
  • Synchronization Component:同步信息,用于多人 AR 体验

截屏2021-01-21 下午3.58.56.png

不管是经过 USDZ 文件格式仍是经过 Reality Composer 导入到项目的 3D 文件,在 RealityKit 中都是经过 Entity 的树形结层级构来存储的。工具

AnchorEntity

image_1.png

Anchor Entity 用于表示 AR 场景中的坐标信息,既能够是用于锚定对象的空坐标,也能够是实现 HasAnchoring 协议的 Model Entity。不过更经常使用的两种方式是做为 Raycast 或平面检测结果的载体:oop

  1. 从 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) 
复制代码

2. 用于平面检测,过滤符合面积要求的平面坐标,例如选定游戏场景所在平面:布局

// 返回检测到的 **水平** 且 面积不小于 20x20 cm 的平面坐标
let anchor = AnchorEntity(plane:.horizontal, minimumBounds: [0.2,0.2])
anchor.addChild(model)
arView.scene.addAnchor(anchor)

复制代码

ModelEntity

image_2.png RealityKit 实际渲染的虚拟对象存储在 Model Enityt 中的 ModelComponent 中;Model Entity 中也能够定义对象的碰撞属性、物理属性、物理运动等。动画

一个虚拟对象的视觉部分由 Mesh 和 Material 组成,前者定义对象的几何形状,后者定义纹理材质。RealityKit 支持 4 种基本几何形状,意味着能够在程序运行过程当中生成(同时也意味着除此以外的复杂形状须要从其它建模工具中产生):ui

  • .generateBoxspa

  • .generatePlane

  • .generateSpere

  • .generateText

RealityKit 支持 4 种基本材质:

  • SimpleMaterial :基本材质,可以根据材质属性(金属、粗糙等)反射环境、虚拟光源;

  • UnlitMaterial :不反射光线的基本材质;

  • VideoMaterial :将视频素材做为材质,例如虚拟播放器/小电视;

  • OcclusionMaterial :遮挡素材,能够形成遮挡效果:

occluder_title.gif

从其它 3D 建模工具导入

因为 RealityKit 目前只支持少许基本几何形状,更复杂的虚拟场景仍然须要经过其余专业 3D 建模工具生成。接下来以 Blender 为例,说明从建模到实现 AR 效果的开发过程。

在 Blender 中完成模型、贴图、动画等设计后,能够导出 3D 文件(其中兼容性最好的是glTF 2.0 格式),而后经过 Reality Converter 转换为 USDZ 文件(也能够利用 Blender 插件,直接导出到 .usd 文件,其原理是同样的)。 截屏2021-04-08 下午2.57.47.pngReality Converter 中能够对 3D 对象的材质等属性进行简单修改:

截屏2021-04-08 下午3.02.13.pngReality Converter 导出的 USDZ 文件能够直接导入到 Reality Composer 中:

截屏2021-04-08 下午3.06.47.pngComposer 中能够从新编辑对象的物理属性、空间坐标、动画效果等,但更重要的是明确不一样对象的分组、层级关系,由于在 RealityKit 中颇有可能须要分别独立或成组地访问这些资源;在实际 AR 场景中的坐标关系也是在当前资源相对位置关系的基础上从新定义的。

image_3.png Composer 导出的 .rcproject 文件能够直接导入到 Xcode ,并能够在 Swift 中直接经过文件名访问:

let scene = try! RocketLaunch.loadTower()
复制代码

混合开发

有时候须要在代码中对导入的资源进行从新调整,例如给导入的几何形状替换遮挡材质:

let coverGround = rocketScene!.findEntity(named: "LaunchRocket_Ground")?.findEntity(named: "Ground")
var component: ModelComponent = coverGround?.components[ModelComponent].self as! ModelComponent
component.materials = [OcclusionMaterial()]
coverGround?.components.set(component)
复制代码

RealityKit 目前的不足

RealityKit 只有两年时间,目前仍有不少不足之处,但愿在后续版本中能够获得改进:

  1. 基本形状太少
  2. 粒子系统欠缺
  3. 动画支持不足
  4. USDZ 生态

首先是基本几何形状支持太少,有人吐槽 RealityKit 的 LOGO 中,只有一个球形(Sphere)是原生支持的。

realitykit_icon.png

其次是缺乏对粒子系统的支持,这就意味着没法支持酷炫的特效,就像 SceneKit 的 SCNParticleSystem 同样。

image_4.png

虽然 Composer 支持一些 PPT 级别的行为/动画效果,可是对于从其它工具导出到 Converter 再导出到 Composer 的工做流程来讲,对于动画的兼容性仍然颇有限。

blender_hud_animation.gif 对于拥有强大号召力的 Apple 来讲,采用本身的 USDZ 格式并不使人意外,整个生态对USDZ 的支持也没必要担忧,只不过其先天限制可能须要你事先了解,已决定是否符合本身的项目须要,具体能够参考:《glTF and USDZ》

总结

Apple 对于 AR 软硬件生态的布局已经逐渐清晰,RealityKit 做为虚拟渲染引擎,与 ARKit 的配合更加紧密,前者负责渲染加强实体,后者负责理解现实场景

image_5.png 可是从目前 RealityKit 的设计来看,它当下的目标并不是覆盖全部 AR 应用场景(或者说不具有这个能力),而是紧密配合硬件的适用范围(如 LiDAR 支持 5m 内的激光扫描),针对小场景、客厅级AR 应用,提供了一整套稳健、快速的生产解决方案。


参考

  1. RealityKit | Apple Developer Document

  2. Getting started with RealityKit

  3. WWDC20: What's new in ARKit and RealityKit?

WWDC 相关视频

  1. WWDC19 Session 603 - Introducing RealityKit and Reality Composer

  2. WWDC19 Session 605 - Building Apps with RealityKit

  3. WWDC20 Session 10612 - What's new in RealityKit

相关文章
相关标签/搜索