티스토리 뷰
안녕하세요 :) 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의 하위클래스로는
AROrientationTrackingConfiguration
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()
참고 :
'iOS' 카테고리의 다른 글
iOS ) removingPercentEncoding (0) | 2020.09.28 |
---|---|
iOS ) HTML String을 WKWebView에 보여주기 / WKWebView높이를 contentSize로 (0) | 2020.09.26 |
iOS ) 현재 IP 주소 가져오기. (2) | 2020.09.22 |
iOS 14+ ) Select Photos 권한 작업 (2) (3) | 2020.09.20 |
iOS 14+ ) Select Photos 권한 작업 (1) (6) | 2020.09.20 |
- 스위프트 문법
- WidgetKit
- np-complete
- swift3
- Combine
- 스위프트
- 회고
- actor
- np-hard
- UIBezierPath
- WWDC
- 제이슨 파싱
- Git
- swift array
- SwiftUI
- swift delegate
- swift sort
- swift tutorial
- FLUTTER
- Swift
- Accessibility
- Xcode
- 피아노
- ios 13
- IOS
- iOS delegate
- WKWebView
- github
- fastlane
- swift 공부
- Total
- Today
- Yesterday