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

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

Android(Kotlin/Java)

Android NDK(C)

Unity(AR Foundation)

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

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

ユーザーのデバイスのカメラから出た光線が、床、壁、物体などのシーンの 3D ジオメトリに当たるまで前方に延びるとします。この場合、ヒット結果のリスト、つまり検出されたシーン ジオメトリとの交差点が返されます。リストはデバイスからの距離の順に並べ替えられ、最も近い交差点が最初に表示されます。通常、他のオブジェクトの背後に隠れているオブジェクトは確認できないため、これは重要です。ほとんどの場合、最初の結果が最も重要な結果になります。

ヒットの結果の内容

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

  • 光線の原点からの距離(メートル単位)
  • ヒット結果のポーズ(位置と向き)
  • ヒットした 3D ジオメトリ(追跡可能)

そのうえで、求めているヒット結果を使って、アンカーを使って 3D コンテンツを配置します。

ヒット結果のタイプ

ヒットの結果には、奥行き、平面、特徴点、インスタント プレースメントの 4 種類があります。次の表に示すとおり、それぞれに独自のユースケースとトレードオフがあります。

ヒット結果タイプ 説明 オリエンテーション 使用例
掘り下げた分析 シーン全体の奥行き情報を使用して、ポイントの正しい奥行きと向きを決定します。 3D サーフェスに垂直 (床や壁だけでなく)任意の面に仮想オブジェクトを配置する
プレーン 水平または垂直のサーフェスにヒットして、ポイントの正しい奥行きと向きを決定します。 3D サーフェスに垂直 飛行機の完全なジオメトリを使用して、平面(床や壁)にオブジェクトを配置します。すぐに正しい体重計が必要です。Depth ヒットテストの代替
主なポイント ユーザーがタップした地点の周囲の視覚的特徴に基づいて、ポイントの正しい位置と向きを決定します。 3D サーフェスに垂直 床や壁だけでなく、任意の面にオブジェクトを配置します。
インスタント プレースメント(永続 Raycast) 画面スペースを使用してコンテンツを配置します。最初は、アプリによって推定される深度が使用されます。すぐに機能しますが、ARCore が実際のシーンのジオメトリを決定できるようになると、ポーズと実際の深度は変化します +Y が上向き、重力とは反対 対象物を平面全体(床面や壁面)に設置する場合は、素早く設置することが重要で、初期の深さや規模が不明でも許容されます。

デバイスの互換性

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

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

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