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; }
次のステップ
- 拡張現実でストリートビューのジオメトリを使用する方法をご覧ください。