Android SDK(Kotlin/Java)で周囲の建物や地形を使用する

Streetscape Geometry API は、シーン内の地形、建物、その他の構造物のジオメトリを提供します。ジオメトリは、オクルージョン、レンダリング、ヒットテスト API を介した AR コンテンツの配置に使用できます。ストリートビュー ジオメトリ データは、Google ストリートビュー画像から取得したものです。

サンプルを試す

geospatial_java サンプルアプリは、Streetscape のジオメトリを取得してレンダリングする方法を示しています。

Geospatial API を設定する

Streetscape Geometry を使用するには、プロジェクトに Geospatial API を設定する必要があります。 Geospatial API を有効にするの手順に沿って、Geospatial API を設定します。

ストリートビュー ジオメトリを有効にする

Geospatial API は、GeospatialModeGeospatialMode.ENABLED に設定され、StreetscapeGeometryModeStreetscapeGeometryMode.ENABLED に設定されている場合に、Streetscape Geometry データを取得します。

Java

Config config = session.getConfig();
// Streetscape Geometry requires the Geospatial API to be enabled.
config.setGeospatialMode(Config.GeospatialMode.ENABLED);
// Enable Streetscape Geometry.
config.setStreetscapeGeometryMode(Config.StreetscapeGeometryMode.ENABLED);
session.configure(config);

Kotlin

session.configure(
  session.config.apply {
    // Streetscape Geometry requires the Geospatial API to be enabled.
    geospatialMode = Config.GeospatialMode.ENABLED
    // Enable Streetscape Geometry.
    streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED
  }
)

ARCore セッションでストリートビュー ジオメトリを取得する

Session.getAllTrackables()StreetscapeGeometry.class を使用して、結果をフィルタします。

Java

session.getAllTrackables(StreetscapeGeometry.class);

Kotlin

session.getAllTrackables(StreetscapeGeometry::class.java)

StreetscapeGeometry について理解する

StreetscapeGeometry には、建物に関する情報が含まれています。

LOD 1 のビルド

StreetscapeGeometry.Quality.BUILDING_LOD_1 は、平らな上部まで上向きに押し出された建物のフットプリントで構成されます。建物の高さは正確でない可能性があります。

LOD 2 のビルド

StreetscapeGeometry.Quality.BUILDING_LOD_2 のジオメトリの忠実度が高まります。メッシュの壁や屋根は、建物の形状により近くなります。煙突や屋根の通気口などの小さい対象物は、メッシュの外側に突く可能性があります。

Mesh について理解する

Mesh は「ストリートビュー ジオメトリ」の表面の再構築を表すポリゴン メッシュです。 各 Mesh には、頂点バッファとインデックス バッファが含まれます。

AR コンテンツを StreetscapeGeometry にアタッチする

AR コンテンツを Streetscape Geometry にアタッチするには、次の 2 つの方法があります。

StreetscapeGeometry に対してヒットテストを行う

Frame.hitTest() を使用すると、ストリートビュー ジオメトリのヒットテストを行うことができます。交差点が見つかった場合、HitResult にはヒットした場所に関するポーズ情報と、ヒットした StreetscapeGeometry への参照が含まれます。このストリートビュー ジオメトリを Trackable.createAnchor() に渡して、このジオメトリに関連付けるアンカーを作成できます。

Java

for (HitResult hit : frame.hitTest(singleTapEvent)) {
  if (hit.getTrackable() instanceof StreetscapeGeometry) {
    Pose hitPose = hit.getHitPose();
    hit.getTrackable().createAnchor(hitPose);
  }
}

Kotlin

for (hit in frame.hitTest(singleTapEvent)) {
  if (hit.trackable is StreetscapeGeometry) {
    val hitPose = hit.hitPose
    hit.trackable.createAnchor(hitPose)
  }
}

Geospatial Depth を有効にする

Geospatial Depth: ストリートビューのジオメトリを組み合わせたもの ローカル センサー入力を使用して、奥行きデータを強化します。Geospatial Depth が有効な場合 出力される深度と未加工の奥行き画像は、ローカルで観測された奥行きに加えて、ラスタライズされたストリートビュー ジオメトリを含むように修正されます。 これにより、奥行きを使用したポーズの精度が向上する可能性があります。