ARKit — iOS 네이티브 AR의 모든 것
아이폰과 아이패드를 세계에서 가장 널리 보급된 AR 디바이스로 만든 프레임워크. LiDAR·신경망·모션 센서를 하나로 묶어 "코드 몇 줄로 현실 위에 가상을 얹는" 경험을 가능케 하는 ARKit의 구조와 실전 활용을 정리한다.
ARKit이란 무엇인가
ARKit은 2017년 WWDC에서 iOS 11과 함께 공개된 Apple의 증강현실(AR) 프레임워크다. 별도의 하드웨어 없이 아이폰·아이패드의 카메라와 모션 센서만으로 현실 공간을 인식하고, 그 위에 3D 가상 객체를 정확히 배치할 수 있게 해준다. 발표 당시 "전 세계에서 가장 큰 AR 플랫폼"이라는 표현이 과장이 아니었던 이유는, 수억 대의 iOS 기기가 별도 구매 없이 즉시 AR 디바이스가 되었기 때문이다.
핵심은 VIO(Visual-Inertial Odometry)다. 카메라가 캡처하는 영상의 특징점과 IMU(가속도계·자이로스코프)의 모션 데이터를 융합해, 기기가 공간 안에서 어디에 어떤 자세로 있는지를 실시간으로 추적한다. 여기에 2020년 이후 Pro 모델에 탑재된 LiDAR 스캐너가 더해지면서 깊이 인식과 즉각적인 평면 감지 정확도가 크게 향상됐다.
ARKit은 카메라 영상과 모션 센서를 융합(VIO)해 기기의 6자유도 위치를 추적하고, 현실 공간을 이해하여 가상 콘텐츠를 정합(registration)시키는 iOS 네이티브 AR 엔진이다.
처리 파이프라인
ARKit의 동작은 크게 세 단계로 나눌 수 있다. 추적(Tracking), 장면 이해(Scene Understanding), 렌더링(Rendering)이다.
ARKit 자체는 추적과 장면 이해를 담당하고, 실제 화면에 그리는 렌더링은 RealityKit(권장), SceneKit(레거시), 또는 Metal 기반 커스텀 렌더러가 맡는다. 즉 "공간을 이해하는 두뇌"와 "화면에 그리는 손"이 분리된 구조다.
핵심 기능
RoomPlan — LiDAR 공간 스캔
iOS 16에서 도입된 RoomPlan은 ARKit 위에 구축된 고수준 API로, LiDAR 스캐너를 활용해 실내 공간의 3D 평면도를 수 초 만에 생성한다. 벽·문·창문·가구를 자동으로 인식하고, 결과를 USD / USDZ 포맷으로 내보내 다른 3D 소프트웨어로 가져갈 수 있다. 부동산 가상 투어, 인테리어 설계, 건축 측량 등 전문 분야에서 활용도가 높다.
RoomPlan과 씬 메시 생성은 LiDAR 탑재 기기(iPhone 12 Pro 이상의 Pro 라인, iPad Pro)에서만 동작한다. 일반 모델은 평면 감지·월드 트래킹은 지원하지만 정밀 깊이 메시는 제한된다.
최소 예제 — RealityKit + ARKit
SwiftUI에서 RealityKit의 ARView를 띄우고 평면 위에 박스를 배치하는 기본 흐름이다.
import SwiftUI
import RealityKit
import ARKit
struct ARContainer: UIViewRepresentable {
func makeUIView(context: Context) -> ARView {
let arView = ARView(frame: .zero)
// 월드 트래킹 + 수평 평면 감지 구성
let config = ARWorldTrackingConfiguration()
config.planeDetection = [.horizontal]
config.sceneReconstruction = .mesh // LiDAR 메시 (Pro 전용)
arView.session.run(config)
// 평면에 고정되는 앵커 + 박스 엔티티
let anchor = AnchorEntity(plane: .horizontal)
let box = ModelEntity(
mesh: .generateBox(size: 0.1),
materials: [SimpleMaterial(color: .systemBlue, isMetallic: true)]
)
anchor.addChild(box)
arView.scene.addAnchor(anchor)
return arView
}
func updateUIView(_ uiView: ARView, context: Context) {}
}
AnchorEntity(plane:)는 ARKit이 감지한 평면에 엔티티를 자동으로 부착해 준다. 사용자가 기기를 움직여도 박스는 현실의 그 자리에 그대로 머무른다.
visionOS와의 관계
ARKit은 더 이상 iOS 전용이 아니다. Apple Vision Pro의 visionOS에서도 ARKit이 공간 인식의 핵심으로 동작하며, 손 추적·평면 감지·씬 재구성을 담당한다. 다만 API 형태는 다르다. iOS의 ARKit이 카메라 패스스루 위에 합성하는 모델이라면, visionOS의 ARKit은 데이터 제공자(Data Provider) 형태로 공간 정보를 앱에 전달하고 렌더링은 RealityKit이 전담한다.
오늘 ARKit + RealityKit으로 만든 iOS AR 앱의 자산과 개념은 visionOS 공간 컴퓨팅으로 비교적 자연스럽게 확장된다. USDZ 자산, RealityKit 엔티티 구조, 앵커 개념이 두 플랫폼에서 공유되기 때문이다.
ARCore와의 비교
| 항목 | ARKit (iOS) | ARCore (Android) |
|---|---|---|
| 대상 OS | iOS / iPadOS / visionOS | Android / 일부 iOS |
| 하드웨어 일관성 | 높음 (기기 종류 제한적) | 다양 (파편화 존재) |
| 깊이 센서 | LiDAR (Pro 라인) | ToF 또는 Depth API 추정 |
| 주력 언어 | Swift | Kotlin / Java |
| 렌더링 권장 | RealityKit | SceneView / Filament |
두 플랫폼 모두를 지원해야 한다면, ARCore를 함께 보거나, 엔진 레벨에서 추상화하는 Unity AR Foundation을 검토하는 것이 일반적이다.
언제 ARKit을 선택하는가
ARKit이 최적인 경우
iOS/iPadOS 단독 타겟 LiDAR 정밀 측정 RoomPlan 공간 스캔 페이스/모션 트래킹 visionOS 확장 계획반대로 Android를 동시에 노린다면 크로스플랫폼 추상화 계층이 필요하다. 단일 코드베이스로 iOS·Android를 모두 잡으려면 AR Foundation이, 웹 배포가 목표라면 WebXR이 더 적합하다.
댓글