Przewodniki dotyczące poszczególnych platform
Android (Kotlin/Java)
Android NDK (C)
Unity (AR Foundation)
Unreal Engine
Jako deweloper aplikacji AR chcesz, aby użytkownicy mogli płynnie łączyć świat wirtualny z rzeczywistym. Gdy użytkownik umieszcza w scenie obiekt wirtualny, chce, aby wyglądał jak prawdziwe. Jeśli tworzysz aplikację, która umożliwia użytkownikom zakup mebli, chcesz, aby byli pewni, że fotel, który zamierzają kupić, zmieści się w ich domu.
Depth API pomaga aparatowi urządzenia rozpoznać rozmiar i kształt rzeczywistych obiektów w scenie. Tworzy ona obrazy głębi, czyli mapy głębi, dzięki czemu dodaje realizmu do aplikacji. Możesz wykorzystać informacje zawarte w obrazie głębi, aby zapewnić użytkownikowi realistyczne i realistyczne wrażenia.
Przypadki użycia interfejsu Depth API
Interfejs Depth API może umożliwiać zasłonięcie obiektów, zwiększać immersję i umożliwiać nowe interakcje, które zwiększają realizm rzeczywistości rozszerzonej. Poniżej znajdziesz kilka sposobów na wykorzystanie tego modelu w swoich projektach. Aby zobaczyć przykłady działania głębi w praktyce, zapoznaj się z przykładowymi scenami w ARCore Depth Lab, który pokazuje różne sposoby uzyskiwania dostępu do szczegółowych danych. Ta aplikacja w Unity jest typu open source na GitHubie.
Włącz zasłonięcie
Zasłonięcie, czyli dokładne renderowanie wirtualnego obiektu za rzeczywistymi obiektami, jest kluczowe dla wciągającego wrażenia AR. Weźmy na przykład wirtualną postać Andy'ego, którą użytkownik może zechcieć umieścić w scenie, na której widać trąbę obok drzwi. W renderze bez zasłonięcia Andy nakłada się nierealistycznie na krawędź bagażnika. Wykorzystując głębię sceny i zrozumiesz, jak daleko jest wirtualny Andy w odniesieniu do takiego otoczenia (np. drewnianego pnia), możesz dokładnie wyrenderować obraz Andy’ego z przesłonięciem, co sprawi, że obraz z otoczenia stanie się bardziej realistyczny.
Przekształcanie sceny
Zaprezentuj użytkownikowi nowy, wciągający świat, renderując wirtualne płatki śniegu, które osiadają na rękach i poduszkach na kanapie, lub stwórz mgłę w salonie. Za pomocą Depth możesz tworzyć sceny, w których wirtualne światła oddziałują na siebie, chowają się za obiektami i oświetlają je na nowo.
odległość i głębia ostrości;
Chcesz pokazać, że coś jest daleko? Za pomocą interfejsu Depth API możesz mierzyć odległość i dodawać efekty głębi pola, takie jak rozmycie tła lub pierwszego planu sceny.
Umożliwienie użytkownikom interakcji z obiektami AR
Umożliw użytkownikom „dotknięcie” świata w aplikacji, umożliwiając interakcję treści wirtualnych z rzeczywistym światem za pomocą fizyki i kolizji. Wirtualne obiekty mogą przelatywać przez rzeczywiste przeszkody, a wirtualne farby do paintballa mogą trafiać w rzeczywiste drzewo. Połączenie kolizji na podstawie głębi z fizyką gry może sprawić, że gra będzie bardziej realistyczna.
Ulepsz testy trafień
Głębokości można używać do polepszania wyników testu trafień. Testy kolizji płaszczyzny działają tylko na płaskich powierzchniach z teksturą, podczas gdy testy kolizji głębi są bardziej szczegółowe i działają nawet na obszarach niepłaskich i o małej ilości tekstur. Dzieje się tak, ponieważ testy uderzeń w głębię korzystają z informacji o głębi z sceny, aby określić prawidłową głębokość i orientację punktu.
W tym przykładzie zielone Andy reprezentują standardowe testy trafień samolotów, a czerwone – testy głębokości.
Zgodność urządzeń
Interfejs Depth API jest obsługiwany tylko na urządzeniach z wystarczającą mocą obliczeniową, aby obsługiwać głębię. Musisz go włączyć ręcznie w ARCore zgodnie z instrukcjami w artykule Włączanie głębi.
Niektóre urządzenia mogą też mieć czujnik głębi sprzętowej, np. czujnik czasu przelotu (ToF). Na stronie Urządzenia ARCore obsługiwane przez Depth API znajdziesz aktualną listę urządzeń, które obsługują Depth API, oraz listę urządzeń z obsługiwanym czujnikiem głębi sprzętowej, takim jak czujnik ToF.
Obrazy przedstawiające głębię
Depth API wykorzystuje algorytm głębi w ruchu do tworzenia obrazów głębi, które zapewniają widok świata w 3D. Każdy piksel obrazu głębi jest powiązany z pomiarami odległości sceny od kamery. Algorytm ten rejestruje wiele zdjęć urządzenia pod różnymi kątami i porównuje je, aby oszacować odległość do każdego piksela, gdy użytkownik porusza telefonem. Wybiórczo wykorzystuje systemy uczące się, aby zwiększyć głębię przetwarzania, nawet przy minimalnym ruchu użytkownika. Korzysta też z dodatkowego sprzętu, który może być zainstalowany na urządzeniu użytkownika. Jeśli urządzenie ma dedykowany czujnik głębi, np. ToF, algorytm automatycznie scala dane ze wszystkich dostępnych źródeł. Dzięki temu poprawia się istniejący obraz głębi i umożliwia uzyskanie głębi nawet wtedy, gdy kamera się nie porusza. Zapewnia też lepszą głębię na powierzchniach z niewielką ilością szczegółów lub bez nich, takich jak białe ściany, oraz w dynamicznych scenach z poruszającymi się ludźmi lub obiektami.
Na tych zdjęciach widać obraz z kamery przedstawiający korytarz z rowerem na ścianie oraz wizualizację obrazu głębi utworzonego na podstawie zdjęć z kamery. Obszary zaznaczone na czerwono znajdują się bliżej kamery, a obszary zaznaczone na niebiesko – dalej.
Głębia z ruchu
Dane o głębi stają się dostępne, gdy użytkownik przeniesie urządzenie. Algorytm może uzyskać dokładne oszacowania głębokości w odległości od 0 do 65 m. Najdokładniejsze wyniki uzyskuje się, gdy urządzenie znajduje się w odległości od pół do pięciu metrów od sceny w rzeczywistych warunkach. Wrażenia, które zachęcają użytkownika do większego poruszania urządzeniem, będą przynosić coraz lepsze wyniki.
Pobieranie obrazów głębi
Dzięki Depth API możesz pobierać obrazy głębi, które pasują do każdego kadru. Uzyskany obraz głębi ma tę samą sygnaturę czasową i pole widzenia co kamera. Prawidłowe dane o głębi są dostępne dopiero wtedy, gdy użytkownik zacznie poruszać urządzeniem, ponieważ głębia jest uzyskiwana na podstawie ruchu. Powierzchnie z niewielką liczbą cech, np. białe ściany, będą powiązane z nieprecyzyjną głębią.
Co dalej?
- Wypróbuj ARCore Depth Lab, aby dowiedzieć się, jak uzyskać dostęp do szczegółowych danych.