Unity のカメラと入力フレームデータのソース —— フレームデータソース(Frame Source)
フレームデータソースは、Unity におけるカメラおよび入力フレームデータの提供者です。このドキュメントでは、フレームデータソースの基本概念、タイプ、および実行時の選択方法について説明します。
開始する前に
- AR Session の基本概念、構成、およびワークフローを理解してください。
- カメラ、入力フレーム などの基本概念を理解してください。
フレームデータソースとは
フレームデータソース(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パッケージによって、フレームデータソースは大きく2つのカテゴリに分けられます:
- ビルトインフレームデータソース: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 |
実行時のフレームデータソース選択
セッションのシーンレイヤー構造には、1つ以上のフレームデータソースコンポーネントが含まれています。セッション実行時には、すべてのフレームデータソースコンポーネントが使用されるわけではありません。
以下のスクリーンショットは、単一のフレームデータソースコンポーネントを持つシーンレイヤー構造を示しています:
![]()
以下のスクリーンショットは、複数のフレームデータソースコンポーネントを含むシーンレイヤー構造を示しています:

各フレームデータソースの機能は異なり、それによって適切な使用シナリオやデバイスも決まります。セッションのアセンブリ時、これらのコンポーネントから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のヘッドセットサポート を参照してください。↩↩↩↩