증강 현실 개발 전에 3D 엔진 선택
AR 개발의 첫 단계는 적절한 3D 엔진을 선택하는 것입니다. 이 장에서는 3D 엔진이 필요한 이유, AR 개발에서 흔히 사용되는 3D 엔진, 그리고 각각의 장단점을 설명합니다.
AR에 3D 엔진이 필요한 이유
증강 현실은 단순히 카메라 화면 위에 2D 또는 3D 이미지를 겹쳐 놓는 것이 아니라 실시간 3D 시스템입니다. 핵심 기능에는 다음도 포함될 수 있습니다.
실제 카메라 모델링
렌더링된 가상 객체가 현실에서 더 자연스럽게 보이도록 하려면, 실제 카메라 이미지에 사용되는 매개변수, 예를 들어 내부/외부 파라미터와 왜곡 모델 등에 따라 렌더링에 사용되는 3D 엔진 내 카메라의 투영 행렬을 조정해야 합니다.
공간 좌표계 관리
기기, 환경, AR 콘텐츠 등의 위치와 자세를 통합 관리하고, 월드 좌표, 카메라 좌표, 기기 좌표 간의 선택, 설정, 변환을 담당합니다.
실시간 3D 렌더링
실시간으로 추정된 장면 깊이 또는 재구성된 mesh를 기반으로 가상 객체와 환경 사이의 사실적인 가림 효과를 구현하고, 조명 추정 알고리즘을 기반으로 그림자를 시뮬레이션하여 현실과 가상의 자연스러운 융합 효과를 구현합니다.
리소스 및 lifecycle 관리
가상 AR 리소스와 콘텐츠를 관리하며, 로드, 표시, 언로드 등의 lifecycle 관리를 포함합니다.
이러한 기능은 일반적인 3D 엔진의 핵심 책임을 구성합니다. 따라서 구체적인 프로젝트 요구 사항에 따라 적절한 3D 엔진을 선택하는 것은 AR 효과를 빠르게 구현하기 위한 필수 전제 중 하나입니다.
일반적인 3D 엔진
EasyAR는 Unity, Unreal 또는 native 개발과 같은 일반적인 3D 엔진을 포함하여 다양한 3D 엔진을 지원합니다. EasyAR는 Unity 및 Native용 샘플과 개발 문서를 제공합니다.
Unity
Unity는 범용 실시간 3D 엔진으로 자리 잡았으며 현재 대부분의 AR 개발자가 가장 먼저 선택하는 엔진입니다. Unity는 Windows/macOS 및 iOS/Android/visionOS 등의 크로스 플랫폼 개발을 네이티브로 지원합니다. Unity 생태계는 성숙하며 문서와 샘플이 완비되어 있습니다.
Native
Unity와 같은 고수준 래핑 엔진을 사용하는 것과 비교할 때, OpenGL, Vulkan, Metal과 같은 native 그래픽 API를 직접 기반으로 AR을 개발하는 장점은 다음과 같습니다. 시스템 의존성이 적고, 실행 환경을 매우 간소화할 수 있으며, 카메라 모델과 하위 알고리즘을 깊게 커스터마이즈할 수 있습니다. native API 개발은 엔지니어링 비용과 유지보수 비용이 높고, 성숙한 에디터와 디버깅 도구가 부족하며, 반복 효율이 낮고, 크로스 플랫폼 난이도가 큽니다. 제품 수준의 빠른 제공에는 불리하며 보통 간단한 기능 구현에 사용됩니다.
Web
Web은 설치가 필요 없고 브라우저 기반으로 바로 사용할 수 있어 배포와 사용자 도달 비용이 매우 낮습니다. 본질적으로 크로스 플랫폼이며 빠른 출시와 대규모 사용자 접근에 적합하고, 성숙한 frontend 생태계 덕분에 개발 진입 장벽도 비교적 낮습니다.
현재 Web은 AR 애플리케이션에서 여전히 비교적 제한적입니다. 주요 한계는 성능이 브라우저와 security sandbox의 제약을 받고, motion tracking, occlusion, 정확한 조명과 같은 AR 핵심 기능 지원이 부족하며, 기기 기능 접근이 제한되고, 안정성과 일관성을 보장하기 어렵다는 점입니다. 따라서 Web AR은 가벼운 전시와 마케팅에 적합하지만, 고정밀 및 강한 상호작용이 필요한 복잡한 AR 애플리케이션에는 적합하지 않습니다.