Ditambahkan di ARCore 1.17.0
Sebagian besar aplikasi hanya perlu melakukan buffering pada satu frame kamera untuk rendering. Namun, ARCore juga mendukung buffering beberapa frame kamera dalam ukuran tetap antrean tekstur round-robin.
Aplikasi dengan pipeline rendering multi-thread dapat menggunakan buffering untuk membantu meningkatkan kualitas performa rendering. Buffering juga dapat membantu aplikasi merender frame dengan kecepatan frame yang konsisten, yang dapat mengurangi ketersendatan visual yang disebabkan oleh rendering UI lambat.
Prasyarat
Buffering gambar kamera diaktifkan dalam salah satu kondisi berikut:
Saat diaktifkan oleh aplikasi dengan memanggil
Session.setCameraTextureNames(ids)
dengan beberapa ID tekstur.Saat satu atau beberapa fitur ARCore yang memerlukan buffering internal . Saat ini, fitur tersebut mencakup:
- Gambar Augmented
- Tampilan Augmented
Pada perangkat yang didukung ARCore tertentu yang memerlukan buffering internal untuk beroperasi dengan benar.
Menentukan apakah penundaan frame diaktifkan
Untuk menentukan apakah perangkat dan sesi AR tertentu memiliki buffering frame (juga
(dikenal sebagai delay frame), gunakan output 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.
Memori
Setiap frame kamera tambahan yang di-buffer meningkatkan penggunaan memori. Misalnya, tekstur 1080p mengkonsumsi sekitar 6 MB memori (diperoleh dengan mengalikan sebuah resolusi 1920 x 1080 dengan tiga byte data RGB per piksel).
Pertimbangan performa
Menggunakan beberapa {i>frame<i} kamera tidak dijamin dapat mengurangi variabilitas kecepatan frame, dan penggunaan pipeline rendering multi-thread tidak dijamin memberikan performa yang lebih baik dalam segala situasi. Faktor-faktor berikut memengaruhi performa di dunia nyata:
Pipeline rendering aplikasi
Model threading aplikasi
Arsitektur CPU perangkat
Sistem penjadwalan sistem operasi
Jika aplikasi Anda tidak dapat memanfaatkan frame kamera tambahan, tidak ada keunggulan performa dalam menggunakan lebih dari satu tekstur.
Aktifkan buffering
Untuk menginstruksikan ARCore tentang tekstur yang akan digunakan untuk melakukan buffering frame kamera yang masuk, gunakan
Session.setCameraTextureNames(ids)
untuk menyediakan array yang berisi satu atau beberapa ID tekstur.
Fungsi ini hanya dipanggil setelah pembuatan sesi, dan biasanya hanya dipanggil
sekali.
Selama setiap panggilan ke Session.update()
, ARCore akan menimpa tekstur berikutnya di
antrean dalam urutan
{i>round-robin<i}. Jika aplikasi Anda hanya menetapkan satu ID tekstur,
tekstur yang sama
akan ditimpa setiap saat.
Gunakan Frame.getCameraTextureName()
untuk menentukan ID tekstur yang terkait
dengan {i>frame<i} saat ini.