ARKit之路-RealityKit概述之一

版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载。

  通过前面章节的学习我们知道,ARKit本身并不直接提供渲染功能,在ARKit3.0之前,AR场景渲染依托于SceneKit、SpriteKit、Metal或自定义渲染框架。这些第三方渲染框架并不是为AR应用开发而设计,如SceneKit设计处理3D渲染、SpriteKit设计处理2D渲染、Metal则是更底层的图形API,设计之初均未考虑AR应用,因此使用这些框架并非最合适的选择。

  AR应用开发跟普通2D/3D应用开发最大的不同在于AR应用需要实时的与现实环境交互,如放置一盏台灯到桌面,这是以往2D/3D应用未曾遇到过的问题。除此之外,AR应用比普通2D/3D应用对虚拟元素渲染要求更高,如景深、相机噪声、运动模糊、PBR(Physically Based Rendering,基于物理的渲染)渲染、环境光估计、环境反射等等,不真实的渲染会让放置于现实环境中的虚拟元素看起来很假,从而破坏AR的沉浸体验。

  在2019年,苹果公司从头开始为AR开发量身打造了一个全新的Swift渲染框架,这就是RealityKit,所以RealityKit是完全面向AR开发的,其重点解决的问题也是现实环境中的虚拟元素PBR渲染以及精准的行为模拟,包括物理仿真、环境反射、环境光估计等。RealityKit专为真实环境中虚拟元素渲染而设计,所有的特性都围绕营造真实感更强、代入感更好的AR体验。另外,借助于Swift语言的强大能力,RealityKit程序接口界面简洁、使用简单,大大的方便了AR开发者使用。

  RealityKit与ARKit的关系可以用下图来表示,它们并非相互竞争关系,RealityKit构建于ARKit之上。
ARKit之路-RealityKit概述之一

RealityKit主要功能

  RealityKit定位于为ARKit提供直接的渲染支持,对下与ARKit紧密结合,对上提供简洁接口。但除此之外,为更好的模拟虚拟元素与真实世界之间的交互,营造虚实难辨的AR体验,方便开发人员使用,RealityKit还提供以下功能:动画、物理模拟、网络同步、实体组件系统、3D音效等,甚至是完全自动处理的景深、运动模糊、相机噪声模拟,如下图所示。
ARKit之路-RealityKit概述之一

  渲染
  渲染是RealityKit最重要的功能,其目标是确保渲染出来的虚拟元素真实可信,能最大限度的模拟真实物体的行为特性(如反射、阴影),为达到这一目标,RealityKit采用PBR渲染模型,精确的模拟光照与材质的交互。
   RealityKit渲染功能构建于Metal框架之上,针对硬件与AR渲染特性进行过深度优化,同时支持多线程渲染和其他低级图形API功能。RealityKit专为AR开发打造,渲染作为RealityKit的核心功能得到高度重视,因此,RealityKit渲染能力极为出色,利用RealityKit渲染出来的虚拟元素可信度高、真实感强,大大的提高了AR的渲染效果。

  动画
  RealityKit支持骨骼动画(Skeletal Animation)和变换动画(Transform Animation)两种动画模式。变换动画一般支持简单的平移、旋转、缩放或者程序化的动画效果,更复杂的动画通常会采用骨骼绑定的方式生成骨骼动画,这两种动画都可以由USDZ (Universal Scene Description Zip文件)或者Reality格式(Reallity Composer文件)文件导入。除此之外,变换动画也可以直接由程序代码生成,骨骼动画也可以由程序驱动(如由摄像头采集的3D人体骨骼数据驱动)。

  物理模拟
  物理模拟又叫物理仿真,是利用计算机系统模拟虚拟元素之间、虚拟元素与现实环境之间的复杂相互作用,包括力、质量、摩擦、碰撞等等,如模拟一只皮球从桌子上掉落到地面并弹起的过程。RealityKit物理系统内建碰撞检测功能,支持立方体、球体、胶囊体和更复杂的自定义包围盒(Bounding Box),可以快速检测不同形状物体之间的碰撞。除此之外,物理系统还模拟了虚拟物体之间的物理效果,如惯性、阻力等等。

  使用了物理系统后,虚拟物体之间、虚拟物体与现实环境之间的相互作用不需要进行硬编码,而是按照牛顿运动定律进行实时计算模拟,由于牛顿运动定律的客观性,这种模拟出来的效果与真实物体间相互作用效果可以做到完全一致,可以大大的增强虚拟物体的可信度。

  网络同步
  RealityKit完全整合了MultipeerConnectivity近距离通信框架,对AR应用提供内建的数据同步、体验共享支持。利用该功能,现实世界数据信息与整个场景虚拟元素信息能够在所有参与方实时共享,任何用户可以在任何时间加入到这个共享圈中而无需开发人员干预参与,任何用户也可以在任何时间退出共享圈而不影响其他用户继续体验。RealityKit对网络同步的良好设计,使构建实时互联的AR应用变得前所未有的简单和自动化。

  实体组件系统
  RealityKit完全采用组件设计模式,引入了完整的实体组件系统(Entity Component System),即插即用的组件风格极大的避免了多层继承和完全杜绝了多继承(Swift不支持多继承)带来的维护问题,同时在内存布局与多线程方面也带来了巨大的优势,基于实体—组件模式让开发变得更加强大和灵活。

  3D音效
  音效也是影响AR沉浸感的另一个重要方面,RealityKit提供了3D音效功能用于模拟声音在3D空间中的传播特性。利用RealityKit,使用简单的代码就能实现身临其境的立体环绕音效。
除此之外,RealityKit还提供阴影计算、运动模糊、景深、相机噪声等功能,而且,很多功能都是完全自动处理,无需要开发人员设置开发,RealityKit会综合硬件性能与AR应用运行时的软硬件环境自动选择最合适的效果,最大程度的营造沉浸式的AR体验。

参考资料

RealityKit documents RealityKit documents