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

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

サンプルを試す

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

Geospatial API を設定する

街並みのジオメトリを使用するには、プロジェクトで 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 コンテンツを適用する方法は 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 は、Streetscape Geometry とローカル センサー入力を組み合わせて、深度データを補正します。Geospatial Depth が有効になっている場合、出力の深度画像と元の深度画像が変更され、ローカルで測定された深度に加えて、ラスター化された Streetscape Geometry が含まれます。これにより、デプスを使用したポーズの精度が向上する可能性があります。