מאגר של מסגרות מצלמה

נוסף ב-ARCore 1.17.0

ברוב האפליקציות צריך לאחסן במאגר נתונים זמני רק של פריים אחד של מצלמה לצורך רינדור. אבל, לפעמים ב-ARCore יש גם תמיכה בתהליך אגירת נתונים של כמה פריימים של המצלמה בגודל קבוע בתור טקסטורה מסתובבת.

אפליקציות עם צינור עיבוד נתונים מרובה-שרשורים יכולות להשתמש בתהליך אגירת נתונים כדי לשפר את השירות של ביצועי הרינדור. תהליך אגירת הנתונים גם יכול לעזור לאפליקציות לעבד פריימים קצב פריימים עקבי, שיכול להפחית את הפגמים בצפייה, שנגרמות על ידי רינדור איטי של ממשק המשתמש.

תנאים מוקדמים

מאגר הנתונים הזמני של תמונות המצלמה מופעל באחד מהתנאים הבאים:

  1. כשהאפליקציה מופעלת, צריך להתקשר אל Session.setCameraTextureNames(ids) עם כמה מזהי טקסטורות.

  2. כאשר תכונת ARCore אחת או יותר שמחייבות אגירת נתונים פנימית . נכון לעכשיו, התכונות הבאות כוללות:

    • תמונות מרובות
    • פנים מורחבות
  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 צורך כ-6MB של זיכרון (מתקבל על ידי הכפלה של היא 1,920 x 1,080 על שלושה בייטים של נתוני RGB לכל פיקסל).

שיקולי ביצועים

שימוש בפריימים מרובים של מצלמה לא מבטיח להקטין את השונות של ושימוש בצינור עיבוד נתונים מרובה-שרשורים להניב ביצועים טובים יותר בכל מצב. הגורמים הבאים משפיעים ביצועים בעולם האמיתי:

  • צינור עיבוד הנתונים של רינדור אפליקציות

  • מודל השרשור של האפליקציה

  • הארכיטקטורה של המעבד (CPU) של המכשיר

  • מערכת התזמון של מערכת ההפעלה

אם האפליקציה לא יכולה לנצל מסגרות מצלמה נוספות, את יתרון הביצועים בשימוש במספר מרקמים.

הפעלת אגירת נתונים

כדי להורות ל-ARCore באילו טקסטורות להשתמש כדי לאחסן נתונים זמניים של מסגרות מצלמה, משתמשים Session.setCameraTextureNames(ids) כדי לספק מערך של מזהה טקסטורה אחד או יותר. הפונקציה הזו מופעלת רק לאחר יצירת הסשן, והיא נקראת בדרך כלל רק פעם אחת.

במהלך כל קריאה ל-Session.update(), ARCore מחליף את הטקסטורה הבאה ב- לפי סדר סיבובי. אם האפליקציה מגדירה רק מזהה טקסטורה אחד, אותו טקסטורה יוחלף בכל פעם.

משתמשים ב-Frame.getCameraTextureName() כדי לקבוע את מזהה הטקסטורה המשויך במסגרת הנוכחית.