Dodano w ARCore 1.17.0
Większość aplikacji do renderowania potrzebuje buforowania tylko 1 klatki aparatu. ARCore obsługuje jednak również buforowanie wielu klatek z aparatu w kolejce tekstur o stałym rozmiarze i rotacji.
Aplikacje z wielowątkowym potokiem renderowania mogą używać buforowania, aby poprawić wydajność renderowania. Buforowanie może też ułatwić aplikacjom renderowanie klatek z bardziej spójną liczbą klatek, co może ograniczyć zacinanie się obrazu spowodowane powolnym renderowaniem interfejsu.
Warunki wstępne
Buforowanie zdjęć z aparatu włącza się w każdym z tych warunków:
Gdy funkcja jest włączona przez aplikację, wywołując
ArSession_setCameraTextureNames(ids)
z wieloma identyfikatorami tekstur.Gdy włączona jest co najmniej jedna funkcja ARCore, która wymaga buforowania wewnętrznego. Obecnie obejmuje to te funkcje:
- Obrazy rozszerzone
- Rozszerzone twarze
Na niektórych urządzeniach obsługujących ARCore, które do prawidłowego działania wymagają buforowania wewnętrznego.
Sprawdzanie, czy opóźnienie klatek jest włączone
Aby sprawdzić, czy dane urządzenie i sesja AR mają włączone buforowanie klatek (opóźnienie klatek), użyj danych wyjściowych logcat narzędzia 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ęć
Każda dodatkowa buforowana ramka kamery zwiększa wykorzystanie pamięci. Na przykład tekstura 1080p zajmuje około 6 MB pamięci (można to uzyskać, mnożąc rozdzielczość 1920 x 1080 przez 3 bajty danych RGB na piksel).
Możliwe spowolnienie działania witryny
Korzystanie z kilku klatek aparatu nie gwarantuje, że zmienność liczby klatek się zmniejszy. Użycie wielowątkowego potoku renderowania nie gwarantuje uzyskania lepszej wydajności w każdej sytuacji. Na rzeczywistą wydajność wpływają te czynniki:
Potok renderowania aplikacji
Model podziału na wątki
Architektura procesora urządzenia
system planowania w systemie operacyjnym,
Jeśli aplikacja nie obsługuje dodatkowych ramek aparatu, użycie więcej niż 1 tekstury nie będzie miało wpływu na wydajność.
Włącz buforowanie
Aby poinstruować ARCore, które tekstury mają używać do buforowania przychodzących klatek aparatu, użyj parametru ArSession_setCameraTextureNames(ids)
, aby udostępnić tablicę z co najmniej 1 identyfikatorem tekstur.
Ta funkcja jest wywoływana dopiero po utworzeniu sesji i zwykle tylko raz.
Podczas każdego wywołania ArSession_update()
ARCore zastępuje następną teksturę w kolejce w sekwencji rotacyjne. Jeśli aplikacja ustawia tylko 1 identyfikator tekstury, za każdym razem ta sama tekstura będzie zastępowana.
Użyj ArFrame_getCameraTextureName()
, aby określić identyfikator tekstury powiązany z bieżącą ramką.