Reichweite mit raumbezogener Tiefe vergrößern

Hero-Image – raumbezogene Daten

Die ARCore Depth API unterstützt jetzt die raumbezogene Tiefe. Dadurch werden Reichweite und Geschwindigkeit der Depth API automatisch erhöht, wenn auch die Streetscape-Geometrie aktiviert ist. Wenn Sie sich an einem Standort mit VPS-Abdeckung und aktivierter Streetscape-Geometrie befinden, enthalten die Ausgabebilder von der Depth API Gelände- und Gebäudegeometrie, die aus einem Bereich von bis zu 65 Metern von der aktuellen Position entfernt abgerufen werden. Diese aus der Geometrie abgerufenen Tiefendaten werden mit lokalen Tiefenbeobachtungen zusammengeführt und aktualisiert, wenn die Nutzenden zu einem neuen Ort wechseln.

ARCore Depth API-Aufrufe bieten jetzt sowohl lokale Beobachtungen durch die Kamera als auch Gebäude und Gelände aus Streetscape-Geometriedaten, die zu einem einzigen Tiefenbild zusammengeführt werden.

Eingeschränkte Gerätekompatibilität

Die raumbezogene Tiefe ist auf allen Geräten verfügbar, die die Depth API unterstützen. Für diese Funktion ist kein unterstützter Hardware-Tiefensensor wie ein Flugzeitsensor (ToF) erforderlich. Die Depth API nutzt jedoch alle unterstützten Hardwaresensoren eines Geräts.

Auswirkungen auf die Leistung

Die Geometrie-Tiefe führt zu Beginn der Sitzung eine kleine einmalige Berechnung ein, um Streetscape-Geometrie in die Tiefendarstellung zu integrieren, wenn sie das erste Mal heruntergeladen wurde. Ansonsten erhöhen sich jedoch die Berechnungskosten für die Tiefe nicht messbar.

Tiefenbereich

Ohne die raumbezogene Tiefe sind Bilder in der Regel 20 bis 30 Meter entfernt, wobei die Dichte und Genauigkeit der Tiefenbeobachtungen über diesen Bereich hinaus reduziert werden. Wenn die raumbezogene Tiefe aktiviert ist, erreichen dich dicht erfasste Tiefenwerte normalerweise bis zu 65,535 Meter, selbst bei einer geringen Anfangsbewegung.

Anwendungsfälle

Die ARCore Depth API kann für alle bereits unterstützten Anwendungsfälle verwendet werden. Mit der Funktion „Geospatial Depth“ werden Tiefenbilder, die an VPS-unterstützten Standorten erfasst werden, schneller als zuvor mit großen Tiefentiefen dargestellt. Dies ermöglicht Anwendungsfälle, die auf eine weiträumige Tiefe in Außenumgebungen ausgerichtet sind. Im Folgenden sind einige Anwendungsfälle aufgeführt:

  • Verdeckung von virtuellen Inhalten und anderen visuellen Effekten in Gebäudemaßstab
  • Navigation im Freien
  • Entfernungsmessungen

Beschränkungen

Die raumbezogene Tiefe wird nur in Regionen unterstützt, in denen die VPS-Lokalisierung und Streetscape-Geometrie unterstützt werden. In anderen Regionen funktioniert die ARCore Depth API wie gewohnt ohne raumbezogene Werte.

Voraussetzungen

Machen Sie sich mit den grundlegenden AR-Konzepten und zur Konfiguration einer ARCore-Sitzung vertraut, bevor Sie fortfahren.

Raumbezogene Tiefe aktivieren

Prüfe in einer neuen ARCore-Sitzung, ob das Gerät eines Nutzers Depth und die Geospatial API unterstützt. Die Depth API wird aufgrund von Einschränkungen bei der Verarbeitungsleistung nicht von allen ARCore-kompatiblen Geräten unterstützt.

Die Tiefe ist bei ARCore standardmäßig deaktiviert, um Ressourcen zu sparen. Aktivieren Sie den Tiefenmodus, damit Ihre Anwendung die Depth API verwendet. Aktivieren Sie außerdem den raumbezogenen Modus und die Streetscape-Geometrie, um die raumbezogene Tiefe zu verwenden.

Java

Config config = session.getConfig();

// Check whether the user's device supports the Depth API.
boolean isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC);
boolean isGeospatialSupported =
    session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED);
if (isDepthSupported && isGeospatialSupported) {
  // These three settings are needed to use Geospatial Depth.
  config.setDepthMode(Config.DepthMode.AUTOMATIC);
  config.setGeospatialMode(Config.GeospatialMode.ENABLED);
  config.setStreetscapeGeometryMode(Config.StreetscapeGeometryMode.ENABLED);
}
session.configure(config);

Kotlin

val config = session.config

// Check whether the user's device supports the Depth API.
val isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC)
val isGeospatialSupported = session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED)
if (isDepthSupported && isGeospatialSupported) {
  // These three settings are needed to use Geospatial Depth.
  config.depthMode = Config.DepthMode.AUTOMATIC
  config.geospatialMode = Config.GeospatialMode.ENABLED
  config.streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED
}
session.configure(config)

Sobald die Funktion „Geospatiale Tiefe“ aktiviert ist, kann über vorhandene API-Aufrufe auf Tiefenbilder zugegriffen werden. Weitere Informationen hierzu finden Sie im Entwicklerleitfaden für die Tiefendaten.

Java

// Retrieve the depth image for the current frame, if available.
Image depthImage = null;
try {
  depthImage = frame.acquireDepthImage16Bits();
  // Use the depth image here.
} catch (NotYetAvailableException e) {
  // This 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.
} finally {
  if (depthImage != null) {
    depthImage.close();
  }
}

Kotlin

// Retrieve the depth image for the current frame, if available.
try {
  frame.acquireDepthImage16Bits().use { depthImage ->
    // Use the depth image here.
  }
} catch (e: NotYetAvailableException) {
  // This 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.
}

Nächste Schritte