我用RealityKit在10米外的墙上放置了一个虚拟模型。虽然我能清楚地看到墙壁,但我看不到虚拟模型。当我在debugoption.showSceneUnderstanding中启用RealityKit时,虚拟模型就会出现。或者当我走近墙的时候,虚拟模型也会出现。ARView的配置如下。调试选项由showMesh控制。
func makeUIView(context: Context) -> ARView {
let config = ARWorldTrackingConfiguration()
// Plane Detection
config.planeDetection = [.horizontal, .vertical]
// Environment Texturing
if #available(iOS 12, *) {
config.environmentTexturing = .automatic
}
// Person segmantantion
if (ARWorldTrackingConfiguration.supportsFrameSemantics(.personSegmentationWithDepth)) {
config.frameSemantics.insert(.personSegmentationWithDepth)
config.frameSemantics.insert(.sceneDepth)
print("[Debug] People occlusion on")
} else {
print("[Debug] People occlusion not available on this devices")
}
// Use LiDAR to promote the scan ablity
if(ARWorldTrackingConfiguration.supportsSceneReconstruction(.mesh)){
config.sceneReconstruction = .mesh
print("[Debug] Scene reconstruction on")
} else {
print("[Debug] The device does not support LiDAR")
}
// Scene Understanding
arViewModel.arView.environment.sceneUnderstanding.options.insert(.occlusion)
arViewModel.arView.environment.sceneUnderstanding.options.insert(.receivesLighting)
// ARCoachingOverlay
arViewModel.arView.addCoaching()
// Debug
if showMesh {
arViewModel.arView.debugOptions.insert(.showAnchorOrigins)
arViewModel.arView.debugOptions.insert(.showSceneUnderstanding)
}
arViewModel.arView.session.run(config)
placementSetting.sceneObserver = arViewModel.arView.scene.subscribe(to: SceneEvents.Update.self, { (event) in
updateScene(for: arViewModel.arView)
})
return arViewModel.arView
}我错过了一些配置吗?ARKit是否支持远程对象的可视化?
这是告诉我所遇到的一切的视频。
P.S.
AR对象在23秒消失,当场景的网格在40秒时启用“`debug”选项。
更新!:我发现问题是由以下原因引起的:
arViewModel.arView.environment.sceneUnderstanding.options.insert(.occlusion)当我通过删除上面的句子来消除隐形性时,AR对象可以在远处被看到,但不能被真实的对象所遮挡。此外,我发现这个问题可能与激光雷达无关,因为我尝试过lidar+occlusion(消失)、激光雷达(工作良好而没有遮挡)、遮挡(消失)、无遮挡(无遮挡)。
激光雷达是通过以下方式启用的:
config.sceneReconstruction = .mesh 发布于 2021-11-08 23:56:22
动态镶嵌
我们知道iPad/iPhone上的LiDAR传感器可以有效地工作在5米的范围内。从字面上看,它的工作距离是0.5到4.9m。RealityKit工程师计算出,在这个范围内,LiDAR将能够用一定数量的多边形重建表面。因此,决定采用重构网格的动态剖分来优化加工过程。
下面是NVidia 文档告诉我们的关于动态镶嵌的内容:
动态镶嵌允许您在每个原始的基础上轻松地控制场景中网格的视觉保真度,以及从LoD网格swaps.The中删除讨厌的网格弹出,这一镶嵌硬件允许您动态地指定每个原语的每个边缘和内部的细分因子。这是一个强大的工具。
在我看来,使用没有动态镶嵌的场景重建功能在5nm iOS设备上几乎是不可能的,因为使用静态镶嵌,三维场景中的多边形数量将很快超过100万。正如您所理解的,现在RealityKit无法使用这样的网格分辨率。
根据苹果的文档,AR场景必须包含不大于100 k多边形的内容。如果您遵循此建议,您的AR场景将是易于管理和响应的。此外,它可以帮助您节省电池寿命和播放AR内容没有下降帧。
苹果的文档中没有任何关于使用LiDAR进行AR的具体信息,但我认为技术上重建网格的10米阈值可以通过使用相机的far clipping plane参数,或者通过注册您的锚所处的索引三角形多边形的丢失,或者通过将RGBA乘以ZDepth通道中最深的像素来启用/禁用。不管选择什么方式..。
对象遮挡
我想说几句关于遮挡算法的话。在带有LiDAR扫描仪的设备中,有关ZDepth通道的信息也是通过LiDAR收集的-因此,如果LiDAR收集了不正确的信息,我们将得到一个低质量的ZDepth。在没有激光扫描仪的设备中,ZDepth通道是通过应用于Disparity.Left和Disparity.Right通道的数学生成的。
附注:
关于你的例子中的遮挡特性:由于ZDepth通道是根据来自LiDAR扫描仪的信息生成的(但是我们可以看到,LiDAR遇到了一个10米的约束),所以总结出哪些功能是正确的,哪些是错误的是没有什么意义的。目前,场景重建特征中存在距离约束。因此,您将无法有效地使用场景重建与遮挡在10米以上的距离。
发布于 2022-11-28 19:17:18
苹果公司在iOS 16中对此进行了修复。
https://stackoverflow.com/questions/69884953
复制相似问题