Dodano w ARCore 1.17.0
Większość aplikacji musi buforować tylko jedną klatkę z aparatu na potrzeby renderowania. Pamiętaj jednak: ARCore obsługuje również buforowanie wielu klatek kamery o stałym rozmiarze w trybie rotacyjnym kolejki tekstur.
Aplikacje z wielowątkowym potokiem renderowania mogą korzystać z buforowania, aby ulepszyć działanie witryny wydajność renderowania. Buforowanie może też ułatwić aplikacjom renderowanie klatek stałą liczbę klatek, co może ograniczyć zacinanie się obrazu spowodowane powolnego renderowania interfejsu.
Warunki wstępne
Buforowanie zdjęć z aparatu włącza się w dowolnej z tych sytuacji:
Gdy funkcja zostanie włączona przez aplikację, dzwoniąc pod numer
Session.setCameraTextureNames(ids)
z wieloma identyfikatorami tekstur.Gdy co najmniej jedna funkcja ARCore wymagająca wewnętrznego buforowania jest włączono. Obecnie obejmuje to następujące funkcje:
- Obrazy rozszerzone
- Powiększone twarze
Na niektórych urządzeniach obsługujących ARCore, które wymagają wewnętrznego buforowania, aby które działają poprawnie.
Sprawdzanie, czy opóźnienie klatek jest włączone
Aby określić, czy dane urządzenie i sesja AR mają buforowanie klatek (również
znanej jako opóźnienie klatek), użyj danych wyjściowych logcat adb
:
# Camera frame buffering is turned off when frame delay is zero.
adb logcat | grep 'Update Frame Delay'
… I native : session.cc:3141 Update Frame Delay to 0 frames.
# Camera frame buffering is turned on when frame count is non-zero.
# Note: The size of the buffer can vary over time.
adb logcat | grep 'Update Frame Delay'
… I native : session.cc:3141 Update Frame Delay to 6 frames.
…
… I native : session.cc:3141 Update Frame Delay to 4 frames.
…
… I native : session.cc:3141 Update Frame Delay to 2 frames.
Pamięć
Buforowanie każdej dodatkowej klatki kamery zwiększa wykorzystanie pamięci. Przykład: tekstura 1080p zużywa około 6 MB pamięci (po pomnożeniu (rozdzielczość 1920 x 1080 na 3 bajty danych RGB na piksel).
Możliwe spowolnienie działania witryny
Użycie wielu klatek kamery nie gwarantuje zmniejszenia zmienności liczby klatek na sekundę, a zastosowanie wielowątkowego potoku renderowania które zapewniają większą skuteczność w każdej sytuacji. Na te czynniki mają wpływ rzeczywistą wydajność:
Potok renderowania aplikacji
Model podziału aplikacji na wątki
Architektura procesora urządzenia
system planowania systemu operacyjnego,
Jeśli aplikacja nie może wykorzystać dodatkowych ramek aparatu, większa wydajność przy użyciu więcej niż jednej tekstury.
Włącz buforowanie
Aby wskazać ARCore tekstury, które mają być używane do buforowania przychodzących klatek aparatu, użyj
Session.setCameraTextureNames(ids)
, aby podać tablicę z co najmniej 1 identyfikatorem tekstury.
Ta funkcja jest wywoływana dopiero po utworzeniu sesji i zwykle jest wywoływana tylko
raz.
Podczas każdego wywołania Session.update()
ARCore zastępuje następną teksturę w
w kolejności systematycznej. Jeśli aplikacja ustawia tylko jeden identyfikator tekstury,
ta sama tekstura zostanie za każdym razem zastąpiona.
Użyj Frame.getCameraTextureName()
, aby określić powiązany identyfikator tekstury
z bieżącą klatką.