Die Raw Depth API bietet Tiefendaten für ein Kamerabild, die genauer sind als die Daten der Full Depth API, aber nicht immer alle Pixel abdecken. Rohe Tiefenbilder können zusammen mit den zugehörigen Konfidenzbildern weiterverarbeitet werden. So können Apps nur die Tiefendaten verwenden, die für ihren individuellen Anwendungsfall ausreichend genau sind.
Gerätekompatibilität
Die Rohtiefe ist auf allen Geräten verfügbar, die die Depth API unterstützen. Die Raw Depth API erfordert wie die vollständige Depth API keinen unterstützten Hardware-Tiefensensor wie einen Time-of-Flight-Sensor (ToF). Sowohl die Raw Depth API als auch die Full Depth API nutzen jedoch alle unterstützten Hardwaresensoren, die ein Gerät haben kann.
Raw Depth API und Full Depth API im Vergleich
Die Raw Depth API bietet Tiefenschätzungen mit höherer Genauigkeit. Raw-Tiefenbilder enthalten jedoch möglicherweise keine Tiefenschätzungen für alle Pixel im Kamerabild. Im Gegensatz dazu liefert die vollständige Depth API eine geschätzte Tiefe für jedes Pixel. Die Tiefendaten pro Pixel sind jedoch aufgrund der Glättung und Interpolation der Tiefenschätzungen möglicherweise weniger genau. Format und Größe von Tiefenbildern sind bei beiden APIs gleich. Nur der Inhalt unterscheidet sich.
In der folgenden Tabelle werden die Unterschiede zwischen der Raw Depth API und der Full Depth API anhand eines Bildes von einem Stuhl und einem Tisch in einer Küche veranschaulicht.
API | Gibt Folgendes zurück: | Kamerabild | Tiefenbild | Bild: Zuverlässigkeit |
---|---|---|---|---|
Raw Depth API |
|
|||
Full Depth API |
|
– |
Bilder mit Zuverlässigkeitsbewertung
In den Konfidenzbildern, die von der Raw Depth API zurückgegeben werden, haben hellere Pixel höhere Konfidenzwerte. Weiße Pixel stehen für volle Konfidenz und schwarze Pixel für keine Konfidenz. Im Allgemeinen haben Bereiche im Kamerabild mit mehr Textur, z. B. ein Baum, eine höhere Zuverlässigkeit der Rohtiefe als Bereiche ohne Textur, z. B. eine kahle Wand. Oberflächen ohne Textur haben in der Regel eine Zuverlässigkeit von null.
Wenn das Zielgerät einen unterstützten Hardware-Tiefensensor hat, ist die Wahrscheinlichkeit höher, dass Bereiche des Bilds, die sich nahe genug an der Kamera befinden, auch bei texturlosen Oberflächen zuverlässig erkannt werden.
Compute-Kosten
Die Rechenkosten der Raw Depth API betragen etwa die Hälfte der Rechenkosten für die Full Depth API.
Anwendungsfälle
Mit der Raw Depth API können Sie Tiefenbilder abrufen, die eine detailliertere Darstellung der Geometrie der Objekte in der Szene bieten. Rohe Tiefendaten können nützlich sein, wenn Sie AR-Inhalte erstellen, bei denen für Aufgaben zur Geometrieerkennung eine höhere Tiefengenauigkeit und mehr Details erforderlich sind. Beispiele für Anwendungsfälle:
- 3D-Rekonstruktion
- Messung
- Formerkennung
Vorbereitung
Machen Sie sich mit den grundlegenden AR-Konzepten und der Konfiguration einer ARCore-Sitzung vertraut, bevor Sie fortfahren.
Tiefe aktivieren
Prüfen Sie in einer neuen ARCore-Sitzung, ob das Gerät eines Nutzers die Funktion „Tiefe“ unterstützt. Nicht alle ARCore-kompatiblen Geräte unterstützen die Depth API aufgrund von Einschränkungen bei der Rechenleistung. Um Ressourcen zu sparen, ist die Tiefenerfassung in ARCore standardmäßig deaktiviert. Aktivieren Sie den Tiefenmodus, damit Ihre App die Depth API verwendet.
var occlusionManager = // Typically acquired from the Camera game object.
// Check whether the user's device supports the Depth API.
if (occlusionManager.descriptor?.supportsEnvironmentDepthImage)
{
// If depth mode is available on the user's device, perform
// the steps you want here.
}
Aktuelles Rohtiefenbild erfassen
Rufen Sie AROcclusionManager.TryAcquireEnvironmentDepthCpuImage()
auf und verwenden Sie AROcclusionManager.environmentDepthTemporalSmoothingRequested
, um das neueste Rohtiefenbild auf der CPU zu erfassen.
Aktuelles Rohbild mit dem Konfidenzgrad der Tiefendaten erfassen
Rufen Sie AROcclusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage()
auf und verwenden Sie AROcclusionManager.environmentDepthTemporalSmoothingRequested
, um das Konfidenzbild auf der CPU zu erfassen.
// Attempt to get the latest environment depth image.
if (occlusionManager && occlusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage(out XRCpuImage image))
{
using (image)
{
UpdateRawImage(m_RawEnvironmentDepthConfidenceImage, image);
}
}
else
{
m_RawEnvironmentDepthConfidenceImage.enabled = false;
}