Zwiększ zakres dzięki Głębokości geoprzestrzennej

Baner powitalny głębi geoprzestrzennych

ARCore Depth API obsługuje teraz głębię geoprzestrzenną, która automatycznie zwiększa zakres i szybkość interfejsu Depth API po włączeniu Streetscape Geometry. Gdy znajdujesz się w danej lokalizacji z zasięgiem VPS i włączoną geometrią Streetscape Geometry, zdjęcia wyjściowe przez interfejs Depth API obejmują obrazy terenu i geometrii budynków pobrane na danym obszarze do 65 metrów od bieżącej pozycji. Dane o głębokości pobrane z elementów geometrycznych są łączone z lokalnymi obserwacjami głębi i aktualizowane w miarę przemieszczania się użytkownika.

Wywołania interfejsu ARCore Depth API dostarczają teraz zarówno lokalne obserwacje z aparatu, jak i budynki i teren z funkcji Streetscape Geometry, połączone w jeden obraz głębi.

Zgodność urządzeń

Dane o głębokości geoprzestrzennej są dostępne na wszystkich urządzeniach obsługujących Depth API. Ta funkcja nie wymaga obsługiwanego sprzętowego czujnika głębokości, takiego jak czujnik czasu lotu. Interfejs Depth API korzysta jednak z obsługiwanych czujników sprzętowych, które może posiadać urządzenie.

Wpływ na wydajność

Funkcja Głębokość geoprzestrzenna wprowadza na początku sesji niewielkie, jednorazowe obliczenia w celu zintegrowania funkcji Streetscape Geometry z pobraną reprezentacją głębi, ale w inny sposób nie zwiększa kosztów jej obliczeń w sposób wymierny.

Zakres głębokości

W przypadku braku głębokości geoprzestrzennej typowe obszary głębi są dostępne z odległości około 20–30 metrów, a gęstość i dokładność obserwacji są ograniczone poza ten zakres. Po włączeniu Głębokości geoprzestrzennej często zdarza się, że gęstość próbek wartości głębokości przekracza 65, 535 metra nawet przy niewielkim początkowym ruchu.

Przypadki użycia

Interfejsu ARCore Depth API można używać we wszystkich istniejących przypadkach użycia, które są już obsługiwane. Dzięki funkcji Głębokość geoprzestrzenna zdjęcia głębi uzyskane w lokalizacjach obsługujących VPS są szybciej niż wcześniej wypełniane z dużą głębokością, co pozwala na kierowanie na duże odległości w środowiskach zewnętrznych. Przykłady użycia:

  • Okulary z przesłanianiem treści wirtualnych i innych efektów wizualnych na dużą skalę
  • Nawigacja na zewnątrz
  • Miary odległości

Ograniczenia

Głębia geoprzestrzenna jest obsługiwana tylko na obszarach, które obsługują lokalizację VPS i geometrię Streetscape Geometry. Na innych obszarach interfejs ARCore Depth API będzie działać normalnie bez wartości danych geoprzestrzennych.

Wymagania wstępne

Zanim przejdziesz dalej, upewnij się, że znasz podstawowe pojęcia związane z AR i wiesz, jak skonfigurować sesję ARCore.

Włącz głębokość geoprzestrzenną

W nowej sesji ARCore sprawdź, czy urządzenie użytkownika obsługuje funkcje Depth i Geospatial API. Z powodu ograniczeń mocy obliczeniowej nie wszystkie urządzenia zgodne z ARCore obsługują interfejs Depth API.

Aby oszczędzać zasoby, głębia jest domyślnie wyłączona w ARCore. Włącz tryb głębi, aby aplikacja używała interfejsu Depth API. Włącz też tryb geoprzestrzenny i geometrię Streetscape, aby używać głębokości geoprzestrzennej.

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);

Po włączeniu głębi geoprzestrzennych możesz uzyskiwać dostęp do obrazów głębi za pomocą dotychczasowych wywołań interfejsu API zgodnie z opisem w szczegółowym przewodniku dla programistów.

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

Co dalej?