เพิ่มใน ARCore 1.17.0
แอปส่วนใหญ่ต้องบัฟเฟอร์เฟรมกล้องเดียวเพื่อแสดงผล อย่างไรก็ตาม ARCore ยังรองรับการบัฟเฟอร์กล้องหลายเฟรมในขนาดคงที่ด้วย คิวพื้นผิวแบบกลม
แอปที่มีไปป์ไลน์การแสดงผลหลายชุดข้อความสามารถใช้การบัฟเฟอร์เพื่อช่วยปรับปรุง ในการแสดงผล นอกจากนี้บัฟเฟอร์ยังช่วยให้แอปแสดงผลเฟรม อัตราเฟรมที่สม่ำเสมอ ซึ่งสามารถลดภาพกระตุกที่เกิดจาก การแสดงผล UI ช้า
เงื่อนไขเบื้องต้น
การบัฟเฟอร์รูปภาพจากกล้องจะเปิดใช้ภายใต้เงื่อนไขใดก็ได้ต่อไปนี้
เมื่อเปิดใช้โดยแอปโดยการเรียกใช้
Session.setCameraTextureNames(ids)
ที่มีรหัสพื้นผิวหลายรายการเมื่อฟีเจอร์ของ ARCore อย่างน้อย 1 รายการที่ต้องมีการบัฟเฟอร์ภายใน แล้ว ในปัจจุบัน ฟีเจอร์ดังกล่าวประกอบด้วย
- รูปภาพเสริม
- ใบหน้าเสริม
ในอุปกรณ์ที่รองรับ 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()
เพื่อระบุรหัสพื้นผิวที่เกี่ยวข้อง
กับเฟรมปัจจุบัน