Ditambahkan di ARCore 1.17.0
Sebagian besar aplikasi hanya perlu menyangga satu bingkai kamera untuk rendering. Namun, ARCore juga mendukung buffering beberapa bingkai kamera dalam antrian tekstur round-robin ukuran tetap.
Aplikasi dengan pipeline rendering multithread dapat menggunakan buffering untuk membantu meningkatkan performa rendering. Buffering juga dapat bantuan aplikasi membuat frame pada frame rate yang lebih konsisten, yang dapat mengurangi gagap visual yang disebabkan oleh lambat UI render .
Prasyarat
Penyangga gambar kamera menjadi diaktifkan di bawah salah satu kondisi berikut:
Ketika diaktifkan oleh aplikasi dengan memanggil
Session.setCameraTextureNames(ids)
dengan beberapa ID tekstur.Ketika satu atau lebih fitur Arcore yang memerlukan penyangga internal diaktifkan. Saat ini ini termasuk fitur-fitur ini:
- Gambar yang Diperbesar
- Wajah yang Diperbesar
Pada perangkat Arcore didukung tertentu yang membutuhkan penyangga internal untuk beroperasi dengan benar.
Tentukan apakah penundaan bingkai diaktifkan
Untuk menentukan apakah perangkat tertentu dan sesi AR memiliki bingkai penyangga (juga dikenal sebagai bingkai delay) yang aktif, gunakan adb
keluaran logcat:
# 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.
Penyimpanan
Setiap buffer bingkai kamera tambahan meningkatkan pemanfaatan memori. Misalnya, tekstur 1080p menghabiskan sekitar 6 MB memori (diperoleh dengan mengalikan resolusi 1920 x 1080 dengan tiga byte data RGB per piksel).
Pertimbangan kinerja
Menggunakan beberapa bingkai kamera tidak dijamin untuk mengurangi variabilitas kecepatan bingkai, dan menggunakan saluran rendering multithread tidak dijamin untuk memberikan kinerja yang lebih baik dalam semua keadaan. Faktor-faktor berikut mempengaruhi kinerja dunia nyata:
Pipa rendering aplikasi
Model utas aplikasi
Arsitektur CPU perangkat
Sistem penjadwalan sistem operasi
Jika aplikasi Anda tidak dapat memanfaatkan bingkai kamera tambahan, tidak ada keuntungan kinerja dalam menggunakan lebih dari satu tekstur.
Aktifkan buffering
Untuk menginstruksikan Arcore yang tekstur digunakan untuk penyangga frame kamera yang masuk, penggunaan Session.setCameraTextureNames(ids)
untuk menyediakan sebuah array dari satu atau lebih ID tekstur. Fungsi ini dipanggil hanya setelah pembuatan sesi, dan biasanya dipanggil hanya sekali.
Selama setiap panggilan ke Session.update()
, Arcore menimpa tekstur berikutnya di antrean dalam urutan round-robin. Jika aplikasi Anda hanya menyetel satu ID tekstur, tekstur yang sama akan ditimpa setiap kali.
Gunakan Frame.getCameraTextureName()
untuk menentukan tekstur ID terkait dengan frame.