Tingkatkan rentang dengan Geospatial Depth

Banner Besar Geospasial

ARCore Depth API kini mendukung Geospatial Depth, yang secara otomatis meningkatkan rentang dan kecepatan Depth API saat Streetscape Geometry juga diaktifkan. Saat berada di lokasi dengan cakupan VPS dan mengaktifkan Streetscape Geometry, gambar output dari Depth API mencakup medan dan geometri bangunan yang diambil di area hingga 65 meter dari posisi saat ini. Data kedalaman yang diambil dari geometri ini digabungkan dengan pengamatan kedalaman lokal dan diperbarui saat pengguna berpindah ke lokasi baru.

Panggilan ARCore Depth API kini memberikan pengamatan lokal dari kamera serta bangunan dan medan dari Streetscape Geometry, yang digabungkan menjadi satu gambar kedalaman.

Kompatibilitas perangkat

Geospatial Depth tersedia di semua perangkat yang mendukung Depth API. Fitur ini tidak memerlukan sensor kedalaman hardware yang didukung, seperti sensor waktu penerbangan (ToF). Namun, Depth API menggunakan sensor hardware apa pun yang didukung yang mungkin dimiliki perangkat.

Dampak performa

Geospatial Depth memperkenalkan komputasi satu kali kecil di awal sesi untuk mengintegrasikan Streetscape Geometry ke dalam representasi kedalaman saat pertama kali didownload, tetapi tidak meningkatkan biaya komputasi kedalaman secara terukur.

Rentang kedalaman

Tanpa Geospatial Depth, rentang gambar kedalaman umum sekitar 20-30 meter, dengan kepadatan dan akurasi pengamatan kedalaman berkurang di luar rentang tersebut. Dengan mengaktifkan Geospatial Depth, biasanya nilai kedalaman sampel padat mencapai maksimum 65.535 meter, bahkan dengan sedikit gerakan awal.

Kasus penggunaan

ARCore Depth API dapat digunakan untuk semua kasus penggunaan yang ada dan sudah didukung. Dengan Geospatial Depth, gambar kedalaman yang diperoleh di lokasi yang didukung VPS akan diisi dengan kedalaman jarak jauh lebih cepat dari sebelumnya, memungkinkan kasus penggunaan yang menargetkan kedalaman jarak jauh di lingkungan luar ruangan. Beberapa kasus penggunaan mencakup:

  • Oklusi skala bangunan pada konten virtual dan efek visual lainnya
  • Navigasi luar ruangan
  • Pengukuran jarak

Batasan

Geospatial Depth hanya didukung di area yang mendukung pelokalan VPS dan Streetscape Geometry. Di area lain, ARCore Depth API akan berfungsi seperti biasa tanpa nilai Geospasial.

Prasyarat

Pastikan Anda memahami konsep dasar AR dan cara mengonfigurasi sesi ARCore sebelum melanjutkan.

Aktifkan Geospatial Depth

Dalam sesi ARCore baru, periksa apakah perangkat pengguna mendukung Depth dan Geospatial API. Tidak semua perangkat yang kompatibel dengan ARCore mendukung Depth API karena kendala daya pemrosesan.

Untuk menghemat resource, kedalaman dinonaktifkan secara default di ARCore. Aktifkan mode kedalaman agar aplikasi Anda menggunakan Depth API. Selain itu, aktifkan mode Geospatial dan Streetscape Geometry untuk menggunakan 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);

Setelah Geospatial Depth diaktifkan, gambar kedalaman dapat diakses melalui panggilan API yang ada seperti yang dijelaskan dalam panduan developer kedalaman.

// 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;
}

Langkah selanjutnya