กําลังบัฟเฟอร์เฟรมกล้อง

เพิ่มใน ARCore 1.17.0

แอปส่วนใหญ่ต้องบัฟเฟอร์เฟรมกล้องเพียงเฟรมเดียวเพื่อการแสดงภาพ อย่างไรก็ตาม ARCore ยังรองรับการบัฟเฟอร์เฟรมกล้องหลายเฟรมในคิวพื้นผิวแบบกลมที่มีขนาดคงที่

แอปที่มีไปป์ไลน์การแสดงผลหลายเทรดจะใช้บัฟเฟอร์เพื่อช่วยปรับปรุงประสิทธิภาพการแสดงผลได้ บัฟเฟอร์ยังช่วยให้แอปแสดงผลเฟรมที่อัตราเฟรมคงที่มากขึ้นได้ ซึ่งจะลดภาพกระตุกที่เกิดจากการแสดงผล UI ช้า

เงื่อนไขเบื้องต้น

เปิดใช้การบัฟเฟอร์รูปภาพจากกล้องแล้วภายใต้เงื่อนไขใดๆ ต่อไปนี้

  1. เมื่อแอปเปิดใช้ด้วยการเรียกใช้ ArSession_setCameraTextureNames(ids) ด้วยรหัสพื้นผิวหลายรายการ

  2. เมื่อเปิดใช้ฟีเจอร์ ARCore อย่างน้อย 1 รายการที่ต้องมีการบัฟเฟอร์ภายใน ปัจจุบันมีฟีเจอร์ดังต่อไปนี้

    • รูปภาพเสริม
    • Augmented Faces
  3. ในอุปกรณ์ที่รองรับ ARCore บางรุ่นซึ่งต้องมีการบัฟเฟอร์ภายในเพื่อให้ทำงานได้อย่างถูกต้อง

ระบุว่าเปิดใช้การหน่วงเวลาเฟรมหรือไม่

หากต้องการตรวจสอบว่าอุปกรณ์หนึ่งๆ และเซสชัน AR เปิดใช้การบัฟเฟอร์เฟรม (หรือที่เรียกว่าการหน่วงเวลาเฟรม) อยู่หรือไม่ ให้ใช้เอาต์พุต 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.

หน่วยความจำ

เฟรมกล้องที่บัฟเฟอร์เพิ่มเติมแต่ละตัวจะเพิ่มการใช้งานหน่วยความจำ ตัวอย่างเช่น พื้นผิว 1080p ใช้หน่วยความจำประมาณ 6 MB (ได้มาคูณความละเอียด 1920 x 1080 คูณข้อมูล RGB 3 ไบต์ต่อพิกเซล)

ข้อพิจารณาด้านประสิทธิภาพ

เราไม่รับประกันว่าการใช้เฟรมกล้องหลายตัวจะลดความแปรปรวนของอัตราเฟรมได้ และไม่รับประกันว่าการใช้ไปป์ไลน์การแสดงผลแบบมัลติเธรดจะให้ประสิทธิภาพที่ดีขึ้นในทุกสถานการณ์ ปัจจัยต่อไปนี้มีผลต่อประสิทธิภาพในโลกจริง

  • ไปป์ไลน์การแสดงภาพแอป

  • โมเดล Threading ของแอป

  • สถาปัตยกรรม CPU ของอุปกรณ์

  • ระบบการกำหนดเวลาของระบบปฏิบัติการ

หากแอปของคุณไม่สามารถใช้กรอบกล้องเพิ่มเติม การใช้พื้นผิวมากกว่า 1 พื้นผิวก็จะไม่เกิดข้อได้เปรียบด้านประสิทธิภาพ

เปิดใช้การบัฟเฟอร์

หากต้องการกำหนด ARCore ที่จะใช้พื้นผิวเพื่อบัฟเฟอร์เฟรมกล้องขาเข้า ให้ใช้ ArSession_setCameraTextureNames(ids) เพื่อระบุอาร์เรย์ของรหัสพื้นผิวอย่างน้อย 1 รายการ ระบบจะเรียกใช้ฟังก์ชันนี้หลังจากการสร้างเซสชันเท่านั้น และโดยปกติจะเรียกเพียงครั้งเดียว

ระหว่างการเรียก ArSession_update() แต่ละครั้ง ARCore จะเขียนทับพื้นผิวถัดไปในคิวตามลำดับการวนรอบ หากแอปกำหนดรหัสพื้นผิวเพียงรหัสเดียว พื้นผิวเดียวกันจะถูกเขียนทับทุกครั้ง

ใช้ ArFrame_getCameraTextureName() เพื่อระบุรหัสพื้นผิวที่เชื่อมโยงกับเฟรมปัจจุบัน