Table of Contents

EasyAR Unity 헤드셋 확장 패키지

이 문서는 EasyAR Unity 헤드셋 확장 패키지의 개념, 능력 경계 및 헤드셋 확장 패키지를 생성하는 데 필요한 배경 지식에 대해 설명합니다.

시작하기 전에

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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Library&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]
      space
      space
      DeviceB["Device B<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Library&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]
      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년 애플은 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 라이선스만 사용 가능합니다. 개인용, 프로페셔널, 클래식 라이선스는 장치에서 작동하지 않습니다.
  • 사용자 정의 카메라 사용 시 적용되던 모든 EasyAR 라이선스 제한사항이 동일하게 장치에도 적용됩니다.

헤드셋 확장 패키지에 포함되지 않는 내용

이 확장은 EasyAR Sense 없이는 사용할 수 없습니다:

  • 이 헤드셋 확장은 독립적으로 실행되지 않으며, 종속성으로 EasyAR Sense가 필요합니다. Unity 환경에서는 반드시 EasyAR Sense Unity Plugin을 사용해야 합니다.
  • EasyAR 클라우드 서비스 API(예: EasyAR Mega 위치 서비스)를 직접 호출하지 않으며, 이러한 호출은 EasyAR Sense 내부에서 처리됩니다.
  • Unity 환경에서, AR 기능(예: 이미지 추적)의 인터페이스 메서드를 직접 호출하지 않으며, 이는 EasyAR Sense Unity Plugin 내부에서 처리됩니다.
  • Unity 환경에서, 씬(Scene) 내 오브젝트나 추적 대상(Target)의 transform을 수정하지 않으며, 이는 EasyAR Sense Unity Plugin 내부에서 처리됩니다.

이 확장은 사용 중인 기기의 SDK 없이는 사용할 수 없습니다:

  • Unity 환경에서, 헤드셋 확장이나 EasyAR Sense Unity Plugin은 씬(Scene) 내 카메라의 transform을 수정하지 않습니다. 이는 반드시 사용 중인 기기의 SDK 또는 그 종속 경로 내에서 처리되어야 합니다.

헤드셋 확장을 통해 사용할 수 없는 일부 EasyAR 기능이 있습니다:

  • 표면 추적(Surface Tracking) 기능은 사용할 수 없게 됩니다.
  • EasyAR 자체의 모션 추적(Motion Tracking)은 사용할 수 없게 됩니다.
  • 평면 감지(Plane Detection, 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를 실행하고 검증하려면 귀하나 귀하의 팀이 다음 분야의 전문가여야 합니다:

  • 귀하 장치의 물리적 구조와 렌더링 시스템
  • 카메라 시스템 기하학
  • SDK 개발
  • adb (중국 본토, 국제)와 같은 일반적인 Android 디버그 스킬

Unity에서 작업 중이라면, 다음 사항들도 알아야 합니다:

또한, 다음 분야에 대한 약간의 지식은 시스템을 더 잘 이해하는 데, 특히 EasyAR에 올바른 데이터를 전송하는 방법을 이해하는 데 도움이 될 것입니다:

  • Android 개발 (중국 본토, 국제)
  • 기하학적 컴퓨터 비전, 특히 이미지 매칭과 3D 재건

다음 단계

이어지는 글에서는 헤드셋 확장 패키지 생성의 전체 프로세스를 알아볼 것입니다:

  • 헤드셋에 EasyAR 지원 추가하기 - 템플릿을 사용하여 새로운 헤드셋 확장 패키지를 생성하고 기본 입력 확장 개발을 완료하는 방법을 소개합니다
  • 런칭 검증(bring-up) - 기기에서 입력 확장의 정확성을 검증하는 방법을 설명합니다
  • 확장 패키지 배포 - 헤드셋 확장 패키지를 패키징하여 최종 사용자에게 배포하는 방법을 안내합니다

관련 주제