Bingkai kamera penyangga

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:

  1. Ketika diaktifkan oleh aplikasi dengan memanggil Session.setCameraTextureNames(ids) dengan beberapa ID tekstur.

  2. Ketika satu atau lebih fitur Arcore yang memerlukan penyangga internal diaktifkan. Saat ini ini termasuk fitur-fitur ini:

    • Gambar yang Diperbesar
    • Wajah yang Diperbesar
  3. 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.