Table of Contents

Unity XR framework에 대한 EasyAR 지원

EasyAR는 AR 기능을 제공하기 위해 Unity XR framework에 의존하지 않지만, Unity에서 EasyAR의 AR 기능을 사용할 때 Unity XR framework가 제공하는 기능을 활용할 수 있도록 Unity XR framework의 일부 컴포넌트 패키지를 지원할 수 있습니다. 아래 내용은 Unity XR framework에 대한 EasyAR의 지원 상황과 어떤 경우 AR Foundation 사용을 고려할 수 있는지를 소개합니다.

Unity XR 지원

Unity는 plugin framework와 일련의 feature package 및 toolkit을 통해 XR 개발을 지원합니다. EasyAR도 이러한 Unity XR 컴포넌트 패키지를 지원하여 Unity에서 EasyAR의 AR 기능을 사용할 때 Unity XR framework가 제공하는 기능을 활용할 수 있게 합니다.

EasyAR는 다음 Unity XR 컴포넌트 패키지를 지원합니다:

표시 이름 패키지 이름 최소 지원 버전 필수 여부 용도
XR Core Utilities com.unity.xr.core-utils 2.0.0 아니요 Unity.XR.CoreUtils.XROrigin 지원 제공
AR Foundation com.unity.xr.arfoundation 5.0.0 아니요 AR Foundation 지원 제공
XR Plugin Management com.unity.xr.management 3.0.0 아니요 ARCore SDK 관리 호환성 및 runtime XR Loader 유형 획득 제공
XR Interaction Toolkit com.unity.xr.interaction.toolkit 2.0.0 아니요 직접 사용하지 않음
PolySpatial visionOS com.unity.polyspatial.visionos 2.0.41 아니요 직접 사용하지 않음
Apple visionOS XR Plugin com.unity.xr.visionos 2.0.41 아니요 직접 사용하지 않음
Apple ARKit XR Plugin com.unity.xr.arkit 5.0.0 아니요 직접 사용하지 않음
Google ARCore XR Plugin com.unity.xr.arcore 5.0.0 아니요 ARCore SDK 관리 호환성 제공
참고

EasyAR는 AR 기능을 제공하기 위해 Unity XR framework에 의존하지 않습니다. 따라서 AR Foundation 같은 Unity XR 컴포넌트의 사용 요구가 없다면 이러한 패키지를 설치하지 않아도 되며, EasyAR는 지원되는 디바이스에서 정상적으로 동작할 수 있습니다.

AR Foundation 지원

AR Foundation은 Unity가 제공하는 AR 개발 framework이며, 그 AR 기능은 하위 시스템 또는 타사 구현을 통해 제공되고 ARCore, ARKit 및 일부 headset 지원에 자주 사용됩니다.

EasyAR와 AR Foundation의 관계

block
  columns 6
  block:groupApp:6
    block:groupAppWrapper
      space
      App1["EasyAR<br>App"]
      space
      App2["EasyAR + AR Foundation<br>App"]
      space
      App3["AR Foundation<br>App"]
    end
  end
  
  block:groupSensePlugin:4
    columns 1
    SensePlugin["EasyAR Sense Unity Plugin"]
    space
  end
  block:groupARF
    columns 1
    ARF["AR Foundation"]
    space
  end
  block:groupXRI
    columns 1
    XRI["XR Interaction Toolkit"]
    space
  end
  
  block:groupAREngineInterop
    columns 1
    AREngineInterop["EasyAR<br>AR Engine Interop"]
    space
  end  
  block:groupSense:3
    columns 1
    Sense["EasyAR Sense"]
    block:groupSenseWrapper
      Image["Image<br>Tracker"]
      Object["Sparse<br>SpatialMap"]
      MotionTracker["Motion<br>Tracker"]
      MARCore["ARCore"]
      MARKit["ARKit"]
      Others["..."]
    end
  end
  block:groupXRSubsystem:2
    columns 1
    XRSubsystem["XR Subsystems"]
    XRSDK["Unity XR SDK"]
  end

  block:groupSystem:6
    columns 1
    System["System Library"]
    block:groupSystemWrapper
      space
      AREngine["AR Engine<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Library&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]
      space
      ARCore["ARCore<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Library&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"]
      space
      ARKit["ARKit<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
  
  SensePlugin --> App1
  SensePlugin --> App2
  ARF --> App2
  ARF --> App3
  groupSense --> SensePlugin
  groupAREngineInterop --> SensePlugin
  AREngine --> groupAREngineInterop
  XRSubsystem --> ARF
  XRSubsystem --> XRI
  ARCore --> MARCore
  ARKit --> MARKit
  ARCore --> XRSDK
  ARKit --> 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 AREngineInterop fill:none,stroke:none,stroke-width:0px,color:#fff
  style Sense fill:none,stroke:none,stroke-width:0px,color:#fff
  style groupSenseWrapper fill:none,stroke:none,stroke-width:0px
  style XRSubsystem fill:none,stroke:none,stroke-width:0px,color:#fff
  style System fill:none,stroke:none,stroke-width:0px
  style groupSystemWrapper fill:none,stroke:none,stroke-width:0px

  classDef EasyAR fill:#6e6ce6,stroke:#333,color:#fff
  class groupAREngineInterop EasyAR
  class groupSense EasyAR
  class SensePlugin EasyAR

  classDef Unity fill:#636,stroke:#333,color:#fff
  class groupXRSubsystem Unity
  class ARF Unity
  class XRI Unity

EasyAR와 AR Foundation은 서로 독립적인 두 AR framework이며, EasyAR는 자체 AR 기능 구현을 위해 AR Foundation에 의존하지 않습니다. EasyAR는 시스템 내 ARKit, ARCore 등의 시스템 라이브러리를 통해 motion tracking 능력을 구현할 수도 있습니다. 또한 EasyAR는 AR Foundation에 없는 두 가지 motion tracking 구현, 즉 EasyAR 자체 motion tracking 구현과 AR Engine을 통한 motion tracking 구현을 제공하여 AR Foundation보다 더 넓은 디바이스 지원을 제공합니다.

동시에 EasyAR는 AR Foundation runtime 데이터를 얻고, AR Foundation runtime이 제공하는 motion tracking 능력을 활용해 다른 AR 기능을 구동함으로써 AR Foundation 호환성을 제공합니다. 이러한 기능은 다음을 포함합니다:

  • Mega
  • Sparse spatial map
  • Dense spatial map
  • motion fusion을 사용하는 image tracking 및 object tracking

motion tracking과 EasyAR 기능의 관계를 더 자세히 이해하려면 motion tracking과 EasyAR 기능을 참고할 수 있습니다.

어떤 경우 AR Foundation을 사용해야 하는가

대부분의 경우 AR Foundation을 사용하지 않아도 되며, EasyAR는 AR Foundation이 지원하는 것보다 더 넓은 디바이스에서 정상적으로 동작합니다. 일반적으로 다음 두 가지 경우 AR Foundation 사용을 고려할 수 있습니다:

  1. EasyAR가 래핑하지 않은 ARKit 및 ARCore 기능을 사용해야 하는 경우

    필요한 ARCore 또는 ARKit 기능 중 일부가 EasyAR에 래핑되어 있지 않다면 AR Foundation을 사용할 수 있습니다. 예를 들어 AR Foundation은 ARFaceManager를 통해 ARKit face tracking을 지원하지만, EasyAR는 이 기능을 래핑하지 않았습니다.

  2. 일부 시스템 문제가 있는 Xiaomi 휴대폰에서 EasyAR 구현 motion tracking 대신 ARCore를 사용하는 경우

    ARCore를 지원하는 모든 Xiaomi 및 Redmi 휴대폰에서 ARCore를 사용해야 한다면 AR Foundation 활성화를 고려할 수 있습니다. 일부 Xiaomi 및 Redmi 휴대폰 시스템 문제로 인해 EasyAR의 ARCore 래핑은 Mi 9, Mi 10, Redmi K20, Redmi K30, Redmi K40 등 시리즈를 포함한 이러한 디바이스를 지원하지 않습니다(여기에 나열된 것은 전체가 아니며 디바이스 지원은 계속 업데이트됩니다). 이러한 휴대폰에서는 기본 설정에서 ARCore가 사용되지 않고, EasyAR motion tracking을 지원하는 휴대폰에서는 EasyAR motion tracking이 사용됩니다.

AR Foundation을 사용할 때 EasyAR 기능 효과는 최적이 아닙니다. 두 가지 경우가 있습니다:

  1. EasyAR가 직접 지원하지 않는 일부 Xiaomi 및 Redmi 휴대폰에서는 EasyAR에 입력되는 데이터가 컬러 이미지가 아니라 grayscale image이므로 일부 알고리즘 효과에 영향을 줍니다. 이는 디바이스 자체 문제이므로 설정으로 해결할 수 없습니다.
  2. Mega를 사용할 때 AR Foundation의 기본 설정은 최적이 아닙니다.
주의

AR Foundation의 ARCameraManager.currentConfiguration를 수정하여 더 나은 입력 데이터를 얻을 수 있습니다. ARCoreARFoundationFrameSource.OptimizeConfigurationForTracking를 활성화하면 최적의 ARCameraManager.currentConfiguration 선택을 자동으로 완료할 수 있습니다. 그러나 일부 휴대폰 자체(예: Mi 10)에 문제가 있어 설정 변경 후 이미지를 얻을 수 없고 EasyAR를 사용할 수 없게 될 수 있습니다(앱에는 이미지 배경이 있지만 EasyAR 기능이 아무 반응을 하지 않음). 따라서 일반적으로 활성화는 권장하지 않으며, 사용해야 한다면 EasyAR를 사용할 수 없을 때의 fallback 방안을 준비해야 합니다.

headset 지원

Unity XR framework가 충분히 완전한 데이터 interface를 제공하지 않기 때문에 EasyAR는 Unity XR framework를 통해 headset을 지원하지 않습니다.

Unity XR framework를 지원하는 headset에서 EasyAR는 XR Core Utilities를 통해 Unity.XR.CoreUtils.XROrigin 사용을 지원하지만, headset 지원 구현에는 Unity XR framework를 사용하지 않습니다. EasyAR는 XR Interaction Toolkit 기능에 영향을 주지 않으며, 디바이스가 지원한다면 정상적으로 사용할 수 있습니다.

일반적으로 headset 제조사는 이러한 데이터를 제공하기 위해 각자의 SDK 또는 시스템 interface를 제공합니다. EasyAR는 시스템 interface와 제조사 SDK를 통해 headset을 지원합니다. 때로는 이러한 SDK가 완전히 공개되어 있지 않으므로 EasyAR는 제조사와 협력해 완전한 지원을 제공합니다. Unity의 headset 지원은 EasyAR가 지원하는 headset과 사용 방법을 소개합니다.

다음 단계

관련 주제


  1. Unity 6 및 이후 버전에서는 최소 지원 버전이 2.0.4입니다. Unity 2022.3에서는 최소 지원 버전이 1.2.3이며, 1.3.x는 지원하지 않습니다.