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 はカメラデバイスの制御 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 を示しています:

alt text

次の screenshot は、複数の frame source コンポーネントを含む scene hierarchy を示しています:

alt text

各フレームソースの機能は異なり、それによって適用できる使用シーンとデバイスも決まります。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 の組み立て中、フレームソースは次の手順を経て選択されます。

  1. session はその子ノードを走査し、transform 順にすべての active なフレームソースコンポーネントを収集します。
  2. AssembleOptions 内のソース選択戦略(AssembleOptions.FrameSource)に基づいて候補リストをフィルタリングします。
    • Auto(デフォルト): すべての候補を保持します。
    • Manual: 手動指定されたフレームソースのみ保持します。
    • FramePlayer: 候補リストを FramePlayer に置き換えます。
  3. 候補リストを再度フィルタリングし、次のコンポーネントを除外します。
    • コンポーネント自身によって無効化されたコンポーネント。
    • カスタムカメラが無効(AssembleOptions.EnableCustomCamera が false)な場合のすべてのカスタムカメラコンポーネント。
  4. (Android プラットフォーム)AssembleOptions.DeviceList のタイムアウト設定が 0 より大きく、候補リストに MotionTrackerFrameSourceARCoreFrameSource、または AREngineFrameSource が含まれる場合、対応する最新のデバイスサポートリストのダウンロードを試みます。ダウンロード更新後、これらのフレームソースの可用性が変わる場合があります。ダウンロード完了またはタイムアウト後、後続の手順を続行します。
  5. 残りの候補コンポーネントの可用性をリスト順に確認します(FrameSource.CheckAvailability() を呼び出し、FrameSource.IsAvailable にアクセスします)。
  6. チェック結果が利用可能な最初のフレームソースを選択します。

コンポーネント自身の無効化条件はコンポーネント内部で定義されます。一般的な例は次のとおりです。

最終的にフレームソースが 1 つも選択されなかった場合、session は Broken 状態になり、session レポート内の BrokenReason フィールドの値は NoAvailabileFrameSource になります。

注記

デバイスリストの更新完了後、デバイスリストに変更があると、フレームソースの可用性も変化する場合があります。このときの session の動作については デバイスサポートと session レポート を参照してください。

次のステップ

関連トピック


  1. デバイスサポート状況については、EasyAR のヘッドセットサポート を参照してください。