티스토리 뷰

iOS

ARKit ) ARSession / ARConfiguration

Zedd0202 2020. 9. 23. 18:15
반응형

 

안녕하세요 :) Zedd입니다.

오늘은 ARSession과 ARConfiguration에 대해서 공부해보겠습니다.

 

ARSession

- ARSession은 AR 경험을 제어하는데 사용하는 main object.

- ARKit이 수행하는 프로세스를 조정하여 증강 현실 경험을 만듬

(프로세스 : 하드웨어에서 데이터 읽기, 디바이스의 내장 카메라 제어, 카메라 이미지에 대한 이미지 분석수행 등..)

ARSession은 이러한 모든 결과를 합성

➞ 디바이스가 있는 실제공간과 AR컨텐츠를 모델링하는 가상 공간 간의 대응관계 설정. 

 

핵심 : 모든 AR 경험에는 ARSession이 필요함. 

 

1. 커스텀 렌더러(renderer)를 구현하는 경우 ARSession을 직접 인스턴스화.

class ViewController: UIViewController, ARSCNViewDelegate, ARSessionDelegate {
     ....
     let session = ARSession()
     session.delegate = self
 }    

이런식으로해서 사용하는 듯 하다.  ARSessionDelegate를 보면,

이런 메소드들이 있다.

뭔가 session에 ARAnchor가 추가/제거 되고, 업데이트되고..

ARFrame이 업데이트 될 때 마다 ARSessionDelegate의 메소드들이 불리는 것 같다. 

난 일단 지금은 커스텀 렌더러를 사용 할 일은 없을 듯 하다..

 

2. 커스텀 지정 렌더러가 아니고 표준 렌더러(ARView, ARSCNView, ARSKView 중 하나)를 사용하는 경우, 렌더러가 session객체를 생성한다.

Xcode에서 AR 샘플 예제를 만들 수 있다.

자세한 내용은 ARKit (1) 참고 

코드에 보면, 

// Create a session configuration
let configuration = ARWorldTrackingConfiguration()

// Run the view's session
self.sceneView.session.run(configuration)

이렇게 표준 렌더러(ARSCNView타입)의 프로퍼티로 session을 가지는 것을 볼 수 있다. 

위 코드를 보면 알겠지만, Session은 그냥 만들어서는 의미가 없고 Session을 "실행"해야한다.

// Create a session configuration
let configuration = ARWorldTrackingConfiguration()

// Run the view's session
self.sceneView.session.run(configuration)

(run으로 실행한 것을 볼 수 있음)

run메소드는 Configuration을 받는데, ARConfiguration의 하위클래스를 넣어줘야한다. 

ARConfiguration의 하위클래스로는 

ARWorldTrackingConfiguration

ARGeoTrackingConfiguration

ARBodyTrackingConfiguration

AROrientationTrackingConfiguration

ARImageTrackingConfiguration

ARFaceTrackingConfiguration

ARObjectScanningConfiguration

ARPositionalTrackingConfiguration

이런것들이 있다. 그리고 예제는 그 중 ARWorldTrackingConfiguration을 넣어준거고.

 

ARConfiguration

ARConfiguration은 저 어쩌고 Configuration의 super class이다. 

ARConfiguration() 이런식으로 인스턴스화는 못할 뿐더러 session에 직접 할당하면 안된다.

ARConfiguration을 생성하려면 위에 나열된 하위클래스들을 이용해야한다.

 

ARConfiguration은 AR 경험에서 구성할 수 있는 다양한 옵션에 대한 기본 클래스이다.

ARConfiguration에 대한 문서를 보면, 구구절절 말이 많은데, 아직 나는 이해를 못하겠어서;;;; 이건 그냥 넘어가고,

ARConfiguration을 한마디로 설명하면,

"ARKit이 실제 세계를 기준으로 디바이스의 위치와 동작을 추적하는 방법"을 결정하는 친구이다.

즉,  ARConfiguration에 따라 AR 경험의 종류가 달라진다.

// Create a session configuration
let configuration = ARWorldTrackingConfiguration()

// Run the view's session
self.sceneView.session.run(configuration)

예제에서는 ARWorldTrackingConfiguration를 사용했는데, 

ARWorldTrackingConfiguration은 디바이스의 후면 카메라를 사용하며

Tracking할 수 있는 surface(표면), 사람, 또는 이미지 및 물체를 기준으로

"디바이스의 위치와 방향을 추적"하는 configuration이다.

 

뭐 예를들어 ARFaceTrackingConfiguration를 넣는다고 치자.

이 configuration은 움직임과 표정을 포함한 얼굴을 추적하는 configuration이다. 

 

그러니까 내가 하고싶은 AR경험에 맞게 Configuration을 넣어줘야한다. 

 

// Create a session configuration
let configuration = ARWorldTrackingConfiguration()

// Run the view's session
self.sceneView.session.run(configuration)

configuration을 넣어주고 run을 하게 되면,

내가 준 configuration과 옵션(run에 옵션도 같이 줄 수 있다)을 사용하여 

Session에 대한 AR처리를 시작하게 된다. 

이 메소드는 호출되면 즉시 리턴되지만 Session은 계속 실행된다고 함. 

 

Session을 멈출 수도 있다.

self.sceneView.session.pause()

 

참고 :

developer.apple.com/documentation/arkit/arsession

 

Apple Developer Documentation

 

developer.apple.com

developer.apple.com/documentation/arkit/arconfiguration

 

Apple Developer Documentation

 

developer.apple.com

반응형