ARKit - 环境遮挡
Posted
技术标签:
【中文标题】ARKit - 环境遮挡【英文标题】:ARKit – Environment Occlusion 【发布时间】:2022-01-24 06:17:53 【问题描述】:在 Unity 中,我们可以使用 Environment Depth 实现遮挡。它在幕后使用 ARKit。如何在 ios ARkit 中实现相同的行为。
我知道我们可以配置带有深度的帧语义,但我怀疑它是否真的与统一环境深度遮挡相同?
// Build the set of required frame semantics.
let semantics: ARConfiguration.FrameSemantics = [.sceneDepth]
configuration.frameSemantics = semantics
session.run(configuration)
【问题讨论】:
【参考方案1】:在 ARKit 中实现 sceneReconstruction
选项,在 RealityKit 中打开 .occlusion
。
唯一的缺点是一个丑陋的面具,在现实世界的物体周围有柔软的扩张边缘......
import RealityKit
import SwiftUI
import ARKit
struct ContentView: View
var body: some View
return ARContainer().ignoresSafeArea()
struct ARContainer: UIViewRepresentable
func makeUIView(context: Context) -> ARView
let arView = ARView(frame: .zero)
arView.cameraMode = .ar
arView.automaticallyConfigureSession = false
let config = ARWorldTrackingConfiguration()
config.sceneReconstruction = .mesh
arView.session.run(config)
arView.environment.sceneUnderstanding.options = .occlusion
let box: MeshResource = .generateBox(size: 0.5)
let material = SimpleMaterial(color: .green, isMetallic: true)
let entity = ModelEntity(mesh: box, materials: [material])
let anchor = AnchorEntity(world: [0,0,-1.5])
anchor.addChild(entity)
arView.scene.anchors.append(anchor)
return arView
func updateUIView(_ uiView: ARView, context: Context)
【讨论】:
但这只会遮挡人,不会遮挡其他物体。我也想实现对象遮挡。 谢谢@Andy,这可以用 Scenekit 实现吗? 人物遮挡——是的,物体遮挡——必须由你来实现(这并不容易)。 developer.apple.com/documentation/arkit/… 我是这样实现的 github.com/haris008/SceneKit-Occlusion以上是关于ARKit - 环境遮挡的主要内容,如果未能解决你的问题,请参考以下文章
ARKit + SceneKit:我可以访问帧的分段缓冲区但禁用自动人物遮挡吗?
为啥 iPhone XR、XS 和 XS Max 没有将环境图像应用到 ARKit 中的场景?