Table of Contents

Unity의 카메라 및 input frame 데이터 소스 -- frame source(Frame Source)

Frame source는 Unity에서 카메라 및 input frame 데이터의 제공자입니다. 이 문서에서는 frame source의 기본 개념, 유형, runtime 선택 방법을 소개합니다.

시작하기 전에

frame source란

Frame source(FrameSource)는 input frame(InputFrame)의 제공자이며, 카메라 및 input frame 데이터를 제공하는 기타 디바이스와 기능을 추상화합니다.

아래 다이어그램은 session에서 frame source의 위치를 보여줍니다:

flowchart LR
  F[Frame Source]
  A((Input Frame))
  B[Session]
  C([Camera])
  O([Origin])
  T([Target])
  F --> A
  A --> B
  B -. transform .-> C
  B -. transform .-> O
  B -. transform .-> T

  style F fill:#6e6ce6,stroke:#333,color:#fff

Frame source는 downstream AR 기능이 사용할 데이터를 제공하기만 할 수도 있고, motion tracking 같은 일부 AR 기능을 자체적으로 구현할 수도 있습니다. 일부 frame source는 카메라 디바이스의 control interface를 제공하여 사용자가 resolution, focus mode 등 카메라 파라미터를 선택할 수 있게 합니다.

frame source 유형

frame source를 제공하는 Unity 패키지에 따라 frame source는 두 가지 큰 범주로 나눌 수 있습니다:

  • Built-in frame source: EasyAR Sense Unity Plugin 패키지가 제공하는 frame source이며, 일반적으로 대부분의 일반적인 사용 시나리오와 일부 헤드셋을 지원합니다.
  • External frame source: EasyAR Sense Unity Plugin 확장 패키지가 제공하는 frame source이며, 일반적으로 특정 헤드셋 디바이스를 지원하는 데 사용됩니다. 많은 경우 external frame source는 헤드셋 제조사 또는 서드파티 개발자가 제공합니다.

external frame source와 달리 custom camera는 반드시 외부에서 제공되는 것은 아니며, built-in frame source 중 일부도 custom camera입니다.

Frame source는 0DoF, 3DoF, 5DoF, 6DoF 등 서로 다른 degrees of freedom의 motion data를 제공할 수 있습니다. 동일한 frame source도 작업 상태에 따라 서로 다른 degrees of freedom의 motion data를 제공할 수 있습니다.

다음 표는 EasyAR가 제공하는 frame source를 나열합니다:

이름 Built-in Custom camera Motion data 설명
CameraDeviceFrameSource 아니요 없음(0DoF) 일반 카메라, 전/후면 카메라와 PC 지원
EditorCameraDeviceFrameSource 아니요 없음(0DoF) 일반 카메라, editor에서 debugging 용도만 지원
FramePlayer 아니요 playback 파일에 따라 결정 EIF 파일을 재생하여 runtime simulation 구현
ThreeDofCameraDeviceFrameSource 아니요 3DoF 3DoF tracking capability 제공
InertialCameraDeviceFrameSource 아니요 5DoF inertial navigation capability 제공
MotionTrackerFrameSource 아니요 6DoF EasyAR가 구현한 motion tracking 제공
ARCoreFrameSource 아니요 6DoF ARCore의 motion tracking 제공
ARKitFrameSource 아니요 6DoF ARKit의 motion tracking 제공
AREngineFrameSource 6DoF AR Engine의 motion tracking 제공
VisionOSARKitFrameSource 6DoF VisionOS ARKit의 motion tracking 제공 1
XREALFrameSource 6DoF XREAL 디바이스의 motion tracking 제공 1
ARCoreARFoundationFrameSource 6DoF ARCore에 대응하는 ARFoundation의 motion tracking 제공
ARKitARFoundationFrameSource 6DoF ARKit에 대응하는 ARFoundation의 motion tracking 제공
PicoFrameSource 아니요 6DoF Pico 디바이스의 motion tracking 제공 1
RokidFrameSource 아니요 6DoF Rokid 디바이스의 motion tracking 제공 1
MetaXRFrameSource 아니요 6DoF Meta XR 장치의 motion tracking을 제공합니다 1

runtime frame source 선택

session의 scene hierarchy에는 하나 이상의 frame source 컴포넌트가 포함됩니다. session runtime 중에는 모든 frame source 컴포넌트가 사용되는 것은 아닙니다.

다음 screenshot은 frame source 컴포넌트가 하나뿐인 scene hierarchy를 보여줍니다:

alt text

다음 screenshot은 여러 frame source 컴포넌트를 포함하는 scene hierarchy를 보여줍니다:

alt text

각 프레임 소스는 기능이 다르며, 이에 따라 적용 가능한 사용 시나리오와 장치도 결정됩니다. session 조립 시 이러한 컴포넌트 중 하나만 session의 프레임 소스로 선택됩니다.

AssembleOptions.FrameSourceSelection 속성은 session 실행 시 프레임 소스 선택 방법을 정의합니다.

이름 방법
Auto (기본값) transform 순서에 따라 첫 번째로 사용 가능하고 active인 자식 노드를 자동 선택합니다.
Manual 수동 지정. session의 자식 노드만 지정할 수 있습니다.
FramePlayer FramePlayer를 사용합니다.

Unity 오브젝트의 transform 순서는 Transform.GetSiblingIndex()로 판단할 수 있고, Hierarchy 뷰의 오브젝트 정렬 순서로도 판단할 수 있습니다. 단, 다음 옵션을 꺼야 합니다(기본적으로 꺼져 있음): Edit > Preferences > General > Enable Alphanumeric Sorting.

session 조립 과정에서 프레임 소스는 다음 단계를 거쳐 선택됩니다.

  1. session은 자식 노드를 순회하며 transform 순서대로 모든 active 프레임 소스 컴포넌트를 수집합니다.
  2. AssembleOptions의 소스 선택 전략(AssembleOptions.FrameSource)에 따라 후보 목록을 필터링합니다.
    • Auto (기본값): 모든 후보를 유지합니다.
    • Manual: 수동으로 지정한 프레임 소스만 유지합니다.
    • FramePlayer: 후보 목록을 FramePlayer로 교체합니다.
  3. 후보 목록을 다시 필터링하여 다음 컴포넌트를 제거합니다.
    • 컴포넌트 자체에 의해 비활성화된 컴포넌트.
    • 사용자 지정 카메라가 꺼져 있을 때(AssembleOptions.EnableCustomCamera가 false) 모든 사용자 지정 카메라 컴포넌트.
  4. (Android 플랫폼) AssembleOptions.DeviceList의 timeout 설정이 0보다 크고 후보 목록에 MotionTrackerFrameSource, ARCoreFrameSource 또는 AREngineFrameSource가 포함되어 있으면, 해당 최신 장치 지원 목록 다운로드를 시도합니다. 다운로드 업데이트 후 이러한 프레임 소스의 가용성이 변경될 수 있습니다. 다운로드 완료 또는 timeout 후 다음 단계가 계속됩니다.
  5. FrameSource.CheckAvailability()를 호출하고 FrameSource.IsAvailable에 접근하여, 남은 후보 컴포넌트의 가용성을 목록 순서대로 확인합니다.
  6. 확인 결과 사용 가능한 첫 번째 프레임 소스를 선택합니다.

컴포넌트 자체의 비활성화 조건은 컴포넌트 내부에서 정의됩니다. 일반적인 경우는 다음과 같습니다.

최종적으로 어떤 프레임 소스도 선택되지 않으면 session은 Broken 상태로 들어가며, session 보고서의 BrokenReason 필드 값은 NoAvailabileFrameSource입니다.

참고

장치 목록 업데이트가 완료된 후 장치 목록이 변경되면 프레임 소스의 가용성도 변경될 수 있습니다. 이때 session의 동작은 장치 지원 및 session 보고서를 참고할 수 있습니다.

다음 단계

관련 항목


  1. 디바이스 지원 상황은 EasyAR의 헤드셋 지원을 참고하십시오.