Samsung Galaxy XR כבר כאן, והוא מבוסס על Android XR! הפוסט הזה בבלוג הוא חלק מ שבוע ה-Spotlight של Android XR, שבו אנחנו מספקים משאבים – פוסטים בבלוג, סרטונים, קוד לדוגמה ועוד – שנועדו לעזור לכם ללמוד, לפתח ולהכין את האפליקציות שלכם ל-Android XR.
השבוע, סמסונג השיקה את Galaxy XR, שפותח בשיתוף עם Google ו-Qualcomm. זו תקופה מרגשת למפתחים, ואנחנו רוצים לעזור לכם להפיק את הביצועים הטובים ביותר מאפליקציית ה-XR שלכם.
ביצועים נמוכים של משחקים ואפליקציות במכשירים שהם לא XR יכולים להיות מתסכלים למשתמשים, אבל בעולם ה-XR, ביצועים הם לא רק אופציונליים, הם חיוניים להצלחת האפליקציה. אם לא תגיעו ליעד של קצב הפריימים ב-XR, זה עלול לגרום לבעיות חמורות הרבה יותר, כמו מחלת תנועה.
במדריך הזה נסביר על אופטימיזציות הביצועים החיוניות שצריך להבין כדי לפתח ב-Android XR. תלמדו אילו תכונות מספקות את שיפורי הביצועים הגדולים ביותר, מתי להשתמש בהן ואיך הן פועלות יחד כדי לעזור לכם להגיע ליעדי קצב הפריימים שלכם.
אלה היעדים שלנו:
- מינימום: 72fps (חלק מהנחיות האיכות שלנו להפעלה)
- אופציונלי: 90fps עם תקציב של 11ms לכל פריים
כדי להבין למה חשוב לשמור על קצב פריימים גבוה, כדאי לעיין בהנחיות שלנו בנושא ביצועים.
תכונות ספציפיות ל-XR שקשורות לביצועים
נתחיל בשתי תכונות ביצועים ספציפיות ל-XR: רינדור ממוקד ודגימת משנה של Vulkan.
רינדור ממוקד
רינדור ממוקד הוא אופטימיזציה שיש לה שני מצבים. הראשון הוא מצב סטטי שבו מרכז המסך מרונדר ברזולוציה גבוהה יותר, והרזולוציה יורדת בהדרגה ככל שמתרחקים מהמרכז.
השני הוא מצב מעקב עיניים, שבו המערכת מעבדת את האזור שאתם מסתכלים עליו בפירוט מלא, ומפחיתה את איכות התצוגה בראייה ההיקפית. היא בעצם מחקה את האופן שבו הראייה האנושית פועלת – אנחנו רואים פרטים קטנים רק באזור הספציפי שבו אנחנו מתמקדים.
רינדור ממוקד מפחית באופן משמעותי את עומס העבודה של ה-GPU בלי לפגוע באיכות התמונה שהמשתמש רואה. היתרון של רינדור ממוקד הוא שהמשתמשים לא יבחינו באיכות המופחתת בראייה ההיקפית שלהם, אבל ה-GPU שלכם בהחלט יבחין בביצועים המשופרים.
נניח שאתם בונים חוויה של מוזיאון עם פריטים מורכבים בתלת-ממד. בלי רינדור ממוקד, יהיה קשה לשמור על קצב של 90 פריימים לשנייה כשמנסים לרנדר את כל מה שנמצא ב"שדה הראייה". עם רינדור ממוקד, אפשר לשמור על הפרטים המורכבים האלה במקום שבו המשתמש מסתכל, אבל הסביבה ברקע מרונדרת באיכות נמוכה יותר. המשתמשים לא יבחינו בהבדל, אבל יהיה לכם יותר מקום להוסיף עוד פרטים לסצנה.
Vulkan Subsampling
התכונה "דגימת משנה של Vulkan" היא החברה הכי טובה של "רינדור ממוקד". בעוד שרינדור ממוקד קובע מה לרנדר ברמות איכות שונות, תת-דגימה של Vulkan מטפלת באופן היעיל של רינדור רמות האיכות השונות באמצעות מפות צפיפות של מקטעים.
בשילוב עם רינדור ממוקד, דגימת המשנה של Vulkan משפרת את הביצועים ב-0.5 אלפיות השנייה. הוא גם עוזר להחליק קצוות משוננים בראייה ההיקפית, כך שהתמונה הכוללת נראית נקייה יותר.
לדוגמה, במשחק של סימולטור טיסה שבו המשתמשים מתמקדים במכשירים ובפקדים, שילוב של רינדור ממוקד עם Vulkan Subsampling מאפשר לרנדר את הפקדים המפורטים בצורה חדה, אבל המבנה ההיקפי של תא הטייס משתמש בפחות משאבים. חצי אלפית השנייה הנוספת הזו אולי לא נשמעת כמו הרבה, אבל זה ההבדל בין מקום לרכיב אינטראקטיבי נוסף לבין השמטת פריימים ברגעים אינטנסיביים.
תכונות GPU לסצנות מורכבות
בנוסף ל-Foveated Rendering ול-Vulkan Subsampling, יש כמה תכונות של GPU שמפחיתות עומס מיותר באמצעות יצירת מופעים חכמה ו-culling. הן יעילות במיוחד בסצנות מורכבות עם גיאומטריה שחוזרת על עצמה או הסתרה משמעותית.
מגירת GPU Resident
הכלי GPU Resident Drawer משתמש באופן אוטומטי ביצירת מופעים של GPU כדי לצמצם את הבקשות להזזת פריטים גרפיים ולפנות זמן עיבוד ב-CPU. לכן, במקום שה-CPU יספר ל-GPU על כל אובייקט בנפרד, ה-GPU מקבץ אובייקטים דומים יחד.
התכונה הזו הכי יעילה בסצנות גדולות עם רשתות שחוזרות על עצמן, כמו עצים ביער, רהיטים בבניין משרדים או אביזרים שמפוזרים בסביבה.
דמיינו סצנה של יער עם 200 עצים שמשתמשים באותו רשת בסיס. בלי GPU Resident Drawer, יש 200 בקשות להזזת פריט גרפי שמעמיסות על ה-GPU, ולכן מפנות את ה-CPU. כשמפעילים את התכונה הזו, ה-GPU יוצר מופעים של העצים האלה בצורה חכמה, וכך מפחית את מספר הבקשות להזזת פריט גרפי ל-5 עד 10 בלבד. זה חיסכון עצום ב-GPU, שאפשר להשקיע בלוגיקה של הגיימפליי או בחישובים פיזיקליים.
הסתרת אובייקטים מוסתרים ב-GPU
התכונה GPU Occlusion Culling משתמשת ב-GPU במקום ב-CPU כדי לזהות אובייקטים מוסתרים ולדלג על העיבוד שלהם. הוא מזהה באופן אוטומטי מה מוסתר מאחורי אובייקטים אחרים, כדי שלא תבזבזו את ה-GPU על דברים שהמשתמש לא יכול לראות.
התכונה הזו שימושית במיוחד בחללים פנימיים עם כמה חדרים, בסביבות צפופות או בסצנות אדריכליות שבהן קירות, רצפות וחפצים חוסמים את הנוף באופן טבעי.
לדוגמה, נניח שאתם בונים חוויה של בית עם חדרים מרובים. כשהמשתמש נמצא בסלון, למה לבזבז מחזורי GPU על רינדור של המטבח המפורט שמוסתר לגמרי מאחורי קיר? התכונה "הסתרת אובייקטים מוסתרים ב-GPU" מדלגת באופן אוטומטי על רינדור האובייקטים המוסתרים האלה, וכך משאירה יותר תקציב ביצועים למה שבאמת גלוי.
מעקב אחרי הביצועים
לא מספיק רק להשתמש בתכונות האלה. אתם גם צריכים למדוד את האופטימיזציות כדי לכמת את ההשפעה שלהן ולוודא שהשינויים שביצעתם באמת עובדים.
Performance Metrics API
Performance Metrics API מאפשר לעקוב בזמן אמת אחרי השימוש בזיכרון, ביצועי המעבד (CPU) וביצועי ה-GPU של האפליקציות. הוא מספק נתונים מקיפים משכבות הקומפוזיטור וזמן הריצה, כך שתוכלו לראות בדיוק מה קורה באפליקציה.
לפני שמבצעים שינויים, צריך לקבוע נקודת השוואה, להחיל אופטימיזציה, למדוד את ההשפעה ולחזור על התהליך. הגישה הזו מבוססת על נתונים, כך שאתם יודעים שאתם באמת משפרים את הביצועים ולא רק מנחשים.
לפני שמפעילים רינדור foveated, זמן רינדור הפריים של ה-GPU יכול להיות 13 אלפיות השנייה, שזה יותר מהתקציב של 11 אלפיות השנייה. מפעילים את הרינדור הממוקד, מודדים שוב, ומקווים לראות שהזמן ירד ל-9 אלפיות השנייה. זה אומר שחסכתם 4 מילי-שניות, ואתם יכולים להשתמש בהן כדי להוסיף עוד פרטים לסצנה, לשפר את האיכות החזותית במקומות אחרים או פשוט להבטיח ביצועים חלקים יותר במגוון רחב יותר של תוכן.
בלי המדדים האלה, אתם מבצעים אופטימיזציה בלי לדעת מה קורה. Performance Metrics API מספק מידע מדויק על מה שבאמת עוזר לכם במקרה הספציפי שלכם.
כלי לניפוי באגים בפריים
Frame Debugger הוא כלי מובנה ב-Unity שמאפשר להבין בדיוק איך הסצנה עוברת רינדור, פריים אחר פריים. הוא מציג את רצף הבקשות להזזת פריטים גרפיים ומאפשר לכם לעבור ביניהן כדי לוודא שהאופטימיזציות פועלות כמו שצריך.
רוצים לוודא ש-SRP Batcher פועל? מחפשים את הרשומות של RenderLoopNewBatcher בכלי לניפוי באגים בפריימים. בודקים אם ה-GPU Resident Drawer מבצע אצווה כמו שצריך? מחפשים את הרשומות של Hybrid Batch Group. האישורים החזותיים האלה עוזרים לכם להבין אם הגדרות האופטימיזציה שלכם באמת נכנסות לתוקף.
עוברים על 50 הבקשות הראשונות להזזת פריט גרפי (draw call) בסצנה. אם אתם רואים אובייקטים דומים שמשורטטים בנפרד במקום באצווה, זה אומר שהיצירה של המופעים או האצוות לא פועלת כמו שצריך. הכלי Frame Debugger מאפשר לראות את הבעיות האלה באופן מיידי כדי שתוכלו לטפל בהן.
אופטימיזציות נוספות
בנוסף לאופטימיזציות שסקרנו למעלה, המדריך המלא שלנו לביצועים כולל גם כמה אופטימיזציות נוספות. הנה סיכום קצר:
- הגדרות URP: השביתו את HDR ואת העיבוד לאחר הצילום (Post Processing) ב-XR לנייד. התכונות האלה מספקות השפעה חזותית מינימלית בהשוואה לעלות הביצועים שלהן בחומרה של מכשירים ניידים, כך שתקבלו שיפורים משמעותיים בביצועים עם הבדלים חזותיים שכמעט לא מורגשים.
- SRP Batcher: מפחית את העומס על המעבד (CPU) בסצנות עם הרבה חומרים שמשתמשים באותה גרסה של הצללה. אם תצמצמו את השינויים במצב הרינדור בין בקשות להזזת פריט גרפי, תוכלו להפחית באופן משמעותי את זמן ה-CPU שמוקדש לרינדור.
- קצב רענון המסך: התאמה דינמית בין 72fps ל-90fps בהתאם למורכבות הסצנה. כדי לשמור על יציבות, אפשר להוריד את קצב הפריימים ברצפים מורכבים, ולהגביר אותו ברגעים פשוטים יותר כדי ליהנות מאינטראקציה חלקה במיוחד.
- Depth/Opaque Textures: השביתו את האפשרויות האלה, אלא אם הן נדרשות באופן ספציפי לאפקטים של הצללה. הם גורמים לפעולות העתקה מיותרות של GPU שפוגעות בביצועים בלי לספק תועלת לרוב האפליקציות.
- קנה מידה לעיבוד ב-URP: ההגדרה הזו מאפשרת לעבד ברזולוציה נמוכה יותר כדי לשפר את הביצועים, או להגדיל את קנה המידה של העיבוד כדי לשפר את האיכות החזותית.
הוראות מפורטות לגבי האופטימיזציות האלה ואחרות זמינות במדריך המלא לביצועים ב-Unity ל-Android XR.
סיכום
הביצועים של אפליקציית ה-XR הם לא רק תיבת סימון טכנית. זה ההבדל בין חוויה נוחה ומושכת לבין חוויה שגורמת למשתמשים להרגיש לא טוב או לא בנוח. האופטימיזציות שסקרנו הן ערכת הכלים שלכם להשגת יעדי קצב הפריימים הקריטיים האלה במכשירי ה-XR החדשים ביותר.
זו מפת הדרכים שלכם:
- כדאי להתחיל עם Foveated Rendering ו-Vulkan Subsampling. התכונות הספציפיות האלה ל-XR מספקות חיסכון מיידי ומשמעותי ב-GPU.
- אם יש לכם סצנות מורכבות עם גיאומטריה חוזרת או חללים פנימיים, הוסיפו את GPU Resident Drawer ו-Occlusion Culling.
- כדי לוודא שהשינויים באמת עוזרים, עוקבים אחרי הכול באמצעות Performance Metrics API
- אופטימיזציות נוספות של URP לשיפור הביצועים
חשוב למדוד באופן קבוע ולבצע שינויים בהתאם. לא כל אופטימיזציה תועיל לכל פרויקט באותה מידה, לכן כדאי להשתמש ב-Performance Metrics API כדי לקבל מושג ברור לגבי מה שבאמת עוזר לתרחיש השימוש הספציפי שלכם.
השלב הבא: הרחבת המיומנויות
מוכנים לגלות עוד? תוכלו לעיין במקורות המידע הבאים:
- מדריך הביצועים של Unity ל-Android XR – הוראות הטמעה מלאות, שלב אחר שלב, לכל התכונות שמפורטות כאן.
- תחילת העבודה עם Unity ו-Android XR – הגדרת סביבת הפיתוח ו תחילת הפיתוח.
- מאמרי עזרה למפתחים של Android XR – מדריכים מקיפים לכל התכונות של Android XR
-
חדשות על המוצראנחנו שמחים להודיע שהתמיכה הרשמית ב-Unreal Engine וב-Godot הגיעה ל-Android XR. אנחנו משיקים גם כלים חדשים שנועדו לשפר את הפרודוקטיביות ולאפשר יכולות XR חדשות: Android XR Engine Hub ו-Android XR Interaction Framework.
Luke Hopkins, Ryan Bartley • משך הקריאה: 4 דקות -
חדשות על המוצרהיום, במפגש של מפתחי Android, אנחנו מכריזים על הזמינות הרחבה של הרבה כלים וממשקי API שנועדו להסיר את החיכוך היומיומי ולתת לכם יותר גמישות ליצור אפליקציות Android נהדרות.
Matthew McCullough • משך הקריאה: 4 דקות -
חדשות על המוצרגרסת Android Studio Rabbit 2 יציבה ומוכנה לשימוש בסביבת הייצור. הגרסה הזו כוללת תכונות חשובות שמשפרות את הפיתוח, כמו Bring Your Own Agent, תכונות חדשות של אמולטור XR, עדכון של LeakCanary, כלי חדש לניהול מיומנויות של סוכנים, סקר קוד באמצעות AI ועוד.
Matthew Warner • משך הקריאה: 3 דקות
רוצים לקבל טיפים עדכניים לפיתוח Android ישירות לאימייל כל שבוע?