Unity のカメラおよび input frame データソース -- frame source(Frame Source)
Frame source は Unity におけるカメラおよび input frame データの提供者です。この記事では、frame source の基本概念、種類、および runtime での選択方法を紹介します。
開始する前に
- AR Session の基本概念、構成、workflow を理解します。
- カメラ、input frame などの基本概念を理解します。
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 はカメラデバイスの制御 interface を提供し、ユーザーが resolution、focus mode などのカメラパラメータを選択できるようにします。
frame source の種類
frame source を提供する Unity パッケージで区別すると、frame source は大きく 2 種類に分けられます:
- Built-in frame source: EasyAR Sense Unity Plugin パッケージが提供する frame source で、通常はほとんどの一般的な使用シナリオと一部のヘッドセットをサポートします。
- External frame source: EasyAR Sense Unity Plugin extension package が提供する frame source で、通常は特定のヘッドセットデバイスをサポートするために使用されます。多くの場合、external frame source はヘッドセットメーカーまたはサードパーティ developer によって提供されます。
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 での debug 使用のみサポート |
| 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 には、1 つまたは複数の frame source コンポーネントが含まれます。session runtime 中、すべての frame source コンポーネントが使用されるわけではありません。
次の screenshot は、frame source コンポーネントが 1 つだけの scene hierarchy を示しています:
![]()
次の screenshot は、複数の frame source コンポーネントを含む scene hierarchy を示しています:

各フレームソースの機能は異なり、それによって適用できる使用シーンとデバイスも決まります。session の組み立て時には、これらのコンポーネントから 1 つだけが session のフレームソースとして選択されます。
AssembleOptions.FrameSourceSelection プロパティは、session 実行時のフレームソース選択方法を定義します。
| 名前 | 方法 |
|---|---|
| Auto(デフォルト) | transform 順で最初に利用可能かつ active な子ノードを自動選択します。 |
| Manual | 手動指定します。session の子ノードのみ指定できます。 |
| FramePlayer | FramePlayer を使用します。 |
ヒント
Unity オブジェクトの transform 順は Transform.GetSiblingIndex() で判断でき、Hierarchy ビュー内のオブジェクトの並び順からも判断できます。ただし、次のオプションをオフにする必要があります(デフォルトではオフ): Edit > Preferences > General > Enable Alphanumeric Sorting。
session の組み立て中、フレームソースは次の手順を経て選択されます。
- session はその子ノードを走査し、transform 順にすべての active なフレームソースコンポーネントを収集します。
- 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 が無効化されます。
最終的にフレームソースが 1 つも選択されなかった場合、session は Broken 状態になり、session レポート内の BrokenReason フィールドの値は NoAvailabileFrameSource になります。
注記
デバイスリストの更新完了後、デバイスリストに変更があると、フレームソースの可用性も変化する場合があります。このときの session の動作については デバイスサポートと session レポート を参照してください。
次のステップ
- scene に frame source のグループを追加する ことを試す