הוספת נתונים מותאמים אישית תוך כדי הקלטה ב-AR Foundation עם טירגוט ל-Android

באמצעות Recording & Playback API אפשר להקליט סשן ולהשתמש בו במקום בפיד מצלמה בזמן אמת. עם זאת, ההקלטות האלה מכילות רק נתוני וידאו ונתוני חיישנים. אפשר גם להוסיף נתונים מותאמים אישית להקלטה של סשן, והנתונים יוחזרו אליכם במהלך ההפעלה כאילו הם חלק מתמונה של המצלמה.

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

תרחישים לדוגמה של נתונים מותאמים אישית

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

שימוש ב-AR תוך כדי תנועה

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

יצירת חוויות AR בשיתוף

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

דרישות מוקדמות

לפני שממשיכים, חשוב להבין את המושגים הבסיסיים של AR ואת האופן שבו מגדירים סשן ARCore.

איך מפעילים הקלטה עם נתונים מותאמים אישית

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

  1. מקבלים ARCoreRecordingConfig.
  2. יוצרים Track חדש עם מזהה UUID מותאם אישית. כל הנתונים המותאמים אישית יישמרו כאן.
  3. מוסיפים את Track ל-ARCoreRecordingConfig שיצרתם במהלך הגדרת הסשן.
// Initialize a new track with a custom UUID.
// Make sure to save the UUID because it is the ID that you will use
// to get your data back during playback.
var track = new Track {
 Id = Guid.Parse("de5ec7a4-09ec-4c48-b2c3-a98b66e71893") // from UUID generator
};

// Add the Track to the recordingConfig.
// recordingConfig must already be configured.
List<Track> tracks = new List<Track>();
tracks.Add(track);
recordingConfig.Tracks = tracks;

המערכת מתייחסת לכל טראקים חדשים כאל הקלטות נפרדות, וכל טראק מוקלט מקבל מזהה UUID משלו.

הגדרת הטראק עם נתונים נוספים

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

// Set additional data on this track.
// For example, describe where you recorded the session.
byte[] metadata = ...
track.Metadata = metadata;

הגדרת הטראק עם סוג MIME

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

אם לא מציינים סוג, הנתונים יסווגו בתור application/text. ARCore מתעלם מסוג MIME בקריאת נתונים.

// Set a MIME type for compatibility with external tools.
track.MimeType = "text/csv";

הקלטת נתיבי נתונים בהתאמה אישית

כל נתוני הטראק בהתאמה אישית מתועדים בפריימים. הזמן שבו מתועדים נתונים בפריים הוא אותו זמן שבו הנתונים יחזרו במהלך ההפעלה. לדוגמה: אם קוראים לפונקציה RecordTrackData() עם הערך A ב-00:07:02, מקבלים את הערך A בסימן 00:07:02 כשהטראק יופעל.

כדי להקליט טראק נתונים בהתאמה אישית, מפעילים את הפקודה RecordTrackData().

// Place an AR lamp in a room.
if (placeLampButtonWasPressed) {
  // Convert the lamp data into a byte array.
  var lampData = new byte[] { (byte) Lamp.FLOOR };  // a floor lamp
  recordingManager.RecordTrackData(trackGuid, lampData);
}

הפעלה של נתיבי נתונים בהתאמה אישית

חילוץ נתונים מותאמים אישית מהקלטת סשן במהלך הפעלה.

אתחול הפעלה

איפוס ההפעלה עם נתונים מותאמים אישית זהה לאיפוס ההפעלה של הקלטה רגילה של סשן.

החזרת נתונים בהתאמה אישית

קוראים לפונקציה GetUpdatedTrackData() כדי לאחזר את הנתונים המותאמים אישית שתועדו בפריים. ניתן לאחזר נתוני טראק מרובים מאותה מסגרת. לדוגמה, אם תפעילו את הפונקציה RecordTrackData() פעמיים באותו פריים במהלך ההקלטה, תקבלו שני מופעים של TrackData במהלך ההפעלה.

// Fetch the data recorded on a select frame and place it in a
// container object.
var trackDataList = recordingManager.GetUpdatedTrackData(trackGuid);

אחרי שה-TrackData נמצא באובייקט מאגר, מחלצים את הבייטים של הנתונים המותאמים אישית.

// Extract the bytes of custom data from the list of track data.
foreach (TrackData trackData in trackDataList) {
  var data = trackData.Data;
  Lamp lamp = Lamp.fromByte(data[0]); // This is the lamp!
}

מה השלב הבא?