כפי שאתם בוודאי יודעים, מציאות מדומה (VR) נעשית פופולרית ככל שצועדים לאורך ציר הזמן. ממקורותיה על שולחן העבודה היא התרחבה לפלטפורמות אחרות, כשתחום המובייל הוא הנפוץ שבהם. בכל פעם שדמו של VR נייד מופיע אני מופתע מחדש מהאיכות שלו ומקפיצת המדרגה באיכות התוכן שמוצג. נכון להיום, VR נייד מוביל את הדרך, נגיש בכל סמארטפון וניתן לשימוש כמעט בכל מקום ובכל זמן בעקבות השחרור מהכבלים והחיבורים שפעם – בימיה הראשונים – היו נחלת הטכנולוגיה.
אחד הגורמים הקריטיים ב-VR הוא קצב הפריימים (Framerate), כשקצב לא קבוע ומהיר שלו עלול לגרום לבחילה ולתחושה לא נוחה בצריכת התוכן. הבעיה, לכאורה, פשוטה, אך קשה לפתרון. כיצד ניתן לשמור על ביצועים טובים תוך הגדלת האיכות הויזואלית ככל הניתן?
רבים מתחילים לדבר בתעשייה על ה-multiview, אז בואו נעצור וננסה להבין במה מדובר, אילו שיפורים ניתן לצפות ממנו ולמה בהחלט כדאי לשקול את הוספתו ל”צנרת” הטכנולוגית בכל הנוגע למציאות המדומה?
מהו צילום סטריאוסקופי (stereoscopic rendering)? קשה לפרט בקצרה את ההיבטים התיאורטיים של השאלה, אך הנקודה החשובה היא שאנחנו צריכים “לעבוד” על המוח שלנו לחשוב שהאובייקט הוא 3D אמיתי ולא מסך שטוח. כדי לבצע זאת, עלייך לתת לצופה שתי נקודות מבט על האובייקט ובמילים אחרות, לחקות את הדרך בהן העיניים רואות. כדי להצליח לעשות זאת, אנו יוצרים שתי מצלמות עם ריפוד (padding) קל – אחת מימין ואחת משמאל. אם הן חולקות את אותה תבנית הטלה, הרי שברור שכיוון המבט אינו דומה. בדרך זו, יש לנו שתי זוויות ראייה על אותה התמונה (ראו איור 1 בעמוד הבא).
ציר הזמן של ה-multiview
לפני שנתחיל להתעמק במספרים, הבה נבחן את התיאוריה (איור 2 בעמוד הבא). ציר זמן זה עוזר לנו לראות את האינטראקציות שמערכת ה-CPU-GPU שלנו יוצרת, אשר מאפשרות לה לספק פריים בעזרת סטריאו רגיל. מידע מפורט יותר על האופן שבו תזמון GPU עובד על מעבד Mali ניתן למצוא בבלוגים של פיטר האריס.
ראשית עובד ה-CPU על הכנת כל המידע הנחוץ, לאחר מכן מתבצעות משימות vertex ואחריהן משימות הפרגמנט. על ציר הזמן המוצג לעיל, הצבע הכחול בהיר מייצג את כל המשימות הקשורות לעין שמאל, הכחול הכהה מייצג את עין ימין ואילו הכתום את הקומפוזיציה (מה שממקם את שתי העיניים שלנו זו לצד זו על ההפרדה, ה”באפר”).
לצורך השוואה, (איור 3 בעמוד הבא) זהו אותו פריים המופק באמצעות Multiview. כפי שניתן לצפות, כיוון שה-CPU שלנו שולח רק פקודת זימון (draw call) אחת, אנחנו מעבדים פעם אחת בלבד על ה-CPU. בנוסף, על ה-GPU משימת הוורטקס קטנה יותר שכן איננו נדרשים להריץ את החלק של ה-shader שאיננו Multiview. משימת הפרגמנט, לעומת זאת, נותרת כשהייתה שכן עדיין מוטל עלינו לבחון את כל הפיקסלים על המסך, בזה אחר זה.
זמן CPU יחסי
כפי שניתן לראות, בגלל ההפחתה במספר פקודות הזימון שצריך להנפיק כדי ליצור את התמונה, ה-multiview עובד בעיקר על ה-CPU. נשקול לרגע יישום שבו ה-CPU שלנו מפגר מאחורי ה-GPU שלנו, או במילים אחרות, התהליך מוגבל על-ידי המעבד.
ביישום הזה (איור 4) מספר הקוביות משתנה עם הזמן, הוא מתחיל מאחד והולך ועולה עד לאלף. כולן מצוירות בעזרת פקודת זימון שונה – מובן שהיינו יכולים להשתמש באצוות אך זה מחוץ לתחום כאן. כצפוי, ככל שאנו מוסיפים יותר קוביות כך תלך הפקת הפריים ותארך זמן ממושך יותר. בגראף להלן, שבו מה שקטן יותר טוב יותר, מדדנו את זמן ה-CPU היחסי בין סטריאו רגיל (בכחול) לבין Multiview (באדום). אם ניזכר בציר הזמן, התוצאה הזו צפויה למדי שכן ה-multiview מקטין בחצי את מספר פקודות הזימון שלנו, ולפיכך גם את זמן ה-CPU (טבלה 1).
זמן GPU יחסי
על ה-GPU אנחנו מריצים משימות וורטקס ופרגמנט. כפי שראינו בציר הזמן (איור 3), שני סוגי המשימות אינם מושפעים באותה מידה מה-multiview. למעשה, רק משימות הוורטקס מושפעות. על מעבדי Mali מבוססי Midgard ו-Bifrost, רק חלקים הקשורים ל-multiview בשיידרים של הוורטקס מבוצעים עבור כל צפייה.
בדוגמה הקודמת שלנו בחנו זמן CPU יחסי, הפעם תיעדנו את הזמן היחסי של משימות וורטקס על ה-CPU. גם כאן, מה שקטן יותר, טוב יותר. את הסטריאו הרגיל מייצג הכחול ואת ה-multiview האדום.
מבט מהיר בטבלה (טבלה 2) מדגים את החיסכון כיוון שאת רוב החישוב של השיידר אין לנו יותר צורך לבצע פעמיים.
מהמדידות שלנו עולה כי ה-multiview הוא ההרחבה המושלמת עבור יישומים מוגבלי-מעבד, עם ציפייה ריאלית לשיפורים של בין 40% ל-50%. אך גם אם היישום שלכם עדיין לא מוגבל-מעבד, כדאי לכם לשקול את ה-multiview כיוון שהוא יכול גם לשפר באופן כלשהו את זמן עיבוד הוורטקס תמורת עלות נמוכה במיוחד.
ראוי לציין כי ה-multiview מותאם להפקה של מערך מארגים בתוך באפר (חוצץ) הפריימים, לפיכך התוצאה איננה מוכנה ישירות עבור הבאפר הקדמי. ראשית יהיה עליכם להפיק את שתי התמונות זו לצד זו, שלב הקומפוזיציה הזה הכרחי, אך ברוב המקרים הזמן שזה מצריך קצר בהשוואה לזמן הרינדור ולפיכך זניח. יתרה מכך, אפשר לשלב את השלב הזה ישירות בדפורמציה של העדשות או בתהליך ה-timewarp.
יישומי multiview
הדרך הברורה, שבה כבר דובר במאמר זה, היא להשתמש ב-multiview בצנרת של רינדור מציאות מדומה. כך, שתי נקודות המבט מרונדרות באמצעות אותן פקודות זימון על באפר פריימים משותף. אם ננסה לחשוב רגע מחוץ לקופסה, זה פותח פתח לעולם חדש של אפשרויות לחדשנות.
טכנולוגיית זיהוי מבט
בכל שנה מסכי ההתקנים שלנו הולכים וגדלים, התכנים שלנו נהיים מורכבים יותר וזמן הרינדור נשאר ללא שינוי. כבר ראינו מה ניתן לחסוך בצד של ה-CPU אך לעתים צוואר הבקבוק האמיתי הוא דווקא שיידרים של פרגמנט. טכנולוגיית זיהוי המבט המכונה foveated rendering מבוססת על התכונות הפיסיות של העין האנושית שבה רק 1% מהעין, הפוביאה (הגומה המרכזית שברשתית), ממופה אל 50% מהקורטקס הויוזאלי שלנו.
טכנולוגיית ה-foveated rendering משתמשת בתכונה הזו רק כדי לרנדר תמונות ברזולוציה גבוהה במרכז המבט, או ה”תמונה” שלכם, מה שמאפשר לרנדר גרסה ברזולוציה נמוכה יותר בקצוות הפריפריליים (תמונת הכותרת).
לאחר מכן עלינו לרנדר ארבע גרסאות של אותה סצנה, שתיים לכל עין, אחת ברזולוציה גבוהה ואחת ברזולוציה נמוכה. ה-multiview הופך את זה לאפשרי על-ידי כך שהוא שולח פקודת זימון אחת עבור כל ארבע נקודות המבט.
השתקפויות סטריאופוניות
השתקפויות הן גורם מפתח להשגת “היטמעות”, או תחושה של נוכחות אמיתית בסביבה של מציאות מדומה. עם זאת, כל דבר במציאות המדומה חייב להיות בסטריאו. לא נדון כאן בפרטים של השתקפויות סטריאופוניות בזמן אמת, לקוראים המעוניינים להתעמק בנושא מומלץ לקרוא את מאמרו של רוברטו לופז מנדז, Combined Reflections:Stereo Reflections in VR. כאן, רק אזכיר בקצרה שהשיטה מתבססת על השימוש במצלמה משנית המפיקה גרסת מראה של הסצנה. ה-multiview יכול לעזור לנו להשיג את השתקפות הסטריאו תמורת עלות גבוהה אך במעט מזו של ההשתקפות הרגילה, ולהפוך את ההשתקפויות בזמן אמת לאפשריות במציאות מדומה ניידת.
כפי שראינו, ה-multiview יכול לשנות את כללי המשחק עבור המציאות הוירטואלית בהתקנים ניידים שכן הוא מאפשר לנו להוריד את היישומים שלנו ובסופו של דבר לראות ולחוות את שתי נקודות המבט הדומות כאחת. כל פקודת זימון שאנו שומרים היא הזדמנות חדשה עבור אמנים ויוצרי תכנים להוסיף עוד חיים ותחושת מציאות ולשפר את חווית ה-VR הכללית.
אם אתם משתמשים במנוע המותאם במיוחד שלכם וב-OpenGL ES 3.0 עבור הפרויקט שלכם, תוכלו להתחיל כבר עתה לעבוד עם Multiview על התקנים מסוימים המתבססים על ARM Mali, כמו למשל סמסונג S6 ו-S7.
בנוסף, ה-multiview מעורר עניין הולך וגובר בקרב מובילים בתעשייה. חברת Oculus, שהתחילה בכך מאז ה-Mobile SDK 1.0.3, תומכת היום באופן ישיר ב-multiview על Samsung Gear VR ואם אתם משתמשים במנוע מסחרי כדוגמת Unreal, ישנן כבר היום תוכניות להתקדם לתמיכה ב-multiview בתוך צנרת הרינדור.