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 中的场景?

为什么iPhone XR,XS和XS Max不会将环境图像应用到ARKit中的场景?

iOS增强现实(ARKit)简单介绍

Threejs中的环境遮挡

Unity ARKit开发配置+升级URP