Unity AR のモーション追跡中心 - XR Origin
XR Origin は Unity におけるモーション追跡機能の中心的な概念です。現代の AR アプリでは、モーション追跡は徐々に必須機能になりつつあります。モーション追跡を使うと、アプリは他の認識対象を使わずにユーザーの現実世界での位置と向きを把握でき、没入感のある AR 体験を実現できます。以下では、XR Origin の基本概念、構成、ライフサイクル、そしてどのような場合に XR Origin を使うのかを説明します。
はじめる前に
- ARSession の紹介 で session の基本概念を理解してください。
XR Origin とは
モーション追跡が初期化されると、追跡の origin として基準点が 1 つ選ばれます。この基準点は通常、ユーザーがアプリを起動したとき、またはシステムの AR service が起動したときのデバイス位置です。この基準点を Unity scene で表すものが XR Origin です。多くの場合、scene における XR Origin の開始位置は camera のデフォルト開始位置でもあります。
この video は、モーション追跡だけが動作しているシンプルな AR scene を示しています。左が
Hierarchy、中央がScene、右がGameです。video は Unity editor のPlayモードで simulation run data を使って録画されています。Gameview の内容は、ユーザーが現実世界でスマートフォン越しに見る内容と同じです。この video では、XR Origin(青い球体)は scene 内で固定されており、ユーザーを表す camera(camera アイコン)は現実世界でのユーザーの移動に合わせて動きます。白い円すいは過去の camera の位置と向きの軌跡を示しており、camera の動きをより理解しやすくしています。これらの白い円すいは XR Origin の node 下に生成され、この種の scene における典型的なオブジェクト構成でもあります。
Unity のモーション追跡システムでは、camera は通常 XR Origin に追従して動きます。camera が必ずしも XR Origin の child node であるとは限りませんが、AR Session は XR Origin の位置に基づいて camera の位置を計算し、ユーザーが見る内容が現実世界と一致するようにします。
この video は同じ scene ですが、今回は runtime 中に XR Origin(青い球体)を動かしています。XR Origin を移動すると camera もそれに追従して動き、
Gameview の内容は変わらないことが分かります。
実際の AR scene では、この動きの関係はもっと複雑です。
異なる center mode における XR Origin の振る舞い
Unity では、AR tracking の中心となる参照点をすべて session center と呼び、session 実行中にこの中心を決める規則を center mode と呼びます。center mode によって XR Origin の振る舞いは変わります。
SessionOrigin center mode では、XR Origin を自由に動かせます。
SessionOrigin mode は、通常モーション追跡だけが動作する scene で使います。他の機能が同時に動いている場合は、通常この mode は使いません。
ただし headset 使用時に、ベンダーが Unity でモーション追跡の reference point を正しく実装していない場合は、Unity の world center を使って SessionOrigin mode を強制する必要があります。この場合、content root は AR 機能に追従して動く必要があり、content の見え方に影響することがありますが、サードパーティの変更が入るまでは他に方法がありません。
その他の center mode、たとえば FirstTarget では、XR Origin を自由に動かせません。
FirstTarget mode は、モーション追跡以外の scene、または他の AR 機能とモーション追跡が同時に動作する scene で使います。
この mode では XR Origin の位置は AR 機能によって決まるため、XR Origin を勝手に動かすことはできません。
center mode と scene 内の object の動きについては、center mode を参照してください。
XR Origin の形式と構成
EasyAR は 2 つの異なる形式の XR Origin を使えます。
- EasyAR が提供する XR Origin
- Unity XR framework が提供する XR Origin
XR Origin (EasyAR)
典型的な XR Origin の構造は次のとおりです。

XR Origin の root node は空の GameObject で、1 つ以上の XR Origin Child child node を持てます。XR Origin Child には XROriginChildController component が含まれており、XR Origin の制御ロジックを代行します。
session 実行時、scene に正しい XR Origin 構造がない場合は、XR Origin と 1 つの XR Origin Child が自動生成されます。実行中、XR Origin Child は XR Origin と同じ位置・向きに拘束されます。
session によって生成される object、たとえば sparse spatial mapping の point cloud や dense spatial mapping の mesh は、XR Origin Child node の下に作成されます。
この video は、同じ scene でモーション追跡と dense spatial mapping を同時に動かしたときの様子を示しています。生成された mesh が XR Origin Child node の下に作成されていることが分かります。
注: 理解しやすいように、video では depth map の生成を無効にしているため、video 内の
Sceneview の内容は実際の runtime と異なります。Gameview の表示は mesh の透明化を無効にした場合と同じです。
[任意] XR Origin (Unity XR)
必要に応じて、Unity XR framework が提供する XR Origin component を使えます。
Unity XR framework の XR Origin を使う場合、典型的な構造は次のとおりです。

headset scene では、典型的な構造は次のとおりです。

XR Origin の root node は Unity XR framework によって作成・管理される GameObject で、1 つ以上の XR Origin Child child node を持てます。XR Origin Child には XROriginChildController component が含まれており、XR Origin の制御ロジックを代行します。
session 実行時、scene に正しい XR Origin Child 構造がない場合は、XR Origin Child が自動生成されます。実行中、XR Origin Child は XR Origin と同じ位置・向きに拘束されます。
Unity XR framework が提供する XR Origin は、主に次の 2 つの状況を支えます。
- すでに project で AR Foundation を使っており、EasyAR と共存させたい、または device support に応じて両者を切り替えたい。
- 使用している headset SDK が Unity XR framework の XR Origin component を使っている。
注記
Unity XR の core package com.unity.xr.core-utils が project にまだ import されていない場合、scene の camera が Unity XR framework の XR Origin と同じ階層構造にあるとき(Camera と Camera Offset という親 node を含む)、session はこの構造を Unity XR framework が作成したものとみなして使用します。これは scene の互換性を最大化するためで、AR Foundation で作られた scene は AR Foundation が project に import されていなくても動作し、残りの AR 機能も正常に使えるようにするためです。AR Foundation だけが提供できる機能を除けば、全体の AR functionality や device compatibility にも影響しません。
EasyAR の多くの sample scene は、この方法を使って AR Foundation がなくても動くようにし、AR Foundation がある場合には協調動作も示せるようにしています。
AR Foundation の定義では、その XR Origin は XR scene における空間 tracking の中心です。ただし、AR Foundation の概念ではモーション追跡は必須機能であり、XR scene で説明される tracking とはモーション追跡のことです。
EasyAR システムではモーション追跡は任意機能なので、XR Origin も任意です。XR Origin はモーション追跡が有効なときだけ作成・使用されます。
XR Origin のライフサイクル
XR Origin のライフサイクルは session に依存します。session 開始時、XR Origin は選択されるか、scene の XR Origin 構造が正しくない場合は作成されます。session 停止時、XR Origin は次の session で使われるか手動で削除されるまでその場に残ります。
次のステップ
作成
- scene で XR Origin を作成する を試してください
runtime 制御
- XR Origin の Active 制御戦略 を学んでください