Table of Contents

ARセッションの中心モード

中心モードはUnity ARの核となる概念であり、セッション実行中にどのオブジェクトをすべてのAR追跡の基準点(中心オブジェクト)として選択するか、およびセッション内でどのオブジェクトが自由に移動できるかを決定します。以下の内容を通じて、中心モードの基本概念とシーン内オブジェクトの運動動作への影響を理解します。

開始前に

  • ARセッションの概要を通じて、セッションの基本概念、構成要素、およびワークフローを理解してください。
  • カメラを通じて、ARシーン内でのカメラの役割と、適切なAR体験を確保するためにセッションがカメラプロパティを制御する方法を理解してください。
  • XR Originを通じて、XR Originの基本概念、構成要素、およびライフサイクルを理解してください。
  • ターゲットを通じて、ターゲットの基本概念、状態、およびライフサイクルを理解してください。

中心オブジェクトと中心モード

1つのセッション内では、1つ以上の異なるAR機能が同時に実行されている可能性があります。これらのAR機能は異なるオブジェクトを追跡し、デバイス自身の位置と向きを追跡するためにモーショントラッキング機能を同時に使用する場合があります。

シーン内オブジェクトの運動動作が期待通りになることを保証するために、セッションはすべてのAR追跡の中心として基準点を選択する必要があります。この基準点をUnityシーンで表したものが中心オブジェクト(CenterObject)です。中心モード(CenterMode)は、セッション実行中にこの中心オブジェクトがどのオブジェクトであるかを決定するルールです。

セッションの中心は以下のいずれかのオブジェクトになります:

  • 追跡されている特定のターゲット
  • XR Origin
  • カメラ

中心モードは、セッションがどのオブジェクトを中心オブジェクトとして選択するか、およびそのオブジェクトが自由に移動できるかどうかを決定します。このオブジェクト以外のオブジェクト(非中心のカメラ、XR Origin、ターゲットを含む)は、セッションによって制御され、中心オブジェクトを基準点として運動します。

Unityでは、セッションは以下の4つのセンター・モードをサポートしています:

名前 説明
FirstTarget

SpecificTarget
alt text targetを中心とし、このtargetは自由に移動できます。ここで、
  • FirstTargetは最初に追跡されたtargetを中心とします。
  • SpecificTargetは指定されたtargetを中心とします。
セッション内のカメラとXR Origin、およびその他のtargetはセッションによって制御され、中心となるtargetを基準点として移動します。
SessionOrigin alt text XR Originを中心とし、XR Originは自由に移動できます。
セッション内のカメラとtargetはセッションによって制御され、中心となるXR Originを基準点として移動します。
Camera alt text カメラを中心とし、カメラは自由に移動できます。
セッション内のXR Originとtargetはセッションによって制御され、中心となるカメラを基準点として移動します。

図には3つのオブジェクトがあり、青色の球体はXR Origin、青色の円錐体はカメラ、黄色の画像はtargetを表しています。異なるセンター・モードでは、セッションは異なるオブジェクトを中心オブジェクトとして選択し、図は対応するオブジェクトのローカル座標系を示しています。

ヒント

AR Foundationの使用経験がある場合、AR Foundationには類似の概念が存在しないことに気付くかもしれません。実際、AR Foundationの動作モードは SessionOrigin センター・モードと一致しています。

セッションでは、targetcameraの相対的な運動関係は現在のセッションによって制御されます。XR Origincameraの相対的な運動関係は、現在のセッションまたはサードパーティフレームワーク(例:AR Foundation)によって制御されます。センター・モードの存在により、異なる実行環境下でもセッションがシーン内オブジェクトの運動動作を正しく制御できることが保証されます。

例えば、AR FoundationまたはUnity XRベースのヘッドセットSDKがXR Origincameraの相対運動関係を制御している場合、XR OriginはUnity XRフレームワークの設計上セッションによる移動制御が可能ですが、cameraは制御できません。この時、セッションはセンター・モードを FirstTargetSpecificTarget または SessionOrigin に制限します。これにより、セッションにとっての中心はXR Originまたは特定のtargetとなり、Unity XRフレームワークにとっての中心は依然としてXR Originとなり、システム全体が正常に動作します。

警告

Unity ARでは、Unityのワールド座標系に存在し、セッションコンポーネントに基づいてtransformが調整されていないオブジェクトは正しく表示されない可能性があります。セッションは中心オブジェクトの位置と向きに基づいてシーン内の他のオブジェクトの位置と向きを調整するため、セッションの制御下にないオブジェクトの位置と向きは、セッションが計算した位置と向きと一致せず、予期しない動作を引き起こす可能性があります。

例えば、ワールド座標系にパンダモデルを配置した場合、このパンダモデルの位置と向きは現実世界のどの物体とも対応関係を持たず、空中に浮いているように見えたり、あちこち動き回っているように見えたりする可能性があります。

正しい方法は、表示するコンテンツを常にtargetノードの下、またはXR Originノードの下(コンテンツがXR Originの動きに追随する必要がある場合)に配置することです。これにより、コンテンツの位置と向きはセッションの計算結果に基づいて調整され、現実世界に正しく重ねて表示されます。

手動でコンテンツとtargetまたはXR Originの位置と向きを合わせることは可能ですが、適切なタイミングで操作する必要があります。詳細は 適切なセンター・モードの選択 を参照してください。

利用可能なセンター・モード

すべてのセンター・モードが常に有効とは限りません。セッションは現在の実行環境と選択されたframe sourceに基づいて、どのセンター・モードが有効かを決定し、シーン内オブジェクトの運動動作を正しく制御できるようにします。ARSession.AvailableCenterMode プロパティを使用して、現在のセッションで利用可能なセンター・モードのリストを取得できます。

最終的に選択されたframe sourceによって、セッションの有効なセンター・モードは以下のように異なります:

frame source カメラ制御 運動データ 原点設計 有効なセンター・モード
  • CameraDeviceFrameSource
  • FramePlayer かつ 録画時に使用したframe sourceに運動データなし
  • ExternalImageStreamFrameSource
はい いいえ -
  • FirstTarget
  • SpecificTarget
  • Camera
  • ARCoreFrameSource
  • AREngineFrameSource
  • ARKitFrameSource
  • InertialCameraDeviceFrameSource
  • MotionTrackerFrameSource
  • ThreeDofCameraDeviceFrameSource
  • FramePlayer かつ 録画時に使用したframe sourceに運動データあり
はい はい はい
  • FirstTarget
  • SpecificTarget
  • SessionOrigin
  • Camera (*)
* camera
XR Originの子ノードでない場合のみ有効
  • ARCoreARFoundationFrameSource
  • ARKitARFoundationFrameSource
  • VisionOSARKitFrameSource
  • XREALFrameSource
  • ExternalDeviceFrameSource かつ OriginTypeXROrigin または Custom
    • PicoFrameSource
    • RokidFrameSource かつ UXR未使用
いいえ はい はい
  • FirstTarget
  • SpecificTarget
  • SessionOrigin
  • ExternalDeviceFrameSource かつ OriginTypeNone
    • RokidFrameSource かつ UXR使用
いいえ はい いいえ
  • SessionOrigin

FramePlayerを使用する場合を除き、有効なセンター・モードはセッションのアセンブリ時に決定されます。FramePlayerを使用する場合、有効なセンター・モードはセッションの実行中、フレームデータ出力時にデータに運動情報が含まれているかどうかに基づいて動的に決定されます。

異なる中心モードの特性

次に、一連のサンプル動画を通じて、異なる中心モードでのオブジェクトの運動動作を示します。

動画の内容は以下の通りです:

現実世界には、2つの異なるタイプの追跡可能なオブジェクトがあります:

  • 1つはクリスマスツリーで、静止しています。これは疎空間マップ機能を通じて追跡されます。
  • もう1つはA4紙で、事前に印刷された画像があり、移動可能です。これは画像追跡機能を通じて追跡されます。

動画録画時、観測者(スマートフォン)はクリスマスツリーの右後方から開始し、ツリーの周りを移動します。A4紙は観測者の前で左右に振られます。

観察を容易にするために、シーン内の異なるオブジェクトに識別マークを追加しています:

  • クリスマスツリー: 追跡状態時、その占有空間に明るい青色の点群をオーバーレイします。追跡喪失時、これらのマークは消えます。
  • A4紙: 追跡状態時、その真上にパンダをオーバーレイします。GameビューにはA4紙の内容とサイズと完全に一致する画像が追加表示されます。追跡喪失時、これらのマークは消えます。
  • XR Origin: その位置に青色の球体を配置
  • カメラ: その位置に青色の円錐を配置。円錐の主軸はカメラの視線方向と一致します。

これらの動画はすべて、UnityエディタのPlayモードでシミュレーションデータを使用して録画されています。動画左側はSceneビュー、右側はGameビューです。Gameビューの内容は、現実世界でスマートフォンユーザーが見る内容と同じです。

FirstTargetおよびSpecificTarget中心モード

FirstTargetとSpecificTarget中心モードは、特定のtargetを中心オブジェクトとするモードです。これら2つのモードでは、中心となるtarget以外のセッション内のcameraXR Origin、その他のtargetは、セッションによって制御され、中心targetを基準点として動きます。

現実世界では移動可能なtargetもあり、例えば動画内のA4用紙が該当します。

この動画では、画像トラッキング機能で認識されたA4用紙(パンダ)が中心オブジェクトです。外部操作がないためA4用紙は静止しており、カメラ(青い円錐体)、XR Origin(青い球体)、クリスマスツリー(明るい青の点群)が移動しているのが確認できます。

現実世界で固定されているtargetもあり、例えば動画内のクリスマスツリーが該当します。

この動画では、スパース空間マップ機能で認識されたクリスマスツリー(明るい青の点群)が中心オブジェクトです。外部操作がないためツリーは静止しており、カメラ(青い円錐体)とA4用紙(パンダ)が移動しています。XR Origin(青い球体)も移動していませんが、これはツリーに対して相対的に静止しているためです。

これら2つのモードでは、基準点となる中心targetが自由に移動可能です。この場合、セッション内のcameraXR Origin、その他のtargetは全て連動して動き、それらのtransformは外部から制御できません。

この動画では、画像トラッキング機能で認識されたA4用紙(パンダ)が中心オブジェクトです。A4用紙を手動で移動させると、カメラ(青い円錐体)、XR Origin(青い球体)、クリスマスツリー(明るい青の点群)が全て連動して動くのが確認できます。なお、この時Gameビューの表示内容に変化がないのは、カメラの位置と向きがA4用紙や他のオブジェクトに対して相対的に変化していないためです。

FirstTargetモードとSpecificTargetモードの違いは、実行中に中心targetが変更される可能性がある点、および変更時の中心選択方法にあります。この問題を説明するには、トラッキングの成功・喪失プロセスを考慮する必要があります。

セッションの中心オブジェクトが変更される際、ARSession.CenterObjectは常に現在の中心オブジェクトを反映しますが、ARSession.CenterModeは変更されません。

FirstTarget中心モードでの中心の変化

FirstTarget 中心モードでは、セッションは常に最初に追跡された target を中心とします。この target の追跡が失われた場合、セッションは中心を再選択します。セッションが別の target を追跡中または新たに追跡を開始した場合、その target が新しい中心オブジェクトとして選択されます。

中心の再選択は以下の状況で発生します:

  • 現在のフレームに追跡状態の target が存在しない場合
    この時、SessionOrigin モードが有効であれば、セッションは SessionOrigin モードに後退し、XR Origin を中心オブジェクトとして選択します。それ以外の場合、セッションは Camera モードに後退し、camera を中心オブジェクトとして選択します。

  • 現在のフレームに追跡状態の target が存在し、かつ前のフレームに追跡状態の target が存在しなかった場合
    この時、セッションは追跡中の target のいずれかを中心オブジェクトとして選択します。

  • 現在のフレームに追跡状態の target が存在し、かつ前のフレームの中心 target の追跡が現在のフレームで失われた場合
    この時、セッションは追跡中の target のいずれかを新しい中心オブジェクトとして選択します。

上記の動画では、最初に中心オブジェクトは画像追跡機能で追跡されたA4用紙(パンダ)です。A4用紙(パンダ)の追跡が失われると、セッションが中心を再選択し、クリスマスツリー(明るい青色の点群)が新しい中心オブジェクトになります。動画の終盤でA4用紙が再追跡されますが、中心オブジェクトにはなりません。クリスマスツリーが既に中心オブジェクトだからです。

Specifictarget 中心モードの中心変化

SpecificTarget 中心モードでは、セッションは常に指定された target を中心とします。この target の追跡が失われた場合、セッションは中心を再選択しますが、他の target を新しい中心オブジェクトとして選択することはありません。指定された target が再追跡された場合、それは引き続き中心オブジェクトとして選択されます。

中心の再選択は以下の状況で発生します:

  • 現在のフレームで指定された target が追跡されていない場合
    この時、SessionOrigin モードが有効であれば、セッションは SessionOrigin モードに後退し、XR Origin を中心オブジェクトとして選択します。それ以外の場合、セッションは Camera モードに後退し、camera を中心オブジェクトとして選択します。

  • 現在のフレームで指定された target が追跡状態にあり、かつ前のフレームで指定された target が追跡されていなかった場合
    この時、セッションは指定された target を中心オブジェクトとして選択します。

上記の動画では、中心オブジェクトは画像追跡機能で追跡されるA4用紙(パンダ)に指定されています。A4用紙(パンダ)の追跡が失われると、セッションは他の target(クリスマスツリー/明るい青色の点群)を中心オブジェクトとして選択しません。動画の終盤でA4用紙が再追跡されると、中心オブジェクトとして復帰します。

Sessionorigin 中心モード

SessionOrigin 中心モードは、XR Origin を中心オブジェクトとするモードです。このモードでは、セッション内の cameratarget はすべてセッションによって制御され、中心である XR Origin を基準点として動きます。

上記の動画では、中心オブジェクトはXR Originです。外部操作がないため、XR Origin(青い球体)は静止していますが、カメラ(青い錐体)とA4用紙(パンダ)は移動しています。クリスマスツリー(明るい青色の点群)も移動していませんが、これはXR Originに対して相対的に静止しているためです。

このモードでは、基準点である中心の XR Origin を自由に移動できます。その際、セッション内の cameratarget はすべて連動して動き、それらの transform は外部から制御できません。

上記の動画では、中心オブジェクトはXR Originです。XR Origin(青い球体)を手動で移動させたため、カメラ(青い錐体)、クリスマスツリー(明るい青色の点群)、A4用紙(パンダ)がすべて連動して動いています。Game ビューに表示される内容に変化がないことに注意してください。カメラの位置と向きがXR Originや他のオブジェクトに対して相対的に変化していないためです。

SessionOrigin モードでは XR Origin が常に有効である必要があるため、このモードでは中心オブジェクトが変化することはありません。

Camera 中心モード

camera 中心モードは、camera を中心オブジェクトとするモードです。このモードでは、セッション内の XR Origintarget はすべてセッションによって制御され、中心である camera を基準点として動きます。

上記の動画では、中心オブジェクトはカメラです。外部操作がないため、カメラ(青い錐体)は静止していますが、XR Origin(青い球体)、クリスマスツリー(明るい青色の点群)、A4用紙(パンダ)は移動しています。

このモードでは、基準点である中心の camera を自由に移動できます。その際、セッション内の XR Origintarget はすべて連動して動き、それらの transform は外部から制御できません。

上記の動画では、中心オブジェクトはカメラです。カメラ(青い錐体)を手動で移動させたため、XR Origin(青い球体)、クリスマスツリー(明るい青色の点群)、A4用紙(パンダ)がすべて連動して動いています。Game ビューに表示される内容に変化がないことに注意してください。カメラの位置と向きがXR Originや他のオブジェクトに対して相対的に変化していないためです。

Camera モードでは camera が常に有効である必要があるため、このモードでは中心オブジェクトが変化することはありません。

次のステップ

関連トピック