EasyAR Unity 헤드셋 확장 패키지
이 문서는 EasyAR Unity 헤드셋 확장 패키지의 개념, 기능 범위, 그리고 헤드셋 확장 패키지를 만들기 위해 필요한 배경 지식을 소개합니다.
시작하기 전에
- EasyAR가 지원하는 헤드셋 유형과 헤드셋에서 실행할 수 있는 EasyAR 기능을 이해하려면 EasyAR의 헤드셋 지원을 읽습니다.
- Unity에서 EasyAR 헤드셋 지원의 전체 아키텍처를 이해하려면 Unity에서의 EasyAR 헤드셋 지원을 읽습니다.
EasyAR Unity 헤드셋 확장 패키지란 무엇인가
EasyAR Unity 헤드셋 확장 패키지는 Unity 패키지로, 헤드셋 장치에서 EasyAR Sense 기능을 활용할 수 있도록 코드와 샘플을 한데 묶은 것입니다. 이 확장 패키지를 통해 이미지 트래킹, 밀집 공간 매핑 등 EasyAR Sense의 대부분 기능을 기기에 통합하여 EasyAR가 제공하는 강력한 AR 기능을 활용할 수 있습니다.
EasyAR Unity 헤드셋 확장 패키지를 사용하는 것은 EasyAR가 헤드셋을 지원하는 여러 방식 중 하나입니다. 아래 그림은 Unity에서의 EasyAR 전체 아키텍처와 그 안에서 헤드셋 확장 패키지가 위치하는 곳을 보여 줍니다.
block
columns 4
block:groupApp:4
block:groupAppWrapper
space
App1["EasyAR + Device A<br>App"]
space
App2["EasyAR<br>App"]
space
App3["EasyAR + Device B<br>App"]
end
end
block:groupSensePluginExtension
columns 1
SensePluginExtension["EasyAR Sense Unity Plugin<br>Extension for Device A"]
space
end
block:groupSensePlugin
columns 1
SensePlugin["EasyAR Sense Unity Plugin"]
space
end
block:groupXRI
columns 1
XRI["XR Interaction Toolkit"]
space
end
block:groupARF
columns 1
ARF["AR Foundation"]
space
end
block:groupDeviceAUnity
columns 1
DeviceAUnity["Device A<br>Unity SDK"]
space
end
block:groupSense
columns 1
Sense["EasyAR Sense"]
block:groupSenseWrapper
MDeviceB["Device B<br>CameraDevice"]
Others["..."]
end
end
block:groupXRSubsystem:2
columns 1
XRSubsystem["XR Subsystems"]
XRSDK["Unity XR SDK"]
end
block:groupSystem:4
columns 1
System["Native Library"]
block:groupSystemWrapper
space
DeviceA["Device A<br> Library "]
space
space
DeviceB["Device B<br> Library "]
space
end
end
SensePluginExtension --> App1
SensePlugin --> App1
SensePlugin --> App2
SensePlugin --> App3
ARF --> App3
XRI --> App1
XRI --> App3
groupSense --> SensePlugin
groupDeviceAUnity --> SensePluginExtension
SensePlugin --> SensePluginExtension
DeviceA --> groupDeviceAUnity
DeviceA --> XRSDK
XRSubsystem --> ARF
XRSubsystem --> XRI
DeviceB --> MDeviceB
DeviceB --> XRSDK
style groupApp fill:none,stroke:none,stroke-width:0px
style groupAppWrapper fill:none,stroke:none,stroke-width:0px
style groupSensePlugin fill:none,stroke:none,stroke-width:0px
style groupARF fill:none,stroke:none,stroke-width:0px
style groupXRI fill:none,stroke:none,stroke-width:0px
style DeviceAUnity fill:none,stroke:none,stroke-width:0px
style Sense fill:none,stroke:none,stroke-width:0px,color
style groupSenseWrapper fill:none,stroke:none,stroke-width:0px
style XRSubsystem fill:none,stroke:none,stroke-width:0px
style System fill:none,stroke:none,stroke-width:0px
style groupSystemWrapper fill:none,stroke:none,stroke-width:0px
style groupSensePluginExtension fill:none,stroke:none,stroke-width:0px
classDef EasyAR fill:#6e6ce6,stroke:#333,color:#fff
class SensePluginExtension EasyAR
그림은 헤드셋 지원의 두 가지 전형적인 방식을 보여 줍니다. Unity 헤드셋 확장 패키지를 통해 장치 SDK에 연결하는 방식(Device A)과, EasyAR Sense 라이브러리 안에서 장치 SDK에 직접 연결하는 방식(Device B)입니다. 이 문서는 주로 전자에 대해 설명합니다.
직접 나만의 헤드셋 확장 패키지를 만들 수 있나요?
현재 AR/VR/MR/XR 업계에는 매우 통일된 인터페이스 방안이 아직 없습니다. OpenXR는 좋은 후보지만, 규격의 진화와 업계 구현에는 시간이 더 필요합니다. 따라서 시중 기기에서 EasyAR를 바로 실행하는 일은 대체로 쉽지 않으며, 데이터 인터페이스가 부족할 가능성이 높습니다. 업계가 발전하면서 새로운 기기 중에는 좋은 인터페이스 지원을 제공하는 경우도 생길 수 있습니다. 예를 들어 2024년 Apple은 Vision Pro 관련 인터페이스를 공개했으며, 이 인터페이스들은 EasyAR 실행을 지원하기에 충분하지만, 사용하려면 여전히 어느 정도 전문 지식이 필요합니다.
판단이 어렵다면 하드웨어 제조사나 EasyAR 영업팀에 문의해 해당 기기 지원을 받는 것이 좋습니다.
하드웨어 제조사이고 자신의 기기에서 EasyAR 기능을 지원하고 싶다면, 다음 문서를 참고해 헤드셋 확장 패키지를 만들 수 있습니다. 이를 통해 EasyAR의 대부분 기능을 기기에서 실행할 수 있습니다. 이 문서는 데이터와 인터페이스 규격을 제공하지만 모든 구현 세부사항을 제한하지는 않습니다. 어떤 구현 방식이나 인터페이스 정의도 논의 가능하며, 영업 채널을 통해 언제든지 문의해 주세요.
이 문서가 다루는 하드웨어는 자체적으로 모션 추적 또는 SLAM 능력을 갖추고 있어야 합니다. EasyAR 기능은 좋은 기기 추적 능력 위에서 동작해야 하므로, 보통은 EasyAR 기능으로 기기 추적을 보정하려 하지 않는 것이 좋습니다. 그렇게 하면 순환 의존이 생겨 이론적으로 오차가 증폭되고 전체 시스템이 불안정해질 수 있습니다. 기기 자체에 모션 추적 능력이 없다면, 그 지원 방안은 이 문서의 범위 밖이며, 필요하면 영업 채널을 통해 논의할 수 있습니다.
헤드셋 확장 패키지의 기능 범위
헤드셋 확장 패키지의 목표는 EasyAR Sense의 대부분 기능이 기기에서 실행되도록 하는 것입니다. 이를 위해 헤드셋 확장 패키지의 기능 범위를 이해해야 합니다.
헤드셋 확장 패키지에 포함되는 내용
구현하게 될 확장은 다음과 같습니다.
- 커스텀 카메라 기능을 사용해 장치 API에서 데이터를 가져와
EasyAR Sense로 보내는 일련의 코드 - Unity에서 헤드셋 확장은 외부 프레임 데이터 소스와
EasyAR Sense Unity Plugin이 정의한EasyAR Sense데이터 흐름을 사용해 커스텀 카메라 개발을 단순화함 - Unity에서 헤드셋 확장은 Unity 패키지로, 런타임 스크립트, 에디터 스크립트, 확장 샘플을 포함하며, 사용자가 직접 또는 EasyAR가 이를 하위 사용자에게 배포할 수 있음
팁
외부 시스템에 연동 세부사항을 노출하고 싶지 않다면 EasyAR에 문의해 상의할 수 있습니다. EasyAR Sense 내부에서 C 인터페이스로 직접 연동하는 방식은 가능하며, 전례도 있습니다.
확장을 구현할 때는 다음과 같은 작업을 하게 될 수 있습니다.
- SDK의 인터페이스 설계와 내부 구현을 수정
- 팀과 함께 데이터 수집 및 사용 방안을 논의하고 확정
- 코드를 쓰는 것보다 데이터 정확성 검증에 많은 시간을 투자
확장을 완료하면 다음을 보게 됩니다.
- 대부분의
EasyAR Sense기능이 기기에서 사용 가능하며, 이는 기기의 모션 추적 능력을 활용합니다. EasyAR Sense내부에서 지원하는 EasyAR 클라우드 서비스가 기기에서 사용 가능합니다.- EasyAR XR license만 사용할 수 있습니다. 개인판, 전문판, 클래식판 license는 기기에서 사용할 수 없습니다.
- 커스텀 카메라 사용 시의 모든 EasyAR license 제한은 같은 방식으로 기기에 적용됩니다.
헤드셋 확장 패키지에 포함되지 않는 내용
이 확장은 EasyAR Sense 없이 독립적으로 사용할 수 없습니다.
- 이 헤드셋 확장은 독립적으로 실행되지 않으며, 의존성으로
EasyAR Sense가 필요합니다. Unity에서는 반드시EasyAR Sense Unity Plugin을 사용해야 합니다. - EasyAR 클라우드 서비스 API(예: EasyAR Mega 위치 서비스)를 직접 호출하지 않으며, 이런 호출은
EasyAR Sense내부에서 처리됩니다. - Unity에서 이미지 트래킹 같은 AR 기능의 인터페이스 메서드를 직접 호출하지 않으며, 이는
EasyAR Sense Unity Plugin내부에서 처리됩니다. - Unity에서 장면의 오브젝트나 추적 대상의 transform을 직접 바꾸지 않으며, 이는
EasyAR Sense Unity Plugin내부에서 처리됩니다.
이 확장은 기기 SDK 없이 사용할 수 없습니다.
- Unity에서 헤드셋 확장 또는
EasyAR Sense Unity Plugin은 장면의 카메라 transform을 바꾸지 않으며, 이는 기기 SDK 또는 그 종속 경로에서 처리해야 합니다.
헤드셋 확장으로도 아직 사용할 수 없는 EasyAR 기능이 있습니다.
- 표면 추적 기능은 사용할 수 없습니다.
- EasyAR 자체의 모션 추적은 사용할 수 없습니다.
- 평면 탐지(EasyAR 모션 추적의 일부)는 사용할 수 없습니다.
내 기기에서 Mega를 어떻게 사용하나요?
기기에서 Mega를 실행하는 것은 많은 사용자가 관심을 갖는 문제입니다. Unity에서 Mega 서비스는 EasyAR Sense의 여러 기본 기능 위에서 동작하는 기능 모듈이므로, 기기가 EasyAR Sense를 온전히 지원하면 Mega도 지원됩니다.
일반적으로 기기에서 Mega 지원을 검증하기 위해 처음부터 바로 Mega 예제를 실행하는 것은 권장하지 않습니다. Mega는 모든 입력 데이터를 종합해서 사용하며, 그 데이터에 대한 오차 허용 범위도 큽니다. Mega 예제를 바로 실행하면 데이터 인터페이스 불일치나 데이터 품질 저하 때문에 적절한 결과를 얻지 못할 가능성이 높고, 문제가 어디서 오는지도 판단하기 어려워 나중에 디버깅이 훨씬 복잡해집니다.
중요
Mega 서비스는 기기의 모션 추적 능력에 일정 수준의 요구가 있습니다. 모션 추적 능력이 좋지 않다면 Mega 성능도 영향을 받습니다. 넓은 공간 AR 장면에서는 실내외 성능 차이도 특히 주의해야 합니다.
중요
Mega는 대개 넓은 공간 장면에서 사용되므로, 멀리 있는 물체와 머리를 돌리거나 움직일 때의 물체 표시 효과를 특히 잘 살펴봐야 합니다. 기기의 디스플레이 시스템 오차가 크다면, Mega가 정상적으로 동작하더라도 사용자는 가상 물체가 현실 물체에 제대로 맞지 않는다고 느낄 수 있습니다.
필요한 배경 지식과 팀 구성
헤드셋 확장 패키지를 만드는 일은 간단한 작업이 아니며, 여러 분야에 걸친 깊은 작업이 필요합니다. 보통은 Unity 개발만으로는 부족하고, Unity 개발 외의 팀 인력도 함께 투입해야 합니다. 표준이 부족하므로 3D 엔진만 수정해서는 헤드셋 확장을 완성하기 어렵고, 첫날부터 시스템 엔지니어와 SDK 엔지니어 같은 하위 계층 개발자가 참여하는 것이 좋습니다.
AR/VR 기기를 만드는 데는 도메인 지식이 필요하듯, 기기에서 EasyAR Sense를 실행하고 검증하려면 다음 분야의 전문가가 되어야 합니다.
Unity에서 작업한다면 다음도 알아야 합니다.
- Unity 개발 기초와 package 사용법
- Unity package 개발
- IDisposable 등을 포함한 C# 기초
또한 아래 분야의 지식이 있으면 시스템을 더 잘 이해하는 데 도움이 됩니다. 특히 EasyAR에 올바른 데이터를 보내는 방법을 이해하는 데 유용합니다.
다음 단계
다음 문서들에서 헤드셋 확장 패키지를 만드는 전체 흐름을 살펴볼 수 있습니다.
- 헤드셋에 EasyAR 지원 추가하기는 템플릿을 사용해 새 헤드셋 확장 패키지를 만들고 기본 입력 확장을 완료하는 방법을 설명합니다.
- 실행 검증(bring-up)은 기기에서 입력 확장의 정확성을 검증하는 방법을 설명합니다.
- 확장 패키지 배포는 헤드셋 확장 패키지를 패키징해 하위 사용자에게 배포하는 방법을 설명합니다.