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

เพิ่มใน ARCore 1.17.0

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

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

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

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

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

  2. เมื่อฟีเจอร์ของ ARCore อย่างน้อย 1 รายการที่ต้องมีการบัฟเฟอร์ภายใน แล้ว ในปัจจุบัน ฟีเจอร์ดังกล่าวประกอบด้วย

    • รูปภาพเสริม
    • ใบหน้าเสริม
  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 x 3 ไบต์ ข้อมูล RGB ต่อพิกเซล)

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

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

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

  • รูปแบบการแยกชุดข้อความแอป

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

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

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

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

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

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

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