ARKit 기초 요약 - 평면 검출 및 3D 객체 배치
ARKit 기초
2018년도 앞으로 1시간 만에 종료입니다.
올해는, AR의 데모 앱을 몇개 만들거나 했습니다만, AppStore에 낼 정도의 앱이 아직 개발되어 있지 않은 것이 마음 남아 있습니다.
내년이야말로, ARKit를 잘 다루고 싶습니다만, UIKit만큼 아직 친해지지 않은 느낌이 들기 때문에, 이제 ARKit의 기본적인 사용법이나 작법을 정리해 복습해 갑니다.
평면을 감지하고 3D 객체를 놓습니다.
데모에서 제일 잘 보는 평면 검출해, 3D 오브젝트를 두는 녀석.
최소한의 코드로 평면 검출 + 3D 객체 배치를 구현하려면 다음과 같은 흐름이 있습니다.
ARSCNView 설정
ViewController.swift
class ViewController: UIViewController {
@IBOutlet var sceneView: ARSCNView!
override func viewDidLoad() {
super.viewDidLoad()
// Set the view's delegate
sceneView.delegate = self
// fps情報などを表示
sceneView.showsStatistics = true
// デバッグ用に特徴点を表示
sceneView.debugOptions = ARSCNDebugOptions.showFeaturePoints
//Viewに初期化したsceneをセット
sceneView.scene = SCNScene()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Sessionの設定
let configuration = ARWorldTrackingConfiguration()
// .horizontalで水平面 (.verticalだと垂直面を検知)
configuration.planeDetection = .horizontal
//空間から光の情報を取得し画面上のライトの情報に適応
configuration.isLightEstimationEnabled = true
// sessionをスタート
sceneView.session.run(configuration)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// sessionをストップ
sceneView.session.pause()
}
3D 객체 캡처를 위한 메서드
dae 형식의 파일을 캡처
여기 3D 모델을 이용하였습니다.
Beer bottle
ViewController.swift
func load3dObject() -> SCNNode {
let url = Bundle.main.url(forResource: "3d.scnassets/bottle", withExtension: "dae")!
let sceneSource = SCNSceneSource(url: url, options: nil)!
let virtualObjectNode
= sceneSource.entryWithIdentifier("bottle", withClass: SCNNode.self)!
return virtualObjectNode
}
ARSCNViewDelegate 메서드로 배치
평면을 새롭게 검지했을 때에, 불리는 renderer(_:didAdd:for:)로 검지한 Node에 3D 오브젝트의 Node를 추가
ViewController.swift
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
node.addChildNode(load3dObject())
}
결과
섀도우나 라이트를 조정하지 않으면 별로 리얼리티가 나오지 않네요.
그리고 특징량이 적은 새하얀 바닥은 잘 검출할 수 없습니다.
앱화할 때는, 인스트럭션을 잘 만들지 않으면 유저에게 스트레스를 주어 버릴 것 같습니다.
Reference
이 문제에 관하여(ARKit 기초 요약 - 평면 검출 및 3D 객체 배치), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/developerTakata/items/8af3421a14465275a6d3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)