Swift RealityKit和ARKit–;应用程序启动时AR project在寻找什么?
如果您打开Xcode,创建一个新的增强现实项目并运行该项目,您将更好地理解这个问题 项目开始在设备上运行后,您将看到后摄像头拍摄房间的图像 3或4秒后,将出现一个立方体 我的问题是:Swift RealityKit和ARKit–;应用程序启动时AR project在寻找什么?,swift,augmented-reality,arkit,realitykit,arcamera,Swift,Augmented Reality,Arkit,Realitykit,Arcamera,如果您打开Xcode,创建一个新的增强现实项目并运行该项目,您将更好地理解这个问题 项目开始在设备上运行后,您将看到后摄像头拍摄房间的图像 3或4秒后,将出现一个立方体 我的问题是: 在立方体出现之前,应用程序在做什么?我的意思是,我想应用程序正在寻找场景中的跟踪点,这样它就可以锚定立方体,对吗 如果这是真的,那么应用程序需要哪些元素 假设我对立方体出现的点不满意。是否有任何功能可以通过点击屏幕触发,以便跟踪可以在屏幕上点击的位置附近再次搜索新点 我知道我的问题是一般性的,所以请给我正确的方向。
- 追踪
- 场景理解
- 渲染
ArcoachingGoverLayView
获取有用的可视说明,在会话初始化和恢复期间为您提供指导
场景理解
第二阶段可以包括水平和垂直平面检测、光线投射(或命中测试)和光线估计。如果您已激活平面检测功能,则需要一些时间来检测具有相应(或锚定实体(.Plane)
)的平面,在您的情况下,该锚定实体必须系紧虚拟模型-立方体。还有一个高级场景理解,允许您使用场景重建功能。您可以在gadgets中使用场景重建和激光雷达扫描仪,它为您提供了改进的深度通道,用于合成场景中的元素和人物遮挡。您可以始终启用图像/对象检测功能,但您必须考虑它是建立在机器学习算法上的,它增加了模型在场景中的放置时间。
翻译
最后一个阶段用于渲染场景中的虚拟几何体。场景可以包含具有着色器和纹理的模型、变换或资源动画、动力学和声音。金属着色器的周围HDR反射由神经模块计算。ARKit无法渲染AR场景。对于3d渲染,您必须使用RealityKit、SceneKit或Metal等框架。这些框架有自己的渲染引擎
默认情况下,在RealityKit中,有高质量的渲染效果,如运动模糊或光线跟踪阴影,需要额外的计算能力。考虑到这一点
提示
要显著缩短在AR场景中放置对象的时间,请使用工作速度为纳秒的激光雷达扫描仪。若你们的小工具并没有激光雷达,那个么你们只能跟踪周围的环境,那个里的光线条件很好,所有真实世界的物体都清晰可辨,它们上面的纹理丰富,并没有重复的图案。另外,在项目中尽量不要使用多边形几何体,多边形数超过10K+且纹理分辨率高(jpeg
或png
,大小为1024x1024,视为正常)
此外,RealityKit 1.0默认情况下启用了多个重
选项–深度通道合成
,运动模糊
和光线跟踪接触阴影
(在A11和更早版本上有投影阴影)。如果您不需要所有这些功能,只需禁用它们。之后,你的应用程序会更快
实际解决方案一 (禁用阴影、运动模糊、深度补偿等) 使用以下属性禁用处理器密集型效果:
override func viewDidLoad() {
super.viewDidLoad()
arView.renderOptions = [.disableDepthOfField,
.disableHDR,
.disableMotionBlur,
.disableFaceOcclusions,
.disablePersonOcclusion,
.disableGroundingShadows]
let boxAnchor = try! Experience.loadBox()
arView.scene.anchors.append(boxAnchor)
}
实际解决办法二 (默认情况下启用阴影、运动模糊、深度补偿等) 在RealityKit中使用以下代码时:
override func viewDidLoad() {
super.viewDidLoad()
let boxAnchor = try! Experience.loadBox()
arView.scene.anchors.append(boxAnchor)
}
通过以下设置,可以获得Reality Composer的预配置场景,其中包含水平面检测属性和AnchoreEntity
:
AnchorEntity(.plane(.horizontal,
classification: .any,
minimumBounds: [0.25, 0.25])
你遇到的问题是,你的应用程序启动时会出现时间延迟。同时启动世界跟踪(第一阶段),然后应用程序尝试同时检测水平面(第二阶段),然后渲染立方体的金属着色器(第三阶段)。要消除这种时间延迟,请使用这种非常简单的方法(当应用程序启动时,您需要跟踪房间,然后点击屏幕):
这样可以减少CPU和GPU上的同时负载。因此,您的多维数据集加载速度更快
附笔。
另外,您也可以使用loadmodelsync(名为:in:)
type方法,该方法允许您从捆绑包中的文件异步加载模型实体:
static func loadModelAsync(named name: String,
in bundle: Bundle?) -> LoadRequest<ModelEntity>
static func loadmodelsync(名称:String,
在bundle中:bundle?->LoadRequest
在default Experience.rcproject中,多维数据集的。因此,在ARSession找到场景中的任何水平面(例如地板或桌子)之前,立方体基本上不会显示。在…上
static func loadModelAsync(named name: String,
in bundle: Bundle?) -> LoadRequest<ModelEntity>