Google jest zaangażowany w promowanie równości rasowej dla społeczności czarnych. Zobacz jak.
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Omówienie Depth API dla Unity

Depth API wykorzystuje kamerę RGB urządzenia obsługiwaną przez Depth API do tworzenia map głębi (zwanych również obrazami głębi). Następnie możesz użyć informacji dostarczonych przez mapę głębi, aby wirtualne obiekty dokładnie pojawiały się przed lub za obiektami świata rzeczywistego, zapewniając wciągające i realistyczne wrażenia użytkownika.

Na przykład poniższe obrazy przedstawiają wirtualną postać Androida w rzeczywistej przestrzeni zawierającej bagażnik obok drzwi. Na pierwszym obrazie wirtualny Android nierealistycznie zachodzi na krawędź pnia. Na drugim zdjęciu Android jest odpowiednio przesłonięty, przez co w swoim otoczeniu wydaje się znacznie bardziej realistyczny.

Wirtualne obiekty mogą również wchodzić w interakcje ze sceną. ARCore Depth Lab ( kod źródłowy ) prezentuje różnorodne doświadczenia AR z wykrywaniem głębi, których możesz użyć jako punktu wyjścia dla swojej aplikacji.

Urządzenia obsługujące Depth API

Aktualna lista urządzeń obsługujących Depth API znajduje się na stronie urządzeń obsługiwanych przez ARCore . Ta strona zawiera również listę urządzeń, które mają obsługiwany sprzętowy czujnik głębokości, taki jak czujnik czasu przelotu (lub czujnik ToF).

Mapy głębokości

Depth API używa algorytmu głębi z ruchu do tworzenia map głębi, które można uzyskać za pomocą Frame.CameraImage.UpdateDepthTexture() .

Ten algorytm pobiera obrazy z wielu urządzeń pod różnymi kątami i porównuje je, aby oszacować odległość do każdego piksela, gdy użytkownik porusza telefonem. Jeśli urządzenie ma obsługiwany sprzętowy czujnik głębokości, taki jak czujnik czasu przelotu (lub czujnik ToF), dane te są automatycznie uwzględniane w przetwarzanej głębokości. Poprawia to istniejącą mapę głębi i zapewnia głębię nawet wtedy, gdy kamera się nie porusza. Zapewnia również lepszą głębię na powierzchniach z niewielką liczbą cech lub bez, takich jak białe ściany, lub w dynamicznych scenach z poruszającymi się ludźmi lub obiektami.

Poniższe obrazy pokazują obraz z kamery korytarza z rowerem na ścianie oraz wizualizację mapy głębi utworzonej z obrazów z kamery.

Format mapy głębi

Każda mapa głębi jest reprezentowana jako Texture2D .

ARCore używa formatu DEPTH16 do map głębokości, z trzema najbardziej znaczącymi bitami zawsze ustawionymi na 000 .

Każdy piksel na mapie głębi jest reprezentowany przez 16-bitową liczbę całkowitą bez znaku. 13 najmniej znaczących bitów zawiera odległość w milimetrach do szacowanej powierzchni od płaszczyzny obrazu kamery, wzdłuż osi optycznej kamery.

Wymagania dotyczące ruchu

Depth API wykorzystuje śledzenie ruchu i sprzętowy czujnik głębokości, jeśli jest obecny i obsługiwany. Algorytm głębi ruchu skutecznie traktuje pary obrazów z kamer jako dwie obserwacje zakładanej sceny statycznej. Jeśli części otoczenia się poruszają - na przykład osoba porusza się przed kamerą - statyczne elementy sceny będą miały dokładne oszacowanie głębokości, ale części, które się poruszyły, nie.

Aby głębokość działała dobrze na urządzeniach bez obsługiwanego sprzętowego czujnika głębokości, użytkownik będzie musiał przesunąć urządzenie o co najmniej kilka centymetrów.

Zapewnienie dokładnego odczytu głębokości

Głębokość jest przewidziana dla scen od 0 do 8 metrów. Optymalną dokładność pomiaru głębokości uzyskuje się w odległości od 0.5 metra do 5 metrów od kamery. Błąd zwiększa się kwadratowo wraz ze wzrostem odległości od aparatu.

W przypadku braku sprzętowego czujnika głębokości do wykonania zadania szacowania głębi są używane tylko informacje o kolorach RGB. Powierzchnie z niewielką liczbą cech lub bez, takie jak białe ściany, będą kojarzone z nieprecyzyjną głębią.

Zrozumienie wartości głębokości

Biorąc pod uwagę punkt A na obserwowanej geometrii świata rzeczywistego i punkt 2D a reprezentujący ten sam punkt na obrazie głębokości, wartość podana przez Depth API przy a jest równa długości CA rzutowanej na główną oś. Można to również nazwać współrzędną z punktu A względem początku kamery C Podczas pracy z Depth API ważne jest, aby zrozumieć, że wartości głębokości nie są długością samego promienia CA , ale jego projekcją.

Następne kroki

Zacznij używać Depth API we własnych aplikacjach. Aby dowiedzieć się więcej, zobacz: