Table of Contents

適切な中心モードを選ぶ

適切な中心モードを選ぶことは、コンテンツ制作にとって非常に重要です。ここでは、中心モードの取得方法と変更方法、そして適切な中心モードを選ぶための考え方を説明します。

始める前に

  • AR Session 简介 で session の基本概念、構成、ワークフローを理解してください。
  • AR Session 的中心模式 で中心モードの基本概念と、シーン内の物体の動きへの影響を理解してください。

利用可能な中心モードを取得する

session が実行中の場合、現在の session で利用可能な中心モードだけが Inspector の Center ドロップダウンに表示されます。session が起動していない場合は、すべての中心モードが表示されます。

alt text

この画像は、エディタで CameraDeviceFrameSource を使った session で利用できる中心モードを示しています。

スクリプトでは、session の assemble 成功後に ARSession.AvailableCenterMode プロパティを使って、現在の session で利用可能な中心モード一覧を取得できます。

たとえば、次のコードは、ある中心モードが現在の session で利用可能かどうかを確認する方法です。

if (Session.AvailableCenterMode.Contains(mode))
{
    // mode は現在の session で利用可能
}

中心モードを変更する

Inspector を開き、Center ドロップダウンで必要な中心モードを選択します。

alt text

スクリプトでは、ARSession.CenterMode プロパティで中心モードを変更できます。

たとえば、次のコードは利用可能な中心モードを順に切り替える例です。

while (true)
{
    Session.CenterMode = (ARSession.ARCenterMode)(((int)Session.CenterMode + 1) % Enum.GetValues(typeof(ARSession.ARCenterMode)).Length);
    if (Session.AvailableCenterMode.Contains(Session.CenterMode)) { break; }
}

session は毎フレーム更新時に、現在の中心モードが有効かどうかを確認します。有効なら、新しい中心モードの使用をただちに試みます。

上の動画では、session は最初に FirstTarget を使っており、中心物体はクリスマスツリー(淡い青の point cloud)です。その後、中心モードを Camera に手動で変更すると、中心物体はカメラ(青い円錐)になります。動画の詳細は AR Session 的中心模式 を参照してください。

変更後の中心モードが現在の session で無効な場合、CenterMode プロパティは自動的に最初の利用可能な中心モード(通常は FirstTarget または SessionOrigin)へ変更され、ログに警告が 1 行出力されます。

Center mode {Value} is unavailable in this session, reset to {NewValue}.

中心モードの選び方

現実世界の物体との整合は AR コンテンツ制作の核心であり、中心モードは、シーン内の他の物体の位置や向きを計算する際の基準物体を決めます。そのため、適切な中心モードを選ぶことがとても重要です。

一般的な考え方

多くの場合、FirstTarget または SpecificTarget を使い、target を中心にするほうがコンテンツ制作しやすいです。こうすると、target の下に置いたコンテンツの基準点は安定し、XR Origincamera の動きによる不要な影響(物理演算への影響など)を受けにくくなります。ただし絶対ではありません。

  • 迷ったら、既定値である FirstTarget を使います。
    多くの AR 機能には誤差があり、実行中にその誤差は継続的に補正されます。そのため、現実世界では静止して見える物体(たとえば sparse spatial map の target や motion tracking の XR Origin)でも、仮想空間では相対的に動いて見えることがあります。この場合、target を中心にするほうが制作上の意図に合います。

  • 複数の target を同時に追跡する場合
    この場合も、計算誤差のため、現実世界では静止していても、それらの target の間に相対移動が発生することがあります。どの物体を中心にするかは実際の要件で判断しますが、通常は FirstTarget がより適しています。

  • SessionOrigin を使う場面
    SessionOrigin は motion tracking だけが動作しているシーンに向いています。このとき XR Origin が唯一の基準点です。また、ヘッドセット製造元が motion tracking の基準点を正しく実装していない特殊なケースでも使います。その場合は、Unity のワールド原点を使って SessionOrigin を強制します。

  • Camera の使用場面
    Camera は、物理カメラが動かないシーン(たとえば固定カメラのカード対戦型 AR)に向いています。この場合、コンテンツ制作がしやすくなります。

AR 機能ごとのよく使う中心モード

一部の AR 機能を単独で使う場合、よく使われる中心モードがあります。下の表はその例です。

機能 よく使う中心モード
Mega FirstTarget または SpecificTarget
Motion tracking SessionOrigin
Plane detection SessionOrigin
Sparse spatial map FirstTarget または SpecificTarget
Dense spatial map SessionOrigin
Surface tracking FirstTarget または SpecificTarget
Image tracking FirstTarget, SpecificTarget, または Camera
Cloud image recognition FirstTarget, SpecificTarget, または Camera
Object tracking FirstTarget, SpecificTarget, または Camera

複数デバイスで考慮すること

複数デバイス向けに AR アプリを開発する場合、各デバイスの中心モード対応を考慮する必要があります。

  • 端末がスマホとタブレットだけなら、通常は大きな問題はありません。SessionOrigin を使う場合は、motion tracking が動作することを確認してください。
  • ヘッドセットを使う場合は特に注意が必要です。
    • 有効中心模式 を参照して、使うデバイスがどの中心モードをサポートするか確認してください。サードパーティ拡張を使う場合は、その拡張が使う OriginType も確認してください。
    • Rokid デバイスでは、できるだけ UXR を使わないでください。XRI を使うと多くの中心モードが利用できます。
    • FirstTargetSpecificTarget に対応しないヘッドセットでは、Mega や image tracking などの大半のコンテンツが Unity ワールド座標系に対して静止できない点に注意してください。

どの中心モードでも正しく表示される内容

警告

Unity AR では、Unity ワールド座標系に置かれ、session コンポーネントに合わせて transform を調整していないオブジェクトは、正しく表示されない可能性があります。

ワールド座標系にモデルを置くと、その位置や向きが現実世界のどの物体とも対応しないことがあります。実行結果がたまたま正常に見えることもあれば、空中に浮いて見えたり、あちこち動いたりすることもあります。

どの中心モードでも内容を正しく表示するには、次の方法が正しいです。

  • 表示したい内容は、対応する target ノードの下、または XR Origin に追従させたい場合は XR Origin ノードの下に置く
  • あるいは target または XR Origin に手動で位置と向きを合わせる。ただし、ARSession.PostSessionUpdate イベントの後に行う
注記

これでもすべての要素が正常に動作するとは限りません。Unity の一部機能はワールド座標系でしか動作しないためです(たとえば物理システム)。適切な中心モードの選択は依然として重要です。

関連トピック