Głębia dodaje realizm

Przewodniki dotyczące poszczególnych platform

Deweloper aplikacji AR chce płynnie łączyć rzeczywistość wirtualną z rzeczywistością. Gdy użytkownik umieszcza wirtualny obiekt w swojej scenie, chce, aby wygląda on tak, jakby znajdował się on w świecie rzeczywistym. Jeśli tworzysz aplikację dla użytkowników, którzy chcą kupować meble, chcesz, by mieli pewność, że fotel, który zamierzają kupić, będzie zmieścił się w ich wnętrzu.

Interfejs Depth API ułatwia aparatowi urządzenia określenie rozmiaru i kształtu rzeczywistych obiektów na ekranie. Umożliwia tworzenie zdjęć głębi (map głębi), dzięki czemu aplikacja nabiera realizmu. Informacje zawarte w obrazie głębokim są bardziej atrakcyjne i realistyczne.

Przypadki użycia programowania za pomocą interfejsu Depth API

Interfejs Depth API może zwiększyć efekt przesłaniania obiektów, poprawić immersję i nowatorskie interakcje, które zwiększają realizm doświadczeń AR. Poniżej znajdziesz kilka sposobów jej wykorzystania we własnych projektach. Przykłady głębi w praktyce znajdziesz w przykładach scen w ARCore Depth Lab, które pokazują różne sposoby uzyskiwania dostępu do szczegółowych danych. Ta aplikacja Unity jest oprogramowaniem typu open source na GitHubie.

Włącz przesłanianie

Okulary, czyli dokładne renderowanie wirtualnych obiektów za rzeczywistymi obiektami, mają kluczowe znaczenie dla wciągających rozgrywek AR. Rozważmy wirtualnego Andy'ego, który użytkownik mógłby chcieć umieścić w scenie obejmującej bagaż obok drzwi. Po wyrenderowaniu bez okluzji, postać Andy nierealistycznie nachodzi na krawędź pnia. Jeśli zastosujesz głębię sceny i zobaczysz, jak daleko znajduje się wirtualny Andy od otoczenia, np. drewnianego pnia, możesz dokładnie wyrenderować obraz Andy’ego z przesłonięciem, dzięki czemu obraz będzie wyglądał znacznie bardziej realistycznie.

Przekształcanie sceny

Pokaż użytkownikowi nowy, wciągający świat, renderując wirtualne płatki śniegu, które osadą na łóżkach i poduszki swoich kanap, lub rzucaj salon w mgłą mgłę. Możesz użyć funkcji Głębia, aby stworzyć scenę, w której wirtualne światła wchodzą w interakcję z rzeczywistymi obiektami, chowają się za nimi i oświetlają prawdziwe obiekty.

Dystans i głębokość pola

Chcesz pokazać, że coś jest daleko? Za pomocą interfejsu Depth API możesz używać pomiaru odległości i dodawać efekty głębi pola, takie jak rozmycie tła lub pierwszego planu sceny.

Umożliwianie interakcji użytkowników z obiektami AR

Pozwól użytkownikom „dotykać” świata przez aplikację, umożliwiając treściom wirtualnym interakcję ze światem rzeczywistym w wyniku zderzeń i fizyki. Używaj wirtualnych obiektów, aby pokonywać przeszkody w świecie rzeczywistym lub rzucać wirtualne kule na prawdziwe drzewo. Łącząc grę, w której liczy się moc uderzenia, i fizykę gry, możesz ożywić swoje doświadczenia.

Usprawnienie testów trafień

Głębokość może być używana do poprawy wyników testów trafień. Testy trafień płaszczyzn działają tylko na powierzchniach planarnych z teksturą, natomiast testy z użyciem głębi są bardziej szczegółowe i działają nawet na obszarach niepłaskich i o niskiej tekstury. Dzieje się tak, ponieważ testy związane z głębokością używają informacji z sceny w celu określenia prawidłowej głębokości i orientacji punktu.

W poniższym przykładzie zielony przycisk Andys oznacza standardowe testy trafień płaszczyzny, a czerwony Andys – testy głębokości trafień.

Zgodność urządzeń

Interfejs Depth API jest obsługiwany tylko na urządzeniach z mocą obliczeniową do obsługi głębi. Musisz go włączyć ręcznie w ARCore zgodnie z opisem w sekcji Włączanie Depth.

Niektóre urządzenia mogą być też wyposażone w sprzętowy czujnik głębokości, np. czujnik czasu lotu. Na stronie Urządzenia obsługiwane przez ARCore znajdziesz aktualną listę urządzeń, które obsługują interfejs Depth API, oraz listę urządzeń wyposażonych w obsługiwany sprzętowy czujnik głębokości, np. czujnik ToF.

Obrazy głębi

Depth API wykorzystuje algorytm głębi podczas ruchu do tworzenia zdjęć głębi, które przedstawiają świat w 3D. Każdy piksel w obrazie o głębokości jest powiązany z pomiarem odległości od kamery. Ten algorytm bierze pod uwagę kilka zdjęć urządzenia pod różnymi kątami i porównuje je, aby oszacować odległość od każdego piksela, gdy użytkownik porusza telefonem. Wykorzystuje ona systemy uczące się do zwiększenia szczegółowości przetwarzania, nawet przy minimalnym ruchu użytkownika. Wykorzystuje też wszelki dodatkowy sprzęt, który może posiadać urządzenie. Jeśli urządzenie ma specjalny czujnik głębokości (np. ToF), algorytm automatycznie scali dane ze wszystkich dostępnych źródeł. Wzmocni to obecny efekt głębi i udostępnia głębię, nawet gdy aparat się nie porusza. Można też uzyskać lepszą głębię obrazu na powierzchniach z niewielką liczbą elementów, takich jak białe ściany lub w dynamicznych scenach z poruszającymi się ludźmi lub obiektami.

Na kolejnych obrazach widać zdjęcie korytarza z rowerem na ścianie oraz wizualizację głębi ostrości wygenerowanej na podstawie zdjęć z aparatu. Obszary zaznaczone na czerwono są bliżej aparatu, a niebieskie obszary – większe.

Głębokość ruchu

Dane o głębi stają się dostępne, gdy użytkownik porusza urządzenie. Algorytm ten potrafi uzyskać precyzyjne, dokładne oszacowania głębokości z odległości od 0 do 65 metrów. Najdokładniejsze wyniki otrzymasz, gdy urządzenie znajduje się w odległości od pół metra do około pięciu metrów od miejsca, w którym się dzieje. Usługi, które zachęcają użytkownika do częstszego przenoszenia urządzenia, przynoszą lepsze wyniki.

Pobierz zdjęcia głębi

Za pomocą interfejsu Depth API możesz pobierać obrazy głębi, które pasują do każdej klatki aparatu. Pozyskane zdjęcie głębi ma tę samą sygnaturę czasową i pole widzenia co aparat. Prawidłowe dane o głębokości są dostępne dopiero po rozpoczęciu poruszania urządzeniem przez użytkownika, ponieważ głębia ta jest określana na podstawie ruchu. Powierzchnie z niewielką liczbą elementów lub bez nich, takimi jak białe ściany, będą miały niedokładną głębię.

Co dalej?

  • Sprawdź ARCore Depth Lab, w którym przedstawiamy różne sposoby uzyskiwania dostępu do szczegółowych danych.