📱 AR은 어떻게 내 위치를 아는 걸까?
– AR 트래킹 원리부터 ARCore/ARKit, AR Foundation까지
AR을 처음 접하면 대부분 이렇게 생각한다.
“카메라로 세상을 보고 AI가 분석해서 위치를 아는 건가?”
절반은 맞고, 절반은 틀리다.
실제 AR의 핵심은 AI보다는 수학 + 컴퓨터 비전 + 센서 융합이다.
이 글에서는 다음 내용을 순서대로 정리한다:
- AR 트래킹의 핵심 원리 (Visual-Inertial SLAM)
- IMU(자이로/가속도)의 역할
- 자이로/가속도 기반 방식과의 차이
- ARCore / ARKit의 공통점과 차이
- AR Foundation이 이걸 어떻게 통합하는지
1️⃣ AR 트래킹의 핵심 원리: Visual-Inertial SLAM
ARCore와 ARKit은 공통적으로 다음 구조를 사용한다.
카메라 영상 + IMU → 위치 추정
이걸 전문적으로는:
👉 Visual-Inertial SLAM
(Simultaneous Localization And Mapping)
이라고 한다.
🔍 1. 카메라 영상에서 “특징점”을 찾는다
AR은 화면을 그냥 보는 게 아니라, 이런 걸 찾는다:
- 모서리
- 텍스처가 있는 부분
- 패턴 변화가 있는 점
👉 이걸 Feature Point (특징점)이라고 한다.
🔁 2. 프레임 간 특징점을 추적한다
핵심 질문:
이 점이 다음 프레임에서는 어디로 이동했는가?
수백~수천 개의 점을 동시에 추적한다.
📐 3. 카메라의 움직임을 역으로 계산한다
예를 들어:
- 모든 점이 오른쪽으로 이동했다면
👉 카메라가 왼쪽으로 움직인 것
즉,
👉 “점의 이동 = 카메라 이동의 반대”
🧭 4. IMU(자이로/가속도)로 보정한다
여기서 중요한 개념이 하나 나온다.
✔ IMU란 무엇인가?
👉 IMU (Inertial Measurement Unit)
= 관성 측정 장치
구성:
- Gyroscope (자이로) → 회전 (각속도)
- Accelerometer (가속도계) → 선형 가속도
- (일부 기기) Magnetometer → 방향 보정
✔ IMU의 역할
영상만 사용하면:
- 빠른 움직임에서 추적이 끊김
- 프레임 사이 공백 발생
- 회전 계산이 불안정
그래서 IMU를 같이 사용한다.
👉 역할 정리:
- 자이로 → 회전 안정화 (빠르고 정확함)
- 가속도 → 이동 방향 보조
- 영상 → 절대 위치 보정
👉 즉:
영상 = 정확하지만 느림
IMU = 빠르지만 틀어짐
→ 둘을 합쳐서 안정화
🗺 5. 공간을 동시에 만들어낸다
SLAM의 핵심:
- Localization (내 위치 추정)
- Mapping (공간 생성)
👉 동시에 진행됨
2️⃣ AR에서 말하는 “내 위치”란 무엇인가?
여기서 중요한 오해 하나를 짚고 가야 한다.
👉 AR에서 말하는 “내 위치”는
GPS 좌표가 아니다
✔ 정확한 의미
👉 카메라(= 기기)의 3차원 위치 + 회전 (Pose)
즉:
Position (x, y, z) + Rotation (Quaternion)
✔ 기준은 어디인가?
AR은 시작할 때 기준을 만든다.
👉 AR Session 시작 시점 = 월드 원점(0,0,0)
그래서:
- 실제 현실 좌표 ❌
- AR 내부 좌표계 ⭕
✔ 쉽게 말하면
👉 “현실 위치”가 아니라
👉 “시작 지점을 기준으로 내가 얼마나 이동했는지”
✔ 그래서 가능한 것
- 앞으로 가면 → 오브젝트 가까워짐
- 옆으로 이동 → 시점 변화
- 돌아서 보면 → 뒤쪽도 보임
👉 이게 바로 6DOF (6 Degrees of Freedom)
3️⃣ 센서 기반 AR이 한계가 있는 이유
많이 시도하는 방식:
가속도 → 속도 → 위치
이론적으로 맞지만 현실에서는 문제가 생긴다.
❗ 드리프트(Drift)
- 센서 노이즈 존재
- 적분 과정에서 오차 누적
👉 결과:
시간이 지날수록 위치가 계속 틀어짐
❗ 절대 위치를 모른다
센서는:
- 변화량만 측정
- 기준 좌표 없음
👉 그래서:
- 오브젝트를 “공간에 고정” 불가능
❗ 6DOF 구현 불완전
- 자이로 → 회전
- 가속도 → 이동
👉 따로 놀기 때문에
자연스러운 공간 이동이 안 됨
📌 핵심 차이
| 구분 | 센서 기반 | ARCore / ARKit |
| 위치 계산 | 적분 | 영상 기반 추적 |
| 오차 | 계속 누적 | 지속 보정 |
| 공간 인식 | 없음 | 있음 |
| AR 품질 | 낮음 | 높음 |
6DOF란 무엇인가?
👉 6DOF = 6 Degrees of Freedom (6자유도)
즉, 물체가 3차원 공간에서 움직일 수 있는 모든 자유도를 의미한다.
✔ 1. 위치 이동 (3 DOF)
- X축 이동 → 좌/우
- Y축 이동 → 위/아래
- Z축 이동 → 앞/뒤
✔ 2. 회전 (3 DOF)
- Pitch → 위/아래 고개 움직임
- Yaw → 좌/우 회전
- Roll → 기기 기울이기
👉 합치면:
3 (이동) + 3 (회전) = 6 DOF
✔ AR에서 6DOF가 의미하는 것
👉 단순히 화면이 움직이는 게 아니라:
- 앞으로 걸어가면 → 가까워짐
- 옆으로 이동하면 → 시점이 바뀜
- 물체를 돌아가면 → 뒤도 보임
👉 즉,
“공간 안에서 실제로 움직이는 것처럼 보이는 상태”
❗ 3DOF vs 6DOF 차이
🔹 3DOF (센서 기반)
- 회전만 가능
- 위치 이동 없음
👉 결과:
고개는 돌릴 수 있지만, 앞으로 갈 수는 없음
🔹 6DOF (ARCore / ARKit)
- 회전 + 위치 이동 모두 가능
👉 결과:
공간을 실제로 돌아다니며 관찰 가능
🔥 핵심 포인트
👉 “AR의 본질은 6DOF 구현이다”
4️⃣ ARCore vs ARKit – 원리는 같고, 구현은 다르다
✔ 공통점 (핵심)
둘 다 동일한 구조:
Visual-Inertial SLAM
✔ 차이점 (실무에서 중요)
1. 하드웨어 통제
- ARKit
- 애플 기기만 대상
- 하드웨어 완전 통제
- ARCore
- 다양한 안드로이드 기기
- 기기별 성능 편차 존재
👉 결과:
- ARKit → 더 안정적
- ARCore → 환경/기기 영향 큼
2. Depth / LiDAR
- ARKit:
- LiDAR 지원 (일부 기기)
- 깊이 정확도 높음
- ARCore:
- Depth API 존재
- 기기별 편차 큼
3. 트래킹 품질
- ARKit:
- 지터 적음
- 빠른 복구
- ARCore:
- 저사양 기기에서 흔들림 증가
5️⃣ ARCore도 완벽하지 않다 (Drift & Jitter)
ARCore / ARKit도 다음 문제가 있다:
- Drift (미세 위치 오차)
- Jitter (떨림)
- Tracking Loss (특징점 부족 시)
🔥 중요한 차이
센서 기반
오차가 계속 누적 (Unbounded)
ARCore / ARKit
오차가 생겨도 다시 보정됨 (Bounded)
👉 이 차이가 “진짜 AR”과 “가짜 AR”을 나눈다.
6️⃣ AR Foundation – Unity에서의 통합 레이어
Unity에서는 직접 ARCore / ARKit을 다루지 않는다.
👉 대신:
AR Foundation
을 사용한다.
✔ 구조
Unity AR Foundation
├─ Android → ARCore
└─ iOS → ARKit
✔ 주요 컴포넌트
- ARSession → 전체 AR 상태 관리
- ARCamera → 카메라 트래킹 (즉, “내 위치”)
- ARPlaneManager → 평면 인식
- ARRaycastManager → 터치 위치 추적
✔ 장점
- 하나의 코드로 양 플랫폼 대응
- 내부 구현 신경 안 써도 됨
✔ 단점
- 플랫폼별 세부 기능 접근 제한
- 디버깅 난이도 존재
7️⃣ 왜 단색 벽에서 AR이 안 될까?
이건 SLAM 구조 때문에 발생한다.
특징점 없음 → 추적 불가 → 위치 계산 실패
👉 그래서:
- 흰 벽 ❌
- 어두운 환경 ❌
- 텍스처 많은 공간 ⭕
8️⃣ 결론
AR 기술의 본질은 다음 한 줄로 정리된다:
👉 “카메라로 세상을 이해하는 게 아니라, 점의 움직임으로 내 위치를 계산하는 기술”
🔥 핵심 요약
- AR은 AI가 아니라 컴퓨터 비전 + 수학 기반 기술
- IMU는 자이로 + 가속도 기반의 관성 센서 묶음
- AR에서 “내 위치”는 카메라의 상대 좌표 (Pose)
- 자이로/가속도만으로는 진짜 AR 구현 불가능
- ARCore / ARKit은 Visual-Inertial SLAM 기반
- AR Foundation은 이를 Unity에서 통합하는 레이어
📌 한 줄 정리
“AR은 현실을 인식하는 기술이 아니라, 현실을 기준으로 ‘카메라의 위치를 계산하는 기술’이다”
'Unity' 카테고리의 다른 글
| Unity 함수 호출 주기 & Update 정리 (0) | 2026.05.12 |
|---|---|
| Unity DOTS 정리 (0) | 2026.05.09 |
| Unity 메모리 구조 : 왜 C# 과 C++로 나뉘었을까? (0) | 2026.05.09 |
| 안드로이드 디바이스 로그를 PC에서 보는 이유와 ADB 개념 정리 (0) | 2026.05.01 |
| 유니티 스프라이트 크기, PPU, 카메라 개념 정리 (0) | 2026.04.26 |

