Geospatial Depth(地理空間の深度)を使用して範囲を拡大する

地理空間の深部ヒーロー

ARCore Depth API が Geospatial Depth をサポートするようになりました。これにより、Street View Geometry も有効になっている場合に Depth API の範囲と速度が自動的に増加します。VPS の対象で、Street Geometry が有効になっている場所では、Depth API からの出力画像には、現在の位置から 65 m 以内の領域で取得した地形と建物のジオメトリが含まれます。ジオメトリから取得したこの深度データは、ローカルの深度観測結果と統合され、ユーザーが新しいロケーションに移動したときに更新されます。

ARCore Depth API 呼び出しを行うことで、カメラからのローカルな観測結果と、Street Geometry からの建物と地形の両方が 1 つの深度画像に統合されるようになりました。

デバイスの互換性

地理空間深度は、Depth API をサポートするすべてのデバイスで利用できます。この機能は、飛行時間(ToF)センサーなど、サポートされているハードウェア深度センサーを必要としません。ただし、Depth API はデバイスがサポートするサポート対象のハードウェア センサーを使用します。

パフォーマンスへの影響

地理空間デプスでは、セッション開始時に 1 回限りの少量の計算が導入されます。これにより、Street View ジオメトリが最初にダウンロードされたときに深度表現に統合されますが、深度計算の費用が大幅に増えることはありません。

奥行きの範囲

地理空間深度を使用しない場合、奥行きのある画像の一般的な範囲は約 20 ~ 30 m 離れており、その範囲を超えると奥行き観測の密度と精度は低下します。地理空間深度を有効にすると、通常は、初期の動きがわずかであっても、サンプリングされた深度値が最大 65.535 メートルに達することがよくあります。

ユースケース

ARCore Depth API は、すでにサポートされているすべてのユースケースで使用できます。地理空間深度を使用すると、VPS でサポートされているロケーションで取得された深度画像に対して、以前よりも速く長距離深度が入力されるため、屋外環境で長距離深度を使用したユースケースが実現されます。ユースケースには、次のようなものがあります。

  • 仮想コンテンツやその他の視覚効果の建物レベルのオクルージョン
  • 屋外ナビゲーション
  • 距離の計測

制限事項

地理空間深度は、VPS のローカライズとストリート ジオメトリをサポートしている地域でのみサポートされます。その他の領域では、ARCore Depth API は地理空間値を指定せずに通常どおりに動作します。

Prerequisites

先に進む前に、基本的な AR のコンセプトARCore セッションの構成方法を理解しておいてください。

地理空間深度を有効にする

新しい ARCore セッションで、ユーザーのデバイスが Depth と Geospatial API をサポートしているかどうかを確認します。処理能力の制約のため、ARCore 対応デバイスの中には、Depth API に対応していないものもあります。

リソースを節約するため、ARCore では深度はデフォルトで無効になっています。アプリで Depth API を使用するには、Depth モードを有効にします。 また、地理空間深度を使用するには、地理空間モードとストリートビュージオメトリを有効にします。

int32_t is_depth_supported = 0;
int32_t is_geospatial_supported = 0;

// Check whether the user's device supports the Depth API.
ArSession_isDepthModeSupported(ar_session, AR_DEPTH_MODE_AUTOMATIC,
                               &is_depth_supported);
ArSession_isGeospatialModeSupported(ar_session, AR_GEOSPATIAL_MODE_ENABLED,
                                    &is_geospatial_supported);
ArConfig* ar_config = NULL;
ArConfig_create(ar_session, &ar_config);
if (is_depth_supported && is_geospatial_supported) {
  // These three settings are needed to use Geospatial Depth.
  ArConfig_setDepthMode(ar_session, ar_config, AR_DEPTH_MODE_AUTOMATIC);
  ArConfig_setGeospatialMode(ar_session, ar_config,
                             AR_GEOSPATIAL_MODE_ENABLED);
  ArConfig_setStreetscapeGeometryMode(ar_session, ar_config,
                                      AR_STREETSCAPE_GEOMETRY_MODE_ENABLED);
}
CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS);

ArConfig_destroy(ar_config);

地理空間の深度を有効にすると、深度デベロッパー ガイドで説明されているように、既存の API 呼び出しを介して深度画像にアクセスできます。

// Retrieve the depth image for the current frame, if available.
ArImage* depth_image = NULL;
// If a depth image is available, use it here.
if (ArFrame_acquireDepthImage16Bits(ar_session, ar_frame, &depth_image) !=
    AR_SUCCESS) {
  // No depth image received for this frame.
  // This normally means that depth data is not available yet.
  // Depth data will not be available if there are no tracked
  // feature points. This can happen when there is no motion, or when the
  // camera loses its ability to track objects in the surrounding
  // environment.
  return;
}

次のステップ