アンカーの使用

アンカーを使用すると、仮想オブジェクトが AR シーンで定位置に留まっているように見えます。

アンカーを使用する理由

AR のエクスペリエンス全体で ARCore の環境理解が更新されると、仮想オブジェクトが配置された場所からずれて見えることがあります。これはアプリのリアルさやユーザー エクスペリエンスに影響する可能性があります。

アンカーを使用すると、オブジェクトが空間内で同じ位置と向きに固定されているように見えるため、現実世界に配置された仮想オブジェクトの錯覚を維持できます。

アンカーの仕組み

アンカーを初めて使用する場合は、ワールド空間とポーズを確認することをおすすめします。

  • ワールド空間

    • カメラとオブジェクトが配置される座標空間
    • カメラとオブジェクトの位置がワールド空間でフレームごとに更新されます。
  • ポーズ

    • ワールド空間でのオブジェクトの位置と向きを表します
    • iOS では変換とも呼ばれます

アンカーを作成する際は、現在のフレームのワールド空間の推定値を基準とする位置と向きを表すポーズを使用します。

このアンカーには、1 つ以上のオブジェクトを取り付けます。アンカーとそれに接続されているオブジェクトは、ワールド内の同じ位置に留まるように見えます。アンカーのポーズが各フレームのワールド空間の更新に適応するため、それに応じてオブジェクトのポーズが更新されます。

複数のオブジェクトを同じアンカーにアタッチすると、アンカーのポーズが調整されても、オブジェクトの相対的な位置と向きを維持できます。

シーンでアンカーを使用する

シーンでアンカーを使用するには、コードを記述する必要があります。

  • トラッキング可能(プレーンなど)や ARCore セッションのコンテキストでアンカーを作成します。
  • 1 つまたは複数のオブジェクトをアンカーにアタッチします。

アンカーは、シーンのオブジェクト内のさまざまな種類の位置動作をサポートできます。

アンカー コンテキストと、シーンのオブジェクトに必要なアンカーの数は、AR シーンに必要な位置の動作によって異なります。詳しくは、以下のセクションをご覧ください。

アンカー コンテキストを選択

Trackable または ARCore Session を使用してシーンにアンカーを追加します。

オブジェクトにオブジェクトを配置するときに、 アンカーを
Trackable に「溶接」されているように見え、Trackable と同じ回転効果が表れます。
これには以下が含まれます。
  • 飛行機の表面にくっつくように見える
  • Trackable に対する相対位置(上や前にフローティングなど)を維持する
トラッキング可能
ユーザー エクスペリエンス全体を通じて、ワールド空間で同じポーズを取っている ARCore セッション

1 つ以上のオブジェクトをアンカーする

アンカーには 1 つ以上のオブジェクトをアタッチできます。通常、これらのオブジェクトは以下の 1 つ以上と空間関係を持ちます。

  • お互い
  • Plane などの Trackable
  • ワールド空間での位置付け

アンカーのガイドライン

アンカーを効果的かつ効率的に使用すると、アプリのリアルさとパフォーマンスを向上させることができます。

付近のアンカーに取り付けられたオブジェクトは、AR エクスペリエンス全体を通して、現実的な位置と相対的な相対的な位置関係を維持しているように見えます。

必要なアンカーのみを使用すると、CPU 費用を削減できます。

可能な場合はアンカーを再利用する

ほとんどの場合、オブジェクトごとに新しいアンカーを作成するのではなく、近くにある複数のオブジェクトに同じアンカーを使用する必要があります。

オブジェクトが Trackable またはワールド空間内の位置との一意の空間関係を維持する必要がある場合は、オブジェクトに新しいアンカーを使用します。

シーン内の各オブジェクトに独自のアンカーがある場合、これらのアンカーは各フレームの ARCore のワールド空間の推定に応じて、オブジェクトのポーズを個別に調整します。個別に固定されたオブジェクトは互いに相対的に移動または回転できるため、仮想オブジェクト同士の相対的な位置関係を維持する必要がある AR シーンの錯覚をなくすことができます。


たとえば、アプリで、ユーザーが部屋の周りにバーチャルな家具を配置できるとします。ユーザーがアプリを開くと、ARCore が室内のテーブルトップと床を平面として追跡し始めます。ユーザーが仮想ランプをテーブルトップに置きます。 次に、ユーザーは仮想の椅子を床に置きます。

この時点で、シーンの 1 つのアンカーがテーブルトップ プレーンに接続され、もう 1 つのアンカーがフロアプレーンに接続されているはずです。

ユーザーが別の仮想ランプをテーブルトップに追加する場合は、テーブルトップ プレーンにすでに取り付けられているアンカーを再利用できます。これにより、両方のランプが卓上面に固定され、相対的な位置関係が保たれているように見えます。また、椅子は床面に対する位置も維持されます。

オブジェクトをアンカーの近くに置く

オブジェクトを固定する際は、使用するアンカーの近くにオブジェクトを配置してください。ARCore のワールド空間座標の更新による予期しない回転移動を防ぐため、アンカーから 8 m(8 m)以上離れた場所にオブジェクトを配置しないでください。

オブジェクトを既存のアンカーから 8 m 以上離して配置する必要がある場合は、この位置の近くに新しいアンカーを作成し、オブジェクトを新しいアンカーに接続します。

未使用のアンカーを切断する

アプリのパフォーマンスを向上させるために、不要になったアンカーを切断します。

アプリでは、Trackable ごとに CPU コストが発生します。ARCore は、アンカーがアタッチされた Trackable をリリースしません。

アンカーの種類

アンカータイプは、有効なスコープ(ローカル型から全世界向け)で区別されます。

  • ローカル アンカーは、アプリとともにローカルに保存され、アプリのそのインスタンスに対してのみ有効です。ユーザーは、アンカーを配置する場所に物理的にいる必要があります。

  • Cloud Anchors は Google Cloud に保存され、アプリ インスタンス間で共有できます。ユーザーは、アンカーを配置する場所に物理的にいる必要があります。

  • 地理空間アンカーは、測地的な緯度、経度、高度と Google の Visual Positioning System(VPS)データに基づいており、世界中のほぼすべての場所で正確な位置情報を提供します。アプリがインターネットに接続され、VPS を使用できる限り、ユーザーはリモート ロケーションからアンカーを配置できます。