Machineboy空

RealityKit SceneReconstruction, 환경 인식 관련 본문

언어/swift

RealityKit SceneReconstruction, 환경 인식 관련

안녕도라 2024. 10. 2. 12:28

오늘의 목표

RealityKit에서 기본으로 제공하는 Detection 기능들을 파헤쳐 보자.

저번에 만든 캐릭터가 환경을 인식하여 장애물을 피해서 이동하도록 만들어야 한다.


ARWorldTrackingConfiguration

  • ARView.debugOptions 활용
  • ARWorldTrackingConfiguration의 다양한 함수들 활용

작게 보이는 저 anchor들이 debugoption을 켰을 때 보이는 것들.

 

supportsSceneReconstruction(.meshWithClassification)을 활용해서 환경 인식을 실행해봤다.

 

 

iPhone 15 Pro vs iPhone 13 LiDAR 성능이 이렇게 차이난다고....?

 

import SwiftUI
import RealityKit
import ARKit

struct ContentView: View {
    var body: some View {
        ARViewContainer().edgesIgnoringSafeArea(.all)
    }
}

struct ARViewContainer: UIViewRepresentable {
    
    func makeUIView(context: Context) -> ARView {
        
        let arView = ARView(frame: .zero)
        arView.addCoaching()
        
        // Debug Options 설정
        arView.debugOptions = [.showFeaturePoints,.showSceneUnderstanding,.showWorldOrigin]
        
        let configuration = ARWorldTrackingConfiguration()
        configuration.planeDetection = .vertical
        
        // Scene Reconstruction 활성화
        if ARWorldTrackingConfiguration.supportsSceneReconstruction(.meshWithClassification) {
            configuration.sceneReconstruction = .meshWithClassification
        } else if ARWorldTrackingConfiguration.supportsSceneReconstruction(.mesh) {
            configuration.sceneReconstruction = .mesh
        }
        
        arView.session.run(configuration)
        
        
        return arView
    }
    
    func updateUIView(_ uiView: ARView, context: Context) {
    }
}



#Preview {
    ContentView()
}

ARKitSession 과 ARSession의 차이

visionOS용 ARKitSession과 iOS용 ARSession에서 제공하는게 일단 다르다.

ARKitSession의 기본 기능이 훨씬 많다. Anchor도 PlaneAnchor가 따로 있고 뭔가 더 정교하게 분석하고 기능하는 듯 하다..

 

이제 환경 인식한 정보 바탕으로 캐릭터가 장애물을 피해 움직이도록 구현해보겠다..