유니티 AR Foundation
1. 개요
1. 개요
유니티 AR Foundation은 유니티 엔진을 사용하여 증강 현실 애플리케이션을 개발하기 위한 크로스 플랫폼 프레임워크이다. 유니티 테크놀로지스가 개발한 이 프레임워크는 개발자가 iOS와 안드로이드 플랫폼에서 동작하는 AR 앱을 단일 코드베이스로 구축할 수 있도록 설계되었다. 이를 통해 각 모바일 운영 체제의 네이티브 AR 기술인 애플 ARKit과 구글 ARCore에 대한 복잡한 저수준 코드 작성을 크게 단순화한다.
AR Foundation의 핵심은 세 가지 주요 구성 요소로 이루어진다. 첫째는 AR Foundation 패키지 자체로, 모든 지원 플랫폼에 공통된 고수준 API를 제공한다. 둘째와 셋째는 각각 ARKit XR 플러그인과 ARCore XR 플러그인으로, 이들은 공통 API를 각 플랫폼의 네이티브 AR 기능에 연결하는 브리지 역할을 한다. 이러한 구조 덕분에 개발자는 하나의 스크립트로 작성된 로직이 두 플랫폼 모두에서 작동하도록 할 수 있다.
이 프레임워크는 모바일 애플리케이션 개발과 게임 개발 분야에서 AR 콘텐츠 제작을 위한 사실상의 표준 도구로 자리 잡았다. 게임, 교육, 유통, 부동산 등 다양한 산업에서 가상 객체를 실제 환경에 정교하게 배치하고 상호작용시키는 애플리케이션을 만드는 데 널리 활용되고 있다. AR Foundation을 통해 개발자는 플랫폼 간 차이를 최소화하면서도 카메라 피드, 평면 감지, 광추적, 공간 앵커 등 모바일 AR의 핵심 기능을 활용할 수 있다.
2. 핵심 구성 요소
2. 핵심 구성 요소
2.1. ARSession
2.1. ARSession
ARSession은 AR Foundation의 핵심 관리자 컴포넌트로, 증강 현실 경험의 생명주기를 총괄한다. 이 컴포넌트는 ARKit 또는 ARCore 같은 네이티브 증강 현실 플랫폼과의 연결을 설정하고 관리하는 역할을 한다. 모든 AR Foundation 기반 애플리케이션은 반드시 하나의 활성 ARSession을 필요로 하며, 이 세션은 디바이스 카메라의 입력, 모션 센서 데이터, 그리고 환경 이해 정보를 처리하는 중앙 허브이다.
ARSession의 주요 기능은 세션의 상태를 제어하는 것이다. 개발자는 ARSession을 시작, 일시 정지, 재개, 중지할 수 있으며, 이에 따라 평면 감지, 이미지 추적, 환경 조명 추정 등의 모든 AR 추적 기능이 활성화되거나 비활성화된다. 또한 세션의 구성(ARSessionConfig)을 통해 어떤 기능을 사용할지, 세계 추적의 모드는 무엇인지 등을 설정한다.
이 컴포넌트는 중요한 세션 이벤트를 발생시켜 애플리케이션에 알린다. 예를 들어, 세션이 초기화되었을 때, 추적 상태가 변경되었을 때, 또는 세션에 오류가 발생했을 때 해당 이벤트를 구독하여 적절히 대응할 수 있다. 이를 통해 사용자에게 현재 AR 상태에 대한 피드백을 제공하거나, 오류 발생 시 복구 절차를 실행하는 등의 로직을 구현할 수 있다.
ARSession은 ARPlaneManager, ARPointCloudManager 같은 다른 관리자 컴포넌트들이 작동할 수 있는 기반을 제공한다. 모든 환경 인식 데이터는 ARSession을 통해 흐르며, 이를 통해 개발자는 복잡한 네이티브 API를 직접 다루지 않고도 통일된 방식으로 크로스 플랫폼 AR 기능을 개발할 수 있다.
2.2. ARSessionOrigin / ARCameraManager
2.2. ARSessionOrigin / ARCameraManager
ARSessionOrigin은 증강 현실 환경에서 가상 콘텐츠가 배치되는 기준점을 정의하는 게임 오브젝트이다. 이 오브젝트는 ARSession이 관리하는 실제 세계의 좌표계와 유니티 게임 엔진의 가상 좌표계를 연결하는 역할을 한다. 주로 평면 감지나 앵커 배치 시 가상 객체의 부모 오브젝트로 사용되며, 사용자가 물리적 공간에서 이동해도 가상 콘텐츠가 올바른 위치에 고정되도록 한다.
ARCameraManager는 ARSession을 통해 제공되는 실제 기기 카메라의 피드와 정보를 관리하는 컴포넌트이다. 이 컴포넌트는 스마트폰이나 태블릿의 후면 카메라로부터 실시간 영상을 가져와 배경으로 렌더링하며, 동시에 기기의 위치와 방향(포즈) 정보를 지속적으로 추적한다. 이를 통해 가상 객체가 실제 카메라 화면에 정확하게 합성될 수 있는 기반을 제공한다.
ARSessionOrigin과 ARCameraManager는 밀접하게 협력하여 작동한다. 일반적으로 ARCameraManager 컴포넌트는 ARSessionOrigin 게임 오브젝트의 자식인 메인 카메라에 부착된다. 이 구조는 카메라의 움직임이 ARSessionOrigin을 기준으로 처리되도록 하여, 복잡한 좌표 변환을 단순화하고 개발자가 실제 세계에 맞는 가상 콘텐츠를 쉽게 배치하고 관리할 수 있게 돕는다.
이 두 요소는 AR Foundation 프로젝트의 필수 구성 요소로, ARKit과 ARCore 같은 네이티브 AR 플랫폼의 차이를 추상화한다. 개발자는 이들을 통해 플랫폼별 세부 구현에 신경 쓰지 않고도 핵심 AR 기능 개발에 집중할 수 있다.
2.3. ARPlaneManager
2.3. ARPlaneManager
ARPlaneManager는 AR Foundation에서 실제 환경의 평평한 표면(예: 바닥, 테이블, 벽)을 감지하고 추적하는 기능을 담당하는 핵심 컴포넌트이다. 이 컴포넌트는 ARSession이 활성화된 후, 카메라 피드를 분석하여 주변의 수평 또는 수직 평면을 식별하고, 그에 대한 정보를 실시간으로 제공한다. 개발자는 이 매니저를 게임 오브젝트에 추가하여 평면 감지 시스템을 쉽게 초기화하고 관리할 수 있다.
평면이 감지되면, ARPlaneManager는 해당 평면의 경계, 크기, 중심 위치, 방향(수평/수직) 등의 데이터를 포함하는 ARPlane 객체를 생성한다. 이 객체는 평면의 생명주기(추가, 업데이트, 제거)에 따라 이벤트를 발생시키며, 애플리케이션은 이러한 이벤트를 구독하여 가상 콘텐츠를 실제 표면에 정확하게 배치하거나 평면 정보를 시각화하는 등의 로직을 구현할 수 있다. 감지된 평면은 일반적으로 다각형의 형태로 표현된다.
이 매니저의 설정을 통해 평면 감지의 정확도, 최소 평면 크기, 감지할 평면의 유형(수평, 수직, 모두) 등을 조절할 수 있다. 또한, ARKit과 ARCore 각각의 고유 기능이나 제한 사항을 AR Foundation이 추상화하여 제공하므로, 개발자는 플랫폼별 차이를 크게 신경 쓰지 않고 일관된 API를 사용하여 평면 감지 기능을 구현할 수 있다. 이는 크로스 플랫폼 개발의 주요 장점 중 하나이다.
평면 감지는 대부분의 증강 현실 애플리케이션, 특히 가구 배치, 게임 캐릭터 소환, 교육용 콘텐츠 표시 등 가상 객체를 현실 세계에 고정시키는 데 필수적인 첫 단계이다. ARPlaneManager는 이러한 기초적이면서도 중요한 환경 이해 기능을 표준화된 방식으로 제공함으로써, 개발자가 핵심 로직과 사용자 경험 설계에 더 집중할 수 있도록 돕는다.
2.4. ARPointCloudManager
2.4. ARPointCloudManager
ARPointCloudManager는 AR Foundation에서 제공하는 컴포넌트로, 증강 현실 환경에서 카메라가 포착한 특징점들의 집합인 포인트 클라우드 데이터를 관리하고 시각화하는 역할을 한다. 이 매니저는 ARKit이나 ARCore 같은 네이티브 AR 플랫폼으로부터 제공되는 원시 3D 점 데이터를 추상화하여, 개발자가 플랫폼에 구애받지 않고 일관된 방식으로 환경의 깊이 정보와 구조를 활용할 수 있게 해준다.
이 컴포넌트는 주로 환경 이해의 초기 단계에서 활용된다. ARSession이 시작되면, 장치의 카메라는 주변 환경을 분석하여 표면의 텍스처나 모서리와 같은 시각적 특징점을 감지한다. ARPointCloudManager는 이러한 점들의 3D 위치 정보를 실시간으로 수집하여 ARPointCloud 자료형으로 제공한다. 이 데이터는 평면 감지를 위한 초기 입력으로 사용되거나, 사용자에게 환경이 스캔되고 있음을 시각적으로 피드백하는 데 사용될 수 있다.
개발 워크플로우에서 ARPointCloudManager는 일반적으로 다른 매니저와 함께 사용된다. 예를 들어, ARPlaneManager가 평면을 감지하기 전에 포인트 클라우드 데이터가 충분히 축적되어야 할 수 있다. 매니저를 게임 오브젝트에 추가하고 활성화하면, pointCloudsChanged 이벤트를 구독하여 새로운 포인트 클라우드가 업데이트될 때마다 콜백을 받을 수 있다. 이를 통해 점 데이터를 가져와 파티클 시스템 등에 연결하여 실제 공간의 특징점을 화면에 표시하는 것이 가능하다.
포인트 클라우드는 조명 조건이나 표면의 질감에 민감할 수 있으며, 지나치게 많은 점을 렌더링하면 애플리케이션 성능에 부담을 줄 수 있다. 따라서 디버깅 또는 특수한 환경 매핑 목적이 아니라면, 실제 사용자에게는 시각화하지 않고 백그라운드 데이터로만 활용하는 경우가 많다. 이는 AR Foundation이 복잡한 AR 기술을 단순화하면서도 고급 데이터에 대한 접근 경로를 제공하는 대표적인 예이다.
2.5. ARRaycastManager
2.5. ARRaycastManager
ARRaycastManager는 유니티 AR Foundation에서 가상의 광선을 쏘아 실제 환경과의 교차점을 감지하는 기능을 제공하는 핵심 구성 요소이다. 이 매니저는 사용자가 터치한 화면 위치나 특정 3차원 좌표에서 광선을 발사하여, 감지된 평면이나 메시와 같은 실제 환경의 표면 정보를 가져오는 데 사용된다. 이를 통해 사용자는 가상의 물체를 실제 공간의 정확한 위치에 배치하거나, 환경과의 상호작용을 구현할 수 있다.
ARRaycastManager의 주요 동작 방식은 ARSession이 제공하는 환경 이해 데이터를 기반으로 한다. 매니저는 ARPlaneManager로부터 감지된 평면 정보나 ARPointCloudManager의 포인트 클라우드 데이터를 활용하여 광선과의 충돌을 계산한다. 개발자는 스크린 상의 한 점을 지정하거나 월드 공간에서 광선의 원점과 방향을 정의하여 레이캐스트를 수행할 수 있으며, 성공 시 교차점의 위치, 회전, 표면 유형 등의 상세 정보를 포함한 결과를 받게 된다.
이 구성 요소는 크로스 플랫폼 인터페이스를 제공하여, 내부적으로는 iOS에서는 ARKit의 히트 테스트 기능을, 안드로이드에서는 ARCore의 유사 기능을 호출한다. 따라서 개발자는 플랫폼별 차이를 신경 쓰지 않고 동일한 코드로 두 모바일 운영 체제에서 일관된 레이캐스트 동작을 구현할 수 있다. 이는 단일 코드베이스로 멀티플랫폼 AR 애플리케이션을 개발하는 AR Foundation의 핵심 장점을 잘 보여준다.
레이캐스트는 대표적으로 가상 객체 배치, 환경 탐색, 게임 내 상호작용 등 다양한 기능의 기초가 된다. 예를 들어, 사용자가 화면을 탭하면 그 위치에서 레이캐스트를 수행하여 바닥 평면과의 충돌점을 찾고, 그 지점에 3D 모델을 생성하여 배치하는 방식이다. ARRaycastManager는 이러한 상호작용을 가능하게 하는 필수적인 도구로서, 직관적이고 정확한 AR 경험을 구축하는 데 기여한다.
2.6. ARAnchorManager
2.6. ARAnchorManager
ARAnchorManager는 AR Foundation에서 AR 앵커의 생성, 관리, 제거를 담당하는 핵심 구성 요소이다. AR 앵커는 실제 세계의 특정 지점과 위치를 추적하는 가상의 고정점으로, 이 지점에 3D 모델이나 콘텐츠를 정확하게 배치하고 시간이 지나도 그 위치를 유지할 수 있게 한다. 이 매니저는 ARSession이 관리하는 앵커 목록을 추적하며, 개발자가 앵커를 추가하거나 제거할 수 있는 인터페이스를 제공한다.
주요 기능으로는 새로운 앵커를 생성하는 AddAnchor 메서드와 기존 앵커를 제거하는 RemoveAnchor 메서드가 있다. 또한, ARPlaneManager가 감지한 평면에 자동으로 앵커를 생성하거나, ARRaycastManager를 이용해 사용자가 터치한 지점에 앵커를 배치하는 작업에 흔히 활용된다. 이렇게 생성된 앵커는 세션 동안 지속되며, ARKit과 ARCore 같은 네이티브 AR 플랫폼의 공간 추적 기술을 바탕으로 안정적인 위치 고정을 보장한다.
ARAnchorManager를 효과적으로 사용하면 가상 객체가 실제 환경에 단단히 고정된 것처럼 보이는 몰입형 증강 현실 경험을 만들 수 있다. 이는 가구 배치 시뮬레이션, 교육용 콘텐츠, 혹은 게임에서 캐릭터를 실제 공간에 배치하는 등 다양한 AR 애플리케이션 개발의 기초가 된다.
3. 지원 플랫폼 및 기능
3. 지원 플랫폼 및 기능
3.1. ARKit (iOS)
3.1. ARKit (iOS)
ARKit XR 플러그인은 유니티 엔진에서 애플의 ARKit 프레임워크 기능을 활용할 수 있도록 하는 통합 인터페이스를 제공한다. 이 플러그인은 AR Foundation 아래에 설치되며, 개발자는 이를 통해 iOS 기기에서 동작하는 증강 현실 애플리케이션을 구축할 수 있다. ARKit은 아이폰과 아이패드의 하드웨어 센서를 최대한 활용하여 높은 정확도의 환경 이해와 객체 배치를 가능하게 한다.
ARKit을 통해 지원되는 주요 기능으로는 수평 및 수직 평면 감지, 이미지 추적, 3D 객체 추적, 얼굴 추적, 사람 폐색, 환경 조명 추정 등이 있다. 또한, LiDAR 스캐너가 탑재된 최신 iOS 기기에서는 더욱 정밀한 깊이 정보와 실시간 메시 생성 기능을 활용할 수 있다. 이러한 기능들은 모두 AR Foundation의 통합 API를 통해 접근되므로, 플랫폼별 코드를 크게 분리하지 않고도 개발이 가능하다.
ARKit XR 플러그인을 사용하려면 유니티 프로젝트에 해당 패키지를 추가하고, iOS 플레이어 설정에서 적절한 권한과 백그라운드 모드를 구성해야 한다. 또한, 최신 기능을 사용하기 위해서는 특정 iOS 버전과 하드웨어 요구사항을 충족시켜야 한다. 예를 들어, 얼굴 추적 기능은 트루딥스 카메라가 장착된 기기가 필요하며, 환경 메시 생성은 LiDAR 센서가 필수적이다.
이러한 접근 방식은 개발자가 애플 생태계의 고유한 AR 강점을 활용하면서도, ARCore를 위한 안드로이드 버전과 핵심 로직을 대부분 공유할 수 있게 한다. 결과적으로 AR Foundation은 크로스 플랫폼 AR 개발의 복잡성을 줄이고, iOS와 안드로이드 양쪽 플랫폼에 고품질의 증강 현실 경험을 제공하는 데 기여한다.
3.2. ARCore (Android)
3.2. ARCore (Android)
ARCore는 구글이 개발한 안드로이드 및 iOS 플랫폼용 증강 현실 플랫폼이다. 유니티의 AR Foundation은 ARCore XR 플러그인을 통해 이 네이티브 ARCore 기능에 접근할 수 있도록 해준다. 이를 통해 개발자는 안드로이드 기기에서 구글의 핵심 AR 기술을 활용하는 애플리케이션을 만들 수 있다.
ARCore는 세계 추적, 평면 감지, 광도 추정, 공간 이해와 같은 핵심 기능을 제공한다. 세계 추적 기능은 기기의 카메라와 관성 측정 장치를 사용하여 주변 공간에 대한 이해를 바탕으로 기기의 3차원 위치와 방향을 실시간으로 추정한다. 이를 통해 가상 콘텐츠를 실제 세계에 정확하게 배치하고 고정할 수 있다.
ARCore를 사용하기 위해서는 호환되는 안드로이드 기기가 필요하다. 구글은 ARCore 지원 기기 목록을 공개하고 있으며, 일반적으로 특정 수준의 프로세서 성능과 카메라 센서를 갖춘 기기를 요구한다. 유니티 프로젝트에서 ARCore 기능을 사용하려면 패키지 매니저를 통해 ARCore XR 플러그인을 설치하고, 프로젝트 설정에서 해당 기능을 활성화해야 한다.
AR Foundation을 통한 ARCore 지원은 크로스 플랫폼 AR 개발의 핵심 이점을 실현한다. 개발자는 ARKit용 코드와 큰 차이 없이 동일한 API를 사용하여 안드로이드 애플리케이션을 개발할 수 있으며, 이는 개발 효율성을 크게 높여준다.
3.3. 기기 호환성
3.3. 기기 호환성
AR Foundation을 통한 증강 현실 애플리케이션 개발은 지원되는 하드웨어에 크게 의존한다. 프레임워크 자체는 크로스 플랫폼이지만, 실제 기능의 가용성과 성능은 사용자의 스마트폰이나 태블릿이 ARKit 또는 ARCore의 요구 사항을 얼마나 충족하는지에 따라 결정된다.
iOS 기기의 경우, ARKit을 지원하는 애플 기기가 필요하다. 일반적으로 A9 칩 이상의 프로세서를 탑재한 iPhone 6s 이후 모델과 대부분의 iPad 모델이 해당된다. iOS 11 이상의 운영체제가 설치되어 있어야 하며, 최신 기능을 활용하려면 더 높은 버전의 iOS와 신형 하드웨어가 필요할 수 있다. 예를 들어, LiDAR 스캐너를 이용한 환경 메싱 기능은 이를 탑재한 특정 iPad Pro 및 iPhone Pro 모델에서만 사용 가능하다.
안드로이드 기기의 호환성은 더 다양하고 복잡하다. 구글의 ARCore가 공식 지원 목록을 제공하며, 여기에는 삼성, 화웨이, 샤오미, 소니 등 다양한 제조사의 기기들이 포함된다. 호환성의 핵심은 ARCore가 요구하는 동작 추적, 환경 이해, 광도 추정 기능을 하드웨어와 소프트웨어가 지원하는지 여부다. 일부 기기는 ARCore를 완전히 지원하지 않거나, 특정 기능에 제한이 있을 수 있어 개발 시 테스트가 중요하다.
플랫폼 | 필수 요구사항 | 주요 호환 기기 예시 |
|---|---|---|
iOS (ARKit) | A9 칩 이상, iOS 11 이상 | iPhone 6s 이후 모델, iPad (5세대 이후), iPad Pro |
Android (ARCore) | ARCore 지원 기기, Android 7.0 (Nougat) 이상 | Google Pixel 시리즈, 삼성 갤럱시 S/노트 시리즈 (일부), 기타 ARCore 공식 목록 기기 |
개발자는 유니티 에디터의 XR 플러그인 관리 설정을 통해 대상 플랫폼을 선택하고, 실제 물리 기기에서 빌드하여 테스트하는 것이 필수적이다. AR Foundation은 기본적인 평면 감지와 이미지 추적 기능을 위해 최소한의 하드웨어 성능을 요구하지만, 얼굴 추적이나 공간 앵커와 같은 고급 기능은 더 높은 수준의 기기 호환성을 필요로 한다.
4. 개발 환경 설정
4. 개발 환경 설정
4.1. 패키지 설치
4.1. 패키지 설치
AR Foundation 패키지를 설치하기 위해서는 �우저 유니티 허브를 통해 최신 유니티 엔진을 설치해야 한다. 권장되는 엔진 버전은 AR Foundation 패키지 문서에서 확인할 수 있으며, 일반적으로 최신 LTS (Long-Term Support) 버전을 사용하는 것이 안정적이다. 프로젝트 생성 시 템플릿은 3D (컴퓨터 그래픽스)를 선택하면 된다.
설치는 유니티 패키지 관리자를 통해 이루어진다. 패키지 관리자 창에서 "Packages: Unity Registry"를 선택한 후, 검색창에 "AR Foundation"을 입력하면 해당 패키지를 찾을 수 있다. 목록에서 AR Foundation 패키지를 선택하여 "Install" 버튼을 클릭하면 핵심 프레임워크가 프로젝트에 추가된다. 이 패키지만으로는 실제 하드웨어 기능을 사용할 수 없으며, 각 플랫폼별 XR 플러그인을 추가로 설치해야 한다.
iOS용 ARKit 기기에서 개발하려면 패키지 관리자에서 "ARCore XR Plugin" 대신 "ARKit XR Plugin"을 검색하여 설치해야 한다. 반대로 안드로이드용 ARCore 기기에서는 "ARCore XR Plugin"을 설치한다. 두 플랫폼을 모두 타겟팅하는 크로스 플랫폼 개발의 경우, 두 XR 플러그인을 모두 프로젝트에 설치하는 것이 일반적이다. 패키지 설치 후에는 플레이어 설정에서 해당 플랫폼의 XR Plug-in Management를 활성화해주어야 한다.
4.2. 프로젝트 설정
4.2. 프로젝트 설정
[정보 테이블 확정 사실]에 명시된 패키지 설치 후, AR Foundation을 활용한 프로젝트를 정상적으로 실행하기 위해 필요한 설정 단계이다. 이 과정은 주로 유니티 에디터의 프로젝트 설정과 빌드 설정을 조정하는 것으로 구성된다.
가장 먼저 해야 할 일은 프로젝트의 빌드 대상을 모바일 플랫폼으로 전환하는 것이다. 유니티 에디터 상단 메뉴에서 File > Build Settings를 열어, iOS 또는 안드로이드 플랫폼을 선택하고 'Switch Platform' 버튼을 클릭한다. 안드로이드 빌드의 경우 추가로 최소 API 레벨을 ARCore가 요구하는 수준으로 설정해야 한다. 또한, 각 플랫폼에 맞는 Player Settings에서 카메라 사용 권한과 같은 필수 권한을 요청하도록 설정해야 한다.
다음으로, AR 세션이 올바르게 초기화되고 디바이스의 카메라를 사용할 수 있도록 XR 플러그인 관리 설정을 확인한다. Edit > Project Settings > XR Plug-in Management 메뉴로 들어가, 대상 플랫폼(예: iOS, 안드로이드) 탭에서 해당 XR 플러그인 (ARKit 플러그인 또는 ARCore 플러그인)을 활성화한다. 이 설정은 AR Foundation이 하드웨어와 소통할 수 있는 통로를 열어주는 역할을 한다.
마지막으로, 실제 디바이스에서 테스트하기 위한 빌드 전 준비 작업이 필요하다. iOS의 경우 애플 개발자 프로그램에 가입하고 서명용 인증서와 프로비저닝 프로파일을 설정해야 한다. 안드로이드의 경우 개발용 디바이스를 연결하고 USB 디버깅 모드를 활성화하는 것이 일반적이다. 모든 설정이 완료되면, AR 세션을 관리하는 기본 게임 오브젝트가 포함된 간단한 씬을 만들어 빌드하여 실제 기기에서 기능을 확인하는 것이 좋다.
5. 기본 개발 워크플로우
5. 기본 개발 워크플로우
5.1. 세션 관리
5.1. 세션 관리
ARSession은 AR Foundation의 핵심 관리자로서, 증강 현실 경험의 생명주기를 총괄한다. 이 객체는 AR 시스템의 상태를 제어하며, 세션의 시작, 일시 정지, 재개, 종료를 담당한다. 개발자는 ARSession을 통해 실제 세계에 대한 카메라 피드의 처리, 장치 모션 추적, 그리고 환경 이해를 위한 컴퓨터 비전 작업의 실행을 관리한다. 세션의 상태 변화는 ARSession.state 속성을 통해 확인할 수 있으며, 이는 None, Unsupported, CheckingAvailability, NeedsInstall, Installing, Ready, SessionInitializing, SessionTracking 등으로 구분된다.
세션 관리의 첫 단계는 지원 여부 확인이다. ARSession.CheckAvailability() 메서드를 비동기적으로 호출하여 해당 기기와 플랫폼이 AR 기능을 지원하는지 확인한다. 지원 가능한 상태라면 ARSession.Install()을 호출하여 필요한 AR 소프트웨어를 설치한 후, ARSession.Run() 메서드로 세션을 시작한다. Run 메서드는 호출 시 ARSession 구성(ARSessionConfig)을 인자로 받아, 평면 감지, 이미지 추적, 얼굴 추적 등 어떤 기능을 활성화할지 결정한다.
세션이 실행되는 동안, ARSession은 추적된 데이터를 여러 하위 시스템 매니저(예: ARPlaneManager, ARPointCloudManager)에 제공한다. 또한, 세션은 ARSessionOrigin (또는 ARCameraManager)과 긴밀하게 연동되어 가상 콘텐츠를 실제 세계에 정확하게 정렬하는 기준점을 제공한다. 중요한 점은 ARSession이 단일 인스턴스로 유지되어야 하며, 장면 전환 시에도 파괴되지 않도록 설계하는 것이 일반적인 워크플로우라는 것이다.
세션 관리에는 오류 처리도 포함된다. ARSession은 추적 상태가 저하되거나 세션에 오류가 발생했을 때 이벤트를 발생시킨다. 개발자는 ARSession.stateChanged 이벤트나 ARSession.errorOccurred 이벤트를 구독하여 이러한 상황에 대응하는 로직을 구현해야 한다. 예를 들어, 사용자가 카메라를 가렸거나 주변 환경이 너무 어두울 때 추적이 불안정해질 수 있으며, 이러한 경우 사용자에게 안내 메시지를 표시하거나 세션을 재시작하는 등의 조치를 취할 수 있다.
5.2. 평면 감지 및 배치
5.2. 평면 감지 및 배치
평면 감지 및 배치는 유니티 AR Foundation을 사용한 증강 현실 애플리케이션 개발에서 가장 기본적이고 필수적인 워크플로우 중 하나이다. 이 과정은 실제 환경의 표면(예: 바닥, 책상, 벽)을 인식하여 가상 객체를 안정적으로 배치할 수 있는 기반을 마련한다. ARPlaneManager 컴포넌트가 이 기능의 핵심을 담당하며, ARKit과 ARCore 같은 네이티브 AR SDK가 제공하는 환경 이해 기능을 추상화하여 개발자에게 일관된 인터페이스를 제공한다.
평면 감지가 활성화되면, 기기의 카메라와 관성 측정 장치(IMU) 데이터를 분석하여 주변의 수평면(바닥, 테이블)과 수직면(벽)을 실시간으로 탐지한다. 감지된 평면은 경계점(Polygon) 정보와 함께 ARSession에 의해 ARPlane 객체로 생성되며, 이 객체는 위치, 회전, 크기, 분류(수평/수직) 등의 정보를 포함한다. 개발자는 이 정보를 바탕으로 사용자에게 시각적 피드백(예: 반투명 평면 메시)을 제공할 수 있다.
감지된 평면 위에 가상 콘텐츠를 배치하기 위해서는 ARRaycastManager를 활용한 레이캐스팅이 일반적으로 사용된다. 사용자가 화면을 터치하면, 해당 화면 좌표에서 출발하는 광선(Ray)을 생성하여 ARPlane과의 교차점을 계산한다. 이를 통해 가상 객체가 실제 표면에 정확히 부착된 것처럼 배치될 수 있다. 더욱 견고한 배치를 원할 경우, 해당 지점에 ARAnchor를 생성하여 가상 객체를 앵커에 부착시키는 방법을 사용한다. 이는 ARSession이 공간을 재추정하더라도 객체의 위치를 상대적으로 유지시켜 준다.
단계 | 사용 컴포넌트/매니저 | 주요 동작 |
|---|---|---|
평면 탐지 활성화 | ARPlaneManager | 평면 감지 기능을 켜고, 감지된 평면의 프리팹을 설정한다. |
평면 정보 수신 | ARPlaneManager 이벤트 | 평면이 추가, 업데이트, 제거될 때 콜백을 받아 처리한다. |
배치 지점 결정 | ARRaycastManager | 화면 터치 지점에서 레이캐스트를 수행해 평면과의 충돌점을 찾는다. |
객체 고정 | ARAnchorManager | 레이캐스트 결과 지점에 앵커를 생성하고, 가상 객체를 그 자식으로 배치한다. |
이러한 워크플로우는 가구 배치, 게임 캐릭터 소환, 교육용 모델 표시 등 다양한 AR 애플리케이션의 기초가 된다. 성능과 사용자 경험을 위해, 불필요한 평면 감지는 비활성화하고, 충분히 큰 평면만 필터링하며, 시각적 피드백을 명확하게 제공하는 것이 좋다.
5.3. 이미지/객체 추적
5.3. 이미지/객체 추적
AR Foundation은 이미지 추적과 객체 추적 기능을 통해 실제 세계의 특정 시각적 요소를 인식하고 디지털 콘텐츠를 정확하게 배치할 수 있게 한다. 이 기능들은 ARKit와 ARCore의 네이티브 능력을 추상화하여 제공하며, 개발자는 플랫폼 간 차이를 크게 신경 쓰지 않고도 구현할 수 있다.
이미지 추적은 미리 정의된 2D 이미지(예: 포스터, 제품 패키지, 책 표지)를 카메라 화면에서 감지하고 추적하는 데 사용된다. 개발자는 AR Tracked Image Manager 컴포넌트를 활용하여 참조 이미지 라이브러리를 설정하고, 특정 이미지가 감지되면 가상의 3D 모델이나 정보를 그 위에 표시하는 AR 앱을 만들 수 있다. 이는 박물관 전시 안내, 제품 설명서, 인터랙티브 마케팅 등에 활용된다.
객체 추적은 실제 3D 물체의 형태를 인식하고 추적하는 기능이다. AR Tracked Object Manager를 사용하며, 사전에 3D 스캔된 객체의 데이터베이스가 필요하다. 예를 들어, 특정 장난감이나 제품 모델을 카메라에 비추면 해당 객체 위에 애니메이션이나 추가 정보를 중첩하여 보여줄 수 있다. 이 기술은 교육, 유통, 제조 현장에서 복잡한 장비의 가상 메뉴얼을 제공하는 데 유용하게 쓰인다.
두 추적 방식 모두 AR 세션이 실행되는 동안 실시간으로 작동하며, 감지된 이미지나 객체의 위치, 회전, 크기 정보를 지속적으로 제공한다. 이를 통해 배치된 가상 콘텐츠는 실제 객체와 함께 자연스럽게 움직이도록 고정될 수 있다. 성공적인 추적을 위해서는 적절한 조명 조건과 충분한 텍스처 디테일을 가진 참조 데이터가 중요하다.
6. 고급 기능 및 확장
6. 고급 기능 및 확장
6.1. 얼굴 추적
6.1. 얼굴 추적
얼굴 추적은 AR Foundation이 제공하는 고급 기능 중 하나로, 사용자의 얼굴을 실시간으로 감지하고 추적하여 디지털 콘텐츠를 얼굴에 정확하게 오버레이할 수 있게 한다. 이 기능은 주로 ARKit의 ARFaceTrackingConfiguration과 ARCore의 Augmented Faces API를 백엔드로 활용하며, 개발자는 AR Foundation의 통합 API를 통해 두 플랫폼을 위한 얼굴 추적 애플리케이션을 일관되게 개발할 수 있다.
얼굴 추적을 구현하기 위해서는 프로젝트에 AR Face Tracking 패키지를 추가하고, ARSession을 관리하는 오브젝트에 ARFaceManager 컴포넌트를 부착해야 한다. 이 매니저는 카메라 피드에서 얼굴을 감지하면 ARFace라는 트랙커블을 생성하며, 여기에는 얼굴의 메시, 랜드마크, 표정 블렌드 셰이프 등의 데이터가 포함된다. 개발자는 이 데이터를 활용하여 가상 마스크, 필터, 아바타 또는 특수 메이크업 효과를 사용자의 얼굴에 자연스럽게 적용할 수 있다.
지원 플랫폼 | 주요 기능 | 비고 |
|---|---|---|
iOS (ARKit) | 얼굴 메시, 표정 추적(52개 블렌드 셰이프), 눈 감김 추적, tongueOut 감지 | TrueDepth 카메라가 장착된 기기 필요 |
Android (ARCore) | 얼굴 중심부 메시, 표정 추적, 머리 포즈 추적 | Augmented Faces API 지원 기기 필요 |
이 기술은 엔터테인먼트 앱, 가상 시착 서비스, 화상 통화 보조 기능, 접근성을 위한 수어 번역 애플리케이션 등 다양한 분야에 활용된다. 성능을 최적화하기 위해서는 불필요한 얼굴 메시의 정점 수를 줄이거나, 추적이 필요하지 않을 때는 ARFaceManager를 비활성화하는 등의 방법을 고려할 수 있다.
6.2. 몸 추적 (Body Tracking)
6.2. 몸 추적 (Body Tracking)
몸 추적은 AR Foundation이 제공하는 고급 기능 중 하나로, 스마트폰의 카메라를 통해 사용자의 신체 동작과 자세를 실시간으로 인식하고 추적하는 기술이다. 이 기능은 주로 ARKit의 ARKit 3 이상과 ARCore의 특정 버전에서 지원되며, 유니티 엔진 내에서 AR Foundation을 통해 통합된 방식으로 접근할 수 있다. 몸 추적을 사용하면 애플리케이션에서 사용자의 신체 골격 정보를 얻을 수 있어, 가상 캐릭터가 사용자의 동작을 따라 하거나, 피트니스 애플리케이션에서 자세를 분석하는 등 다양한 인터랙티브 경험을 구현하는 데 활용된다.
몸 추적 기능의 핵심은 ARSession과 ARHumanBodyManager 컴포넌트를 통해 관리된다. 개발자는 ARHumanBodyManager를 ARSessionOrigin에 추가하여 기능을 활성화할 수 있다. 이 매니저는 카메라 피드에서 인체를 감지하면, 주요 관절의 2D 또는 3D 위치를 나타내는 ARHumanBody 객체를 생성한다. 이 데이터는 신체의 골격 구조를 정의하는 일련의 ARHumanBodyJoint로 구성되어, 개발자가 특정 관절의 위치와 회전 정보를 쿼리할 수 있게 한다.
몸 추적의 구현은 플랫폼에 따라 차이가 있다. iOS의 ARKit는 2D 바디 트래킹과 함께 3D 신체 골격 추적을 제공하는 반면, ARCore는 초기에는 제한적인 2D 포즈 추적을 지원했으나, 버전 업데이트를 통해 기능이 확장되었다. 따라서 개발 시 목표 플랫폼의 지원 여부와 성능을 확인하는 것이 중요하다. 이 기능은 게임, 엔터테인먼트, 원격 협업 도구, 의료 재활 애플리케이션 등 폭넓은 분야에 적용 가능하다.
성능과 정확도를 보장하기 위해 몸 추적 애플리케이션은 적절한 조명 조건과 사용자가 카메라 전체에 걸쳐 잘 보이는 환경에서 사용되도록 설계해야 한다. 또한, 실시간으로 다수의 관절 데이터를 처리해야 하므로, CPU와 GPU 사용량을 모니터링하고 최적화하는 것이 사용자 경험에 직접적인 영향을 미친다. AR Foundation의 크로스 플랫폼 추상화 계층은 이러한 플랫폼별 차이를 최대한 감추려 하지만, 각 네이티브 SDK의 고유한 제약과 능력을 이해하는 것이 효과적인 개발에 도움이 된다.
6.3. 환경 탐색 (Meshing)
6.3. 환경 탐색 (Meshing)
환경 탐색은 AR Foundation의 고급 기능 중 하나로, 실제 환경의 표면을 3D 메시 형태로 실시간으로 재구성하는 과정을 의미한다. 이 기능은 ARKit의 ARKit Meshing과 ARCore의 환경 이해 기능을 기반으로 하여, 복잡한 공간에 가상 객체를 더욱 정교하게 배치하거나 물리적 상호작용을 구현하는 데 활용된다. 이를 통해 사용자의 주변 환경이 단순한 평면이 아닌, 벽, 천장, 가구와 같은 다양한 기하학적 구조를 가진 것으로 인식되어 콘텐츠의 현실감을 크게 높일 수 있다.
환경 탐색 기능은 주로 ARMeshManager 컴포넌트를 통해 제어된다. 이 컴포넌트를 ARSessionOrigin에 추가하면, 카메라가 주변을 스캔하면서 생성된 삼각형 메시 데이터를 실시간으로 제공받을 수 있다. 제공되는 메시 데이터에는 정점 위치, 법선 벡터, 그리고 텍스처 정보가 포함될 수 있으며, 개발자는 이를 활용하여 가상 객체가 실제 환경의 곡면이나 구석에 자연스럽게 배치되도록 하거나, 조명 효과를 일치시킬 수 있다.
이 기능의 적용 사례로는 가상 가구를 방의 구체적인 모양에 맞춰 배치하거나, 실제 환경의 지형을 따라 움직이는 게임 캐릭터를 구현하는 것 등을 들 수 있다. 그러나 환경 탐색은 처리해야 할 데이터 양이 많고 복잡한 연산을 필요로 하므로, 성능에 주의를 기울여야 한다. 고품질 메시 생성은 CPU와 GPU 사용량을 크게 증가시킬 수 있으며, 특히 저사양 모바일 장치에서는 성능 저하를 유발할 수 있다. 따라서 프로젝트 요구사항에 따라 메시의 해상도나 업데이트 빈도를 조절하는 최적화 작업이 필수적이다.
6.4. 공간 앵커 (Cloud Anchors)
6.4. 공간 앵커 (Cloud Anchors)
공간 앵커는 여러 사용자가 동일한 물리적 공간에서 동일한 가상 콘텐츠를 공유하고 상호작용할 수 있도록 하는 기능이다. 이 기술은 클라우드 컴퓨팅 서버를 활용하여 앵커의 위치와 방향 정보를 저장하고 동기화한다. 이를 통해 한 사용자가 특정 위치에 가상 객체를 배치하면, 다른 사용자의 기기에서도 동일한 위치에 그 객체가 정확하게 나타나게 되어 협업 게임이나 공유형 증강 현실 경험을 구현하는 데 필수적이다.
공간 앵커의 구현은 주로 ARKit의 ARWorldMap 또는 ARCore의 Cloud Anchors API를 기반으로 한다. AR Foundation은 이러한 플랫폼별 기능을 추상화하여 ARAnchorManager 컴포넌트와 관련 API를 통해 통합된 방식으로 제공한다. 개발자는 앵커를 생성하고, 클라우드에 업로드하며, 고유 ID를 통해 다른 기기에서 해당 앵커를 다운로드하고 해석하는 워크플로우를 코드로 작성할 수 있다.
이 기능을 사용하려면 네트워크 연결이 필수이며, 각 플랫폼 제공사(애플, 구글)의 서버 인프라와 연동된다. 따라서 애플리케이션의 개인정보 보호 정책 및 데이터 보안 측면을 고려해야 한다. 또한, 공간 앵커의 정확도는 주변 환경의 특징점, 조명 조건, 기기의 센서 정밀도에 크게 의존하므로 안정적인 사용자 경험을 위해서는 충분한 테스트가 필요하다.
7. 성능 최적화
7. 성능 최적화
성능 최적화는 유니티 AR Foundation을 사용한 증강 현실 애플리케이션 개발에서 사용자 경험과 배터리 수명을 보장하기 위한 핵심 과제이다. ARCore와 ARKit 같은 네이티브 AR 플랫폼은 실시간 카메라 피드 처리, 환경 이해, 렌더링 등 많은 연산을 수행하므로, 애플리케이션의 나머지 부분은 최대한 효율적으로 설계되어야 한다.
주요 최적화 전략은 렌더링 파이프라인 관리에 있다. AR 카메라는 일반 카메라보다 더 높은 프레임 레이트로 동작할 수 있으므로, 불필요한 그래픽 효과를 줄이고 드로우 콜을 최소화하는 것이 중요하다. LOD 시스템을 활용해 카메라에서 멀리 떨어진 객체의 폴리곤 수를 줄이고, 오클루전 컬링을 적극 사용하여 보이지 않는 객체의 렌더링을 생략해야 한다. 셰이더는 모바일 플랫폼에 최적화된 간단한 버전을 사용하는 것이 좋다.
CPU 사용량을 줄이기 위해 AR 세션의 기능을 필요한 만큼만 활성화해야 한다. 예를 들어, 애플리케이션이 평면 감지만 필요하다면 ARPointCloudManager나 이미지 추적 기능은 비활성화하는 것이 효율적이다. 물리 시뮬레이션과 복잡한 스크립트 로직의 업데이트 빈도를 낮추고, 가비지 컬렉션에 의한 프레임 드롭을 방지하기 위해 객체 풀링을 활용하는 것도 효과적이다. 최종적으로는 프로파일러 도구를 사용해 CPU와 GPU, 메모리 사용량을 지속적으로 모니터링하고 병목 현상을 해결해야 한다.
8. 문제 해결
8. 문제 해결
유니티 AR Foundation을 사용한 증강 현실 애플리케이션 개발 과정에서 흔히 발생하는 문제와 해결 방법을 다룬다. 주요 문제는 플랫폼별 지원 기능의 차이, 세션 초기화 실패, 트래킹 불안정, 빌드 오류 등으로 구분된다.
가장 기본적인 문제는 ARSession이 ARSessionState.None 또는 ARSessionState.CheckingAvailability 상태에서 진행되지 않는 경우다. 이는 ARCore 또는 ARKit 지원 여부 확인 단계에서 발생하며, 실제 기기에서 테스트하거나 에뮬레이터 설정을 확인해야 한다. 또한 AndroidManifest나 Info.plist 파일에 필요한 권한과 AR 필수 항목이 누락되면 세션이 정상적으로 시작되지 않는다. 개발자는 유니티 콘솔 로그와 기기 로그(logcat 또는 Xcode 콘솔)를 통해 구체적인 오류 메시지를 확인해야 한다.
트래킹 관련 문제는 주로 환경적 요인에 의해 발생한다. 평면 감지가 되지 않거나 ARAnchor가 자주 사라지는 경우, 조명이 부족하거나 반복적인 텍스처가 없는 공간에서 테스트했는지 확인한다. ARPlaneManager의 설정, 특히 탐지할 평면의 최소 면적과 탐지 빈도가 적절한지 점검하는 것이 좋다. iOS와 안드로이드 간에 동일한 코드임에도 평면 감지 성능이 다르게 나타난다면, 각 XR 플러그인의 고유한 한계나 최적화 방법을 공식 문서에서 참조해야 한다.
빌드 및 배포 단계에서는 패키지 버전 불일치로 인한 오류가 빈번하다. AR Foundation 패키지와 ARCore XR Plugin, ARKit XR Plugin의 버전이 호환되는 조합인지 유니티 패키지 매니저를 통해 확인한다. 특히 안드로이드 빌드 시 Minimum API Level이 너무 낮거나, Gradle 빌드 설정이 잘못된 경우 네이티브 라이브러리 로드에 실패할 수 있다. 복잡한 문제의 경우, 유니티 포럼이나 공식 문서의 문제 해결 가이드를 참고하여 단계별 접근법을 적용하는 것이 효과적이다.
