ヒットテストで仮想オブジェクトを現実世界に配置する

プラットフォーム固有のガイド

Android(Kotlin/Java)

Android NDK(C)

Unity(AR Foundation)

AR コンテンツは、シーンに溶け込むように正しく配置され、サイズ調整されている必要があります。現実世界のオブジェクトと同様に、遠くにある仮想オブジェクトは小さく表示される必要があります。ヒットテスト(または Unity 用 AR Foundation のレイキャスト)を実行して、シーン内の 3D オブジェクトの正しい配置を特定できます。適切な配置により、AR コンテンツが適切な(見かけ上の)サイズでレンダリングされます。

ヒットテストは、現実世界の 3D ジオメトリと、原点と方向で構成される仮想の直線の交差を検出します。デバイスのカメラを原点とするレイが最も一般的に使用されますが、ARCore には、ワールド空間座標の任意のレイでヒットテストを実行するための API が含まれています。

ユーザーのデバイスのカメラから発せられた光線が、床、壁、オブジェクトなどのシーンの 3D ジオメトリに当たるまで前方に伸びていると想像してください。この処理が完了すると、検出されたシーンのジオメトリとの交差を示すヒット結果のリストが返されます。リストはデバイスからの距離順に並べ替えられ、最も近い交差点が最初に表示されます。一般的に、他のオブジェクトに隠れているオブジェクトは表示されないため、通常は最初の結果が最も重要になります。

ヒット結果の内容

個々のヒット結果は、各結果に関する次の情報を含むリストとして返されます。

  • レイの原点からの距離(メートル単位)
  • ヒット結果のポーズ(位置と向き)
  • ヒットした 3D ジオメトリ(Trackable の形式)

その後、目的のヒット結果を使用して、アンカーを使用して 3D コンテンツをリアルに配置できます。

ヒット結果のタイプ

ヒット結果には、深度、平面、特徴点、インスタント配置の 4 種類があります。次の表に示すように、それぞれに独自のユースケースとトレードオフがあります。

ヒット結果のタイプ 説明 向き ユースケース
奥行き シーン全体の深度情報を使用して、ポイントの正しい深度と向きを特定します。 3D サーフェスに垂直 任意のサーフェスに仮想オブジェクトを配置する(床や壁だけでなく)
飛行機 水平面または垂直面にヒットして、ポイントの正しい奥行きと向きを特定します。 3D サーフェスに垂直 平面の完全なジオメトリを使用して、平面(床または壁)にオブジェクトを配置します。正しいスケールがすぐに必要です。深度ヒットテストのフォールバック
特徴点 ユーザーがタップしたポイント周辺の視覚的特徴に依存して、ポイントの正しい位置と向きを特定します。 3D サーフェスに垂直 任意のサーフェスにオブジェクトを配置する(床や壁だけでなく)
インスタント配置(永続的なレイキャスト) 画面スペースを使用してコンテンツを配置します。最初はアプリから提供された推定深度を使用します。すぐに動作しますが、ARCore が実際のシーンのジオメトリを特定できると、ポーズと実際の深度が変化します。 +Y は上向き(重力と反対方向) 高速な配置が重要で、初期の深度とスケールが不明でも許容できるエクスペリエンスの場合、平面(床または壁)の完全なジオメトリを使用して、平面上にオブジェクトを配置します。

デバイスの互換性

ヒットテストはすべての ARCore 対応デバイスで動作しますが、デプスのヒットテストにはデプス対応デバイスが必要です。

ヒット結果を使用して AR コンテンツを配置する

ヒット結果を取得したら、そのポーズを入力として使用して、シーンに AR コンテンツを配置できます。