Unity의 카메라 및 입력 프레임 데이터 소스 —— 프레임 소스(Frame Source)
프레임 소스는 Unity에서 카메라 및 입력 프레임 데이터의 제공자입니다. 이 문서는 프레임 소스의 기본 개념, 유형 및 런타임 선택 방법을 소개합니다.
시작하기 전에
- AR 세션의 기본 개념, 구성 및 워크플로를 이해합니다.
- 카메라, 입력 프레임 등의 기본 개념을 이해합니다.
프레임 소스란
프레임 소스(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 |
런타임 프레임 소스 선택
세션의 씬 계층 구조에는 하나 이상의 프레임 소스 컴포넌트가 포함됩니다. 세션 런타임에는 모든 프레임 소스 컴포넌트가 사용되지는 않습니다.
아래 스크린샷은 단일 프레임 소스 컴포넌트가 있는 씬 계층 구조를 보여줍니다:
![]()
아래 스크린샷은 여러 프레임 소스 컴포넌트가 포함된 씬 계층 구조를 보여줍니다:

각 프레임 데이터 소스는 기능이 다르며, 이는 동시에 그들의 적용 시나리오와 장치를 결정합니다. 세션 어셈블리 시, 이러한 컴포넌트 중 하나만을 세션의 프레임 데이터 소스로 선택합니다.
AssembleOptions.FrameSourceSelection 속성은 세션 런타임 시 프레임 데이터 소스의 선택 방법을 정의합니다:
| 이름 | 방법 |
|---|---|
| Auto (기본값) | 자동 선택. transform 순서대로 첫 번째 사용 가능하고 활성화된 자식 노드를 선택합니다. |
| Manual | 수동 지정. 세션의 자식 노드만 지정할 수 있습니다. |
| FramePlayer | FramePlayer를 사용합니다. |
팁
Unity 오브젝트의 transform 순서는 Transform.GetSiblingIndex()로 확인하거나 Hierarchy 뷰에서 오브젝트의 정렬 순서로 판단할 수 있습니다. 단, 다음 옵션을 비활성화해야 합니다(기본적으로 비활성화 상태): Edit > Preferences > General > Enable Alphanumeric Sorting.
세션 어셈블리 과정에서 프레임 데이터 소스는 다음과 같은 단계를 거쳐 선택됩니다:
- 세션은 자식 노드를 순회하며 transform 순서대로 활성화된 모든 프레임 데이터 소스 컴포넌트를 수집합니다.
- AssembleOptions의 소스 선택 전략(AssembleOptions.FrameSource)에 따라 후보 목록을 필터링합니다:
- Auto (기본값): 모든 후보를 유지합니다.
- Manual: 수동으로 지정된 프레임 데이터 소스만 유지합니다.
- FramePlayer: 후보 목록을 FramePlayer로 교체합니다.
- 후보 목록을 다시 필터링하여 다음 컴포넌트를 제거합니다:
- 컴포넌트 자체에 의해 비활성화된 컴포넌트.
- 커스텀 카메라가 비활성화된 경우(AssembleOptions.EnableCustomCamera가 false) 모든 커스텀 카메라 컴포넌트.
- (Android 플랫폼) AssembleOptions.DeviceList의 타임아웃 설정이 0보다 크고, 후보 목록에 MotionTrackerFrameSource, ARCoreFrameSource 또는 AREngineFrameSource가 포함된 경우, 해당하는 최신 장치 지원 목록을 다운로드하려 시도합니다. 다운로드 및 업데이트 후, 이러한 프레임 데이터 소스의 가용성은 변경될 수 있습니다. 다운로드 완료 또는 타임아웃 후, 다음 단계를 진행합니다.
- 목록 순서대로 남은 후보 컴포넌트의 가용성을 확인합니다(FrameSource.CheckAvailability() 호출 및 FrameSource.IsAvailable 접근).
- 확인 결과 첫 번째 사용 가능한 프레임 데이터 소스를 선택합니다.
여기서 컴포넌트 자체의 비활성화 조건은 컴포넌트 내부에서 정의되며, 일반적으로 다음과 같은 상황이 있습니다:
- 지원되지 않는 시스템에서 실행되는 경우, 예: 비 Android 시스템에서 AREngineFrameSource는 비활성화됩니다.
- 필요한 타사 SDK가 설치되지 않은 경우, 예: XREAL SDK가 설치되지 않았을 때 XREALFrameSource는 비활성화됩니다.
- 구성 조건이 충족되지 않은 경우, 예: 장치의 MotionTrackerCameraDeviceQualityLevel이 MotionTrackerFrameSource.DeviceQualityLevel보다 낮을 때 MotionTrackerFrameSource는 비활성화됩니다.
최종적으로 선택된 프레임 데이터 소스가 하나도 없는 경우, 세션은 Broken 상태로 진입하며, 세션 리포트의 BrokenReason 필드 값은 NoAvailabileFrameSource가 됩니다.
참고
장치 목록 업데이트가 완료된 후, 장치 목록에 변경 사항이 발생하면 프레임 데이터 소스의 가용성도 변경될 수 있습니다. 이때 세션의 동작에 대해서는 장치 지원 및 세션 리포트를 참고하십시오.
다음 단계
- 씬에서 프레임 소스 그룹 추가 시도
관련 주제
- 장치 지원 및 세션 보고서
- EasyAR의 헤드셋 지원
- 사용자 정의 카메라를 사용하기 위해 외부 프레임 소스 생성
-
장치 지원 현황은 EasyAR의 헤드셋 지원을 참조하십시오.↩↩↩↩