Table of Contents

Unity ar のエントリーポイント —— ar session

AR セッション(session)はすべての AR 機能のエントリーポイントです。以下の内容を通じて、AR Session の基本概念、構成、実行フロー、そしてそれが Unity AR Foundation の AR Session とどのような関係にあるのかを理解します。また、Unity において、EasyAR Sense のデータフローが実際にどのように機能するのかについても知ることができます。

Ar session とは

全ての AR プロセス(例:物体追跡)はネイティブライブラリ、つまり EasyAR Sense 内部で実行されます。session は Unity における AR 機能の主要なエントリーポイントです。物理カメラやセンサーからのデータ読み取り、現実世界の分析、シーン内の仮想カメラやその他のオブジェクトの移動・レンダリングの制御など、AR システムの動作プロセスと状態を管理します。

flowchart LR
  A((画像<br>その他データ))
  B[Session]
  C([Camera])
  O([Origin])
  T([Target])
  A --> B
  B -. transform .-> C
  B -. transform .-> O
  B -. transform .-> T

[オプション] EasyAR の session と AR Foundation の session

EasyAR の session は Unity で EasyAR を使用する際のコアコンポーネントであり、サードパーティやシステムの AR 機能に依存せず独立して動作します。一方、AR Foundation の session は Unity XR フレームワークの一部であり、Unity XR プラグイン(ARKit や ARCore など)が提供する機能のみを使用できます。

flowchart TD
  A1[EasyAR<br>AR Session]
  A2[EasyAR Sense]
  A1 --> A2

  B1[AR Foundation<br>AR Session]
  B2[ARKit Plugin]
  B3[ARCore Plugin]
  B1 --> B2
  B1 --> B3

EasyAR を使用する場合、通常は AR Foundation を同時にインストールして使用する必要はありません。画像トラッキング機能やモーション・トラッキング機能などは、すべて EasyAR Sense によって独立して提供されます。

特定の場合、AR Foundation が提供する追加機能(一部デバイスでの平面検出など)やインターフェースを活用するために、EasyAR Sense と AR Foundation を併用する必要があるかもしれません。この場合、EasyAR Sense は AR Foundation が提供するインターフェースを介して Unity エンジンと連携します。

ただし、EasyAR はシステム AR よりも多くの機能とより完全なデバイス対応を提供しているため、AR Foundation を単独で使用しても EasyAR と同等の効果を得ることは通常できません。

Sessionの組成

典型的なsessionは主に以下の部分から構成されます:

  • frame source:物理カメラ画像とセンサーデータを提供するコンポーネント。これらのコンポーネントはモーション追跡データも提供することがあります。例:CameraDeviceFrameSource および MotionTrackerFrameSource
  • frame filter(s):特定のAR機能を提供するコンポーネント。例:ImageTrackerFrameFilter
  • camera:シーン内の仮想カメラオブジェクト
  • origin:モーション追跡の原点オブジェクト
注記

AR Foundationの概念では、モーション追跡は必須機能として扱われるため、常にoriginを提供します。
EasyARシステムでは、モーション追跡はオプション機能であるため、originもオプションです。

[オプション] session のデータフロー

データフロー は EasyAR Sense のコアコンセプトの一つです。Unity で AR アプリケーションを開発する際には影響しません。session の動作原理をより深く理解したい場合に、このセクションを参照してください。

Unity では、session は通常 EasyAR Sense のデータフローを表現します。

flowchart LR
  S[Frame Source]
  R[Input Frame Recorder<br>Video Input Frame Recorder]
  ift[iFrameThrottler]
  iff[iFrameFork]
  i2f[i2FAdapter]
  fb[fbFrameFork]  
  i2o[i2OAdapter]

  FOT[Object Tracker]
  FIT[Image Tracker]
  FMT[Mega Tracker]
  FSSM[Sparse Spatial Map]
  FST[Surface Tracker]
  FDS[Dense Spatial Map]
  FCR[Cloud Recognizer]
  
  ofj[oFrameJoin]
  off[oFrameFork]
  ofb[oFrameBuffer]

  O(( ))
  ODS(( ))
  OCR(( ))

  S ==> R ==> ift ==> iff
  iff --> i2f
  i2f --> fb
  fb -.-> FOT -.-> ofj
  fb -.-> FIT -.-> ofj
  iff ==> i2o ==> ofj ==> off ==> ofb ==> O
  iff -.-> FMT -.-> ofj
  iff -.-> FSSM -.-> ofj
  iff -.-> FST -.-> ofj
  iff -.-> FDS -.-> ODS
  iff -.-> FCR -.-> OCR
  off --> i2f
  ofb --> ift

このデータフローは session 起動プロセスで構築され、太字のデータパスを除く接続の有無は、起動時に有効化された AR コンポーネントに依存します。

したがって、session で有効化するコンポーネントを変更することで、データフローの構造と機能を柔軟に変更したり、複数の AR 機能を同時に有効化したりできます。この方法については次の段落で詳しく説明します。

セッションの流れ

flowchart LR
  i[初期化<br>Initialize]
  a[アセンブル<br>Assemble]
  starta["起動(アセンブル済み)<br>StartSession(Assembled)"]
  start[起動<br>StartSession]
  update((更新<br>update))
  stop[停止<br>StopSession]
  di[初期化解除<br>Deinitialize]

  i --> a --> starta --> update --> stop --> di
  i --> start --> update

  • 初期化
    初期化はライセンスキーを使用してEasyAR Senseを起動するプロセスです。初期化前にはEasyAR Senseのインターフェースのごく一部のみが利用可能です。初期化後、AR機能がアクティブになります。

  • アセンブル
    アセンブルプロセスは設定オプションに基づき、シーンから適切なコンポーネントを選択し統合された作業単位に接続します。通常は起動時に自動実行されますが、事前に手動でアセンブルインターフェースを呼び出すことも可能です。アセンブル完了後、アセンブル済みセッションを起動することでプロセスをスキップし起動を高速化できます。
    アセンブルはARコンポーネントと入力ソースの可用性を評価し、最適な入力ソースを選択する役割も持ちます。これにより現在のデバイスでセッションが実行可能か判断できます。

    アセンブルは2段階で進行:

    1. 第1段階: デバイスサポートリストの更新を開始し、設定待機時間後にアセンブルを実行。この時点でデバイスリスト更新が完了していればプロセス終了
    2. 第2段階: デバイスリスト更新完了後に実行。第1段階で利用可能フレームソースが存在せず、セッション起動に失敗した場合にフレームソースが利用可能になれば再起動を試行

    デバイスリストの更新状態に関わらず、セッションは第1段階完了後も後続ステップを継続します。

  • 起動
    AR機能の実行を開始するプロセスです。起動前はARコンポーネントがデータを処理しません。正常起動後、セッションはシーン内オブジェクトの移動制御を開始し、一部入力ソースでは物理カメラ画像のレンダリングを制御します。

  • 更新
    Unityのレンダリングループでフレーム毎に実行。現在のAR機能の実行結果に基づき、仮想カメラ(一部入力ソース)、原点、追跡ターゲットのtransformをフレーム毎に更新します。デバイスにより実行タイミングは異なりますが、必ずレンダリング前に実施されます。

  • 停止
    AR機能の実行を終了します。シーン内オブジェクトは制御対象外となり、入力ソースデータの処理も停止します。

  • 初期化解除
    グローバルリソースの一部を解放します(ダイナミックライブラリはアンロードされません)。初期化解除後、AR機能コンポーネントは利用不可となります。

注記

すべてのAR機能はARSession.StartSessionの実行後にのみ利用可能です。

Session のデフォルトライフサイクル

flowchart LR
  uload("BeforeSceneLoad")
  ustart("MonoBehaviour.Start")
  udestroy("MonoBehaviour.OnDestroy")
  oi{Initialize<br>OnStartup}
  ostart{AutoStart}
  i[初期化<br>Initialize]
  start[開始<br>StartSession]
  update((更新<br>update))
  stop[停止<br>StopSession]
  
  uload -.-> ustart -.-> udestroy
  uload --> oi -. true .-> i
  ustart --> ostart -. true .-> start
  udestroy --> stop
  i --> start --> update --> stop

session のライフサイクルは通常、インターフェース呼び出しのタイミングによって決定されます。デフォルト設定では、session は以下のタイミングで自動的に実行されます:

Session状態

ARSession.Stateはセッションの状態を記述します。セッションには以下の状態があります:

状態 説明
None 初期状態、セッションは起動もアセンブルもされていない
Broken アセンブル失敗などによりセッションが破損した
Assembling アセンブル中、通常数フレーム続く可能性がある
Assembled アセンブル成功、ただしまだ起動されていない
Ready セッションの起動成功、この状態は1フレームのみ持続
Running セッション動作中
Paused セッション一時停止中

通常、セッションの状態は起動や停止などのインターフェースを呼び出す際に変化します。実行中に重大なエラーが発生した場合、セッションはBroken状態に移行することもあります。Broken状態になったセッションは実行を再開できず、停止を呼び出した後、再起動する必要があります。

セッションの状態を通じて、現在のセッションが利用可能な状態かどうかを把握できます。ほとんどの機能はReadyまたはRunning状態でのみ使用可能です。

運動追跡状態

ARSession.TrackingStatus はセッションのモーショントラッキング状態を表し、デバイスの運動追跡の品質を示します。以下の状態があります:

状態 説明
Optional<MotionTrackingStatus>.Empty モーショントラッキング機能が有効でない、またはセッションが実行されていない
NotTracking モーショントラッキング結果が利用不可(初期化中、追跡ロスト、再位置推定中の可能性あり)
Limited モーショントラッキングは有効だが精度が低い(テクスチャ不足領域や高速移動が原因)
Tracking モーショントラッキング品質が良好
注記

AR Foundation ではモーショントラッキングは必須機能であるため、その追跡状態はセッション状態と統合されています。
EasyAR システムではモーショントラッキングはオプション機能であるため、追跡状態は独立して存在し、空になる可能性があります。

その他の AR 機能のトラッキング状態はどこにあるか

AR 機能は複数のオブジェクトを同時にトラッキングする可能性があるため、画像トラッキング状態やその他の AR 機能のトラッキング状態はセッション内にはなく、トラッキング対象コンポーネント内にあります。

TargetController.IsTracked を使用してトラッキング対象がトラッキング状態にあるかどうかを確認したり、TargetController.TargetFound および TargetController.TargetLost イベントを使用してトラッキング状態が変化した際にアプリケーションコンテンツのロジックを調整したりできます。

次のステップ

セッションの作成

実行の制御

コンポーネントと結果へのアクセス

コンポーネントリファレンス

  • ARSession コンポーネントリファレンス