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

Geospatial Depth ヒーロー

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

<ph type="x-smartling-placeholder"> <ph type="x-smartling-placeholder">

ARCore Depth API 呼び出しで、カメラからの局所的な観測と、Streetscape Geometry からの建物と地形の両方を、単一の深度画像に結合できるようになりました。

デバイスの互換性

Geospatial Depth は、Depth API をサポートするすべてのデバイスで利用できます。この機能に、飛行時間(ToF)センサーなど、サポートされているハードウェア奥行きセンサーは必要ありません。ただし、Depth API は、デバイスでサポートされているハードウェア センサーを使用します。

パフォーマンスへの影響

Geospatial Depth は、セッションの開始時に 1 回限りの小さな計算を導入し、Streetscape Geometry を最初のダウンロード時に深度表現に統合しますが、それ以外の場合、深度の計算コストは明らかに増加しません。

奥行きの範囲

Geospatial Depth がなければ、奥行き画像の一般的な範囲は 20 ~ 30 m ほど離れ、その範囲を超えると深度観測の密度と精度が低下します。Geospatial Depth を有効にすると、初期の動きがわずかでも、密にサンプリングされた深度値が最大 65.535 m に達することがよくあります。

<ph type="x-smartling-placeholder">

ユースケース

ARCore Depth API は、すでにサポートされているすべての既存のユースケースに使用できます。Geospatial Depth は、VPS でサポートされている場所で取得された奥行き画像に、これまでよりも迅速に長距離の深度が取り込まれるため、屋外環境で長距離の深度をターゲットとするユースケースが可能になります。ユースケースには、次のようなものがあります。

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

制限事項

Geospatial Depth は、VPS のローカライズと Streetscape Geometry をサポートしているエリアでのみサポートされます。その他の地域では、地理空間値がなくても ARCore Depth API は通常どおり動作します。

前提条件

AR の基礎的なコンセプトを理解しておいてください。 と ARCore セッションを構成する方法を確認してください。

Geospatial Depth を有効にする

新しい ARCore セッションで、次の操作を行います。 ユーザーのデバイスが Depth と Geospatial API をサポートしているかどうかを確認する 処理能力の制約により、ARCore 対応デバイスはすべて Depth API をサポートしているわけではありません。

リソースを節約するため、ARCore では深度がデフォルトで無効になっています。 アプリで Depth API を使用するには、深度モードを有効にします。 さらに、地理空間モードとストリートビュー ジオメトリを有効にして、 Geospatial 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);

Geospatial Depth を有効にすると、Depth デベロッパー ガイドで説明されているように、既存の 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;
}

次のステップ