Table of Contents

Unity의 카메라 및 입력 프레임 데이터 소스 —— 프레임 소스(Frame Source)

프레임 소스는 Unity에서 카메라 및 입력 프레임 데이터의 제공자입니다. 이 문서는 프레임 소스의 기본 개념, 유형 및 런타임 선택 방법을 소개합니다.

시작하기 전에

프레임 소스란

프레임 소스(FrameSource)는 입력 프레임(InputFrame)의 제공자로, 카메라 및 기타 입력 프레임 데이터를 제공하는 장치와 기능을 추상화합니다.

다음 다이어그램은 세션에서 프레임 소스의 위치를 보여줍니다:

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

프레임 소스는 다운스트림 AR 기능에 데이터를 제공하기만 할 수도 있고, 자체적으로 모션 추적과 같은 일부 AR 기능을 구현할 수도 있습니다. 일부 프레임 소스는 해상도, 초점 모드 등과 같은 카메라 매개변수를 선택할 수 있는 카메라 장치 제어 인터페이스를 제공합니다.

프레임 소스의 유형

프레임 소스를 제공하는 Unity 패키지에 따라 프레임 소스는 크게 두 가지로 분류됩니다:

  • 내장 프레임 소스: EasyAR Sense Unity 플러그인 패키지에서 제공하는 프레임 소스로, 일반적으로 대부분의 일반적인 사용 사례와 일부 헤드셋을 지원합니다.
  • 외부 프레임 소스: EasyAR Sense Unity 플러그인 확장 패키지에서 제공하는 프레임 소스로, 일반적으로 특정 헤드셋 장치를 지원하는 데 사용됩니다. 대부분의 경우 외부 프레임 소스는 헤드셋 제조업체 또는 타사 개발자가 제공합니다.

외부 프레임 소스와 구별하여, 사용자 정의 카메라는 반드시 외부에서 제공되는 것은 아니며, 내장 프레임 소스 중 일부도 사용자 정의 카메라입니다.

프레임 소스는 0DoF, 3DoF, 5DoF 및 6DoF와 같은 다양한 자유도의 모션 데이터를 제공할 수 있으며, 동일한 프레임 소스가 다른 작업 상태에서 다른 자유도의 모션 데이터를 제공할 수도 있습니다.

아래 표는 EasyAR에서 제공하는 프레임 소스를 나열합니다:

이름 내장 사용자 정의 카메라 모션 데이터 설명
CameraDeviceFrameSource 아니오 없음(0DoF) 일반 카메라, 전후면 카메라 및 PC 지원
EditorCameraDeviceFrameSource 아니오 없음(0DoF) 일반 카메라, 에디터에서 디버깅용으로만 사용
FramePlayer 아니오 파일 재생에 따라 EIF 파일 재생, 시뮬레이션 실행 구현
ThreeDofCameraDeviceFrameSource 아니오 3DoF 3DoF 추적 기능 제공
InertialCameraDeviceFrameSource 아니오 5DoF 관성 내비게이션 기능 제공
MotionTrackerFrameSource 아니오 6DoF EasyAR 구현 모션 추적 제공
ARCoreFrameSource 아니오 6DoF ARCore 모션 추적 제공
ARKitFrameSource 아니오 6DoF ARKit 모션 추적 제공
AREngineFrameSource 6DoF AR Engine 모션 추적 제공
VisionOSARKitFrameSource 6DoF VisionOS ARKit 모션 추적 제공 1
XREALFrameSource 6DoF XREAL 장치 모션 추적 제공 1
ARCoreARFoundationFrameSource 6DoF ARFoundation 대응 ARCore 모션 추적 제공
ARKitARFoundationFrameSource 6DoF ARFoundation 대응 ARKit 모션 추적 제공
PicoFrameSource 아니오 6DoF Pico 장치 모션 추적 제공 1
RokidFrameSource 아니오 6DoF Rokid 장치 모션 추적 제공 1

런타임 프레임 소스 선택

세션의 씬 계층 구조에는 하나 이상의 프레임 소스 컴포넌트가 포함됩니다. 세션 런타임에는 모든 프레임 소스 컴포넌트가 사용되지는 않습니다.

아래 스크린샷은 단일 프레임 소스 컴포넌트가 있는 씬 계층 구조를 보여줍니다:

alt text

아래 스크린샷은 여러 프레임 소스 컴포넌트가 포함된 씬 계층 구조를 보여줍니다:

alt text

각 프레임 데이터 소스는 기능이 다르며, 이는 동시에 그들의 적용 시나리오와 장치를 결정합니다. 세션 어셈블리 시, 이러한 컴포넌트 중 하나만을 세션의 프레임 데이터 소스로 선택합니다.

AssembleOptions.FrameSourceSelection 속성은 세션 런타임 시 프레임 데이터 소스의 선택 방법을 정의합니다:

이름 방법
Auto (기본값) 자동 선택. transform 순서대로 첫 번째 사용 가능하고 활성화된 자식 노드를 선택합니다.
Manual 수동 지정. 세션의 자식 노드만 지정할 수 있습니다.
FramePlayer FramePlayer를 사용합니다.

Unity 오브젝트의 transform 순서는 Transform.GetSiblingIndex()로 확인하거나 Hierarchy 뷰에서 오브젝트의 정렬 순서로 판단할 수 있습니다. 단, 다음 옵션을 비활성화해야 합니다(기본적으로 비활성화 상태): Edit > Preferences > General > Enable Alphanumeric Sorting.

세션 어셈블리 과정에서 프레임 데이터 소스는 다음과 같은 단계를 거쳐 선택됩니다:

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

여기서 컴포넌트 자체의 비활성화 조건은 컴포넌트 내부에서 정의되며, 일반적으로 다음과 같은 상황이 있습니다:

최종적으로 선택된 프레임 데이터 소스가 하나도 없는 경우, 세션은 Broken 상태로 진입하며, 세션 리포트의 BrokenReason 필드 값은 NoAvailabileFrameSource가 됩니다.

참고

장치 목록 업데이트가 완료된 후, 장치 목록에 변경 사항이 발생하면 프레임 데이터 소스의 가용성도 변경될 수 있습니다. 이때 세션의 동작에 대해서는 장치 지원 및 세션 리포트를 참고하십시오.

다음 단계

관련 주제


  1. 장치 지원 현황은 EasyAR의 헤드셋 지원을 참조하십시오.