Samsung Galaxy XR כבר כאן, והוא מבוסס על Android XR! הפוסט הזה בבלוג הוא חלק מ שבוע Android XR Spotlight, שבו אנחנו מספקים משאבים – פוסטים בבלוג, סרטונים, קוד לדוגמה ועוד – שנועדו לעזור לכם ללמוד, לבנות ולהכין את האפליקציות שלכם ל-Android XR.
השבוע, סמסונג השיקה את Galaxy XR, שפותח בשיתוף עם Google ו-Qualcomm. זו תקופה מרגשת למפתחים, ואנחנו רוצים לעזור לכם להפיק את הביצועים הכי טובים שאפשר מאפליקציית ה-XR שלכם.
ביצועים נמוכים במשחקים ובאפליקציות במכשירים שאינם XR עלולים לתסכל את המשתמשים, אבל בעולם ה-XR הביצועים הם לא רק אופציונליים, אלא חיוניים להצלחת האפליקציה. אם לא תעמדו ביעד של קצב הפריימים ב-XR, עלולות להיווצר בעיות חמורות הרבה יותר, כמו בחילות.
במדריך הזה נסביר על האופטימיזציות החשובות לשיפור הביצועים שצריך להכיר בפיתוח של Android XR. תלמדו אילו תכונות מניבות את שיפורי הביצועים הכי גדולים, מתי כדאי להשתמש בהן ואיך הן פועלות יחד כדי לעזור לכם להשיג את יעדי קצב הפריימים.
אלה המטרות שלנו:
- מינימום: 72 fps (חלק מהנחיות האיכות שלנו לגבי הפעלה)
- אופציונלי: 90fps עם תקציב של 11ms לכל פריים
מידע נוסף על החשיבות של שמירה על קצב פריימים גבוה זמין בהנחיות שלנו לשיפור הביצועים.
תכונות ביצועים ספציפיות ל-XR
נתחיל בשתי תכונות לשיפור הביצועים שספציפיות ל-XR: רינדור ממוקד ודגימת משנה של Vulkan.
רינדור ממוקד
רינדור פוביאלי הוא אופטימיזציה עם שני מצבים. הראשון הוא מצב סטטי שבו מרכז המסך מוצג ברזולוציה גבוהה יותר, והרזולוציה יורדת ככל שמסתכלים יותר רחוק מהמרכז.
האפשרות השנייה היא מצב מעקב אחרי תנועות העיניים, שבו האזור שבו אתם מסתכלים מוצג בפירוט מלא, בעוד שהאיכות של מה שמוצג בשוליים מופחתת. המודל הזה מחקה את אופן הפעולה של הראייה האנושית – אנחנו רואים פרטים מדויקים רק באזור הספציפי שבו אנחנו מתמקדים.
הרינדור הממוקד מפחית באופן משמעותי את עומס העבודה של ה-GPU בלי לפגוע באיכות התמונה שהמשתמש רואה. היתרון ברינדור ממוקד הוא שהמשתמשים לא יבחינו באיכות המופחתת בראייה ההיקפית שלהם, אבל המעבד הגרפי שלכם בהחלט יבחין בשיפור בביצועים.
נניח שאתם יוצרים חוויה במוזיאון עם פריטים תלת-ממדיים מורכבים. בלי רינדור פוביאלי, יהיה לכם קשה לשמור על 90fps כשאתם מנסים לרנדר הכול ב'שדה הראייה'. עם רינדור פוביאלי, אתם יכולים לשמור על הפרטים האלה עם פוליגונים רבים במקום שבו המשתמש מסתכל, אבל סביבת הרקע מרונדרת באיכות נמוכה יותר. המשתמשים לא יבחינו בהבדל, אבל תהיה לכם אפשרות להוסיף עוד פרטים לסצנה.
Vulkan Subsampling
התכונה 'דגימת משנה של Vulkan' היא התכונה הכי טובה לרינדור ממוקד. בעוד ש-foveated rendering מחליט מה לשרטט ברמות איכות שונות, Vulkan Subsampling קובע איך לשרטט ביעילות את רמות האיכות השונות באמצעות Fragment Density Maps.
כשמשלבים את Vulkan Subsampling עם רינדור ממוקד, מקבלים עוד 0.5ms של ביצועים. היא גם עוזרת להחליק קצוות משוננים בראייה ההיקפית, וכך התמונה הכוללת נראית חלקה יותר.
לדוגמה, במשחק סימולטור טיסה שבו המשתמשים מתמקדים במכשירים ובפקדים, שילוב של רינדור פוביאלי עם דגימת משנה של Vulkan מאפשר רינדור חד של הפקדים המפורטים, אבל מבנה תא הטייס ההיקפי משתמש בפחות משאבים. תוספת של 0.5 אלפיות השנייה לא נשמעת משמעותית, אבל היא יכולה להשפיע על האפשרות להוסיף רכיב אינטראקטיבי או על האפשרות להפיל פריימים ברגעים אינטנסיביים.
תכונות GPU לסצנות מורכבות
בנוסף ל-Foveated Rendering ול-Vulkan Subsampling, יש כמה תכונות של GPU שמפחיתות עומס מיותר באמצעות יצירת מופעים חכמה וסינון. הן יעילות במיוחד בסצנות מורכבות עם גיאומטריה חוזרת או הסתרה משמעותית.
מגירה של GPU Resident
החלונית 'GPU Resident' משתמשת אוטומטית ב-GPU instancing כדי להפחית את מספר קריאות הציור ולפנות זמן עיבוד במעבד המרכזי. לכן, במקום שה-CPU יעדכן את ה-GPU לגבי כל אובייקט בנפרד, ה-GPU מקבץ אובייקטים דומים.
התכונה הזו יעילה במיוחד בסצנות גדולות עם רשתות חוזרות, כמו עצים ביער, רהיטים בבניין משרדים או אביזרים שמוצבים בסביבה.
תמונה של סצנת יער עם 200 עצים באמצעות אותה רשת בסיסית. בלי מגירת GPU Resident, יש 200 קריאות לציור שצורכות את ה-GPU, ולכן משחררות את ה-CPU. כשמפעילים את התכונה הזו, ה-GPU יוצר באופן חכם מופעים של העצים האלה, וכך מצמצם את מספר הקריאות לציור ל-5 עד 10 בלבד. כך תוכלו לחסוך משמעותית בשימוש ב-GPU, ואז להשקיע את החיסכון הזה בלוגיקה של המשחק או בחישובים פיזיקליים.
GPU Occlusion Culling
הסרת חסימות ב-GPU משתמשת ב-GPU במקום ב-CPU כדי לזהות אובייקטים מוסתרים ולדלג על העיבוד שלהם. המערכת מזהה באופן אוטומטי מה מוסתר מאחורי אובייקטים אחרים, כך שלא תבזבזו את המעבד הגרפי על דברים שהמשתמש לא יכול לראות.
התכונה הזו שימושית במיוחד בחללים פנימיים עם כמה חדרים, בסביבות צפופות או בסצנות אדריכליות שבהן קירות, רצפות וחפצים חוסמים את שדה הראייה באופן טבעי.
לדוגמה, נניח שאתם יוצרים חוויה של בית עם כמה חדרים. אם המשתמש נמצא בסלון, למה לבזבז מחזורי GPU על עיבוד של המטבח המפורט, שמוסתר לגמרי מאחורי קיר? התכונה 'הסרת חסימות ב-GPU' מדלגת אוטומטית על עיבוד של אובייקטים מוסתרים, וכך מאפשרת לכם להשתמש בתקציב הביצועים למה שבאמת נראה.
מעקב אחר הביצועים
לא מספיק רק להשתמש בתכונות האלה. חשוב גם למדוד את האופטימיזציות כדי לכמת את ההשפעה שלהן ולוודא שהשינויים שביצעתם באמת משפרים את הביצועים.
Performance Metrics API
Performance Metrics API מאפשר מעקב בזמן אמת אחרי השימוש בזיכרון של האפליקציות, ביצועי המעבד (CPU) וביצועי המעבד הגרפי (GPU). הכלי מספק נתונים מקיפים משכבות של מנהל החלונות ושל זמן הריצה, כך שאפשר לראות בדיוק מה קורה באפליקציה.
כדאי להגדיר נקודת השוואה לפני שמבצעים שינויים, להחיל אופטימיזציה, למדוד את ההשפעה ולבצע שינויים חוזרים. הגישה מבוססת-הנתונים הזו מאפשרת לכם לדעת שאתם משפרים את הביצועים בפועל, ולא רק לנחש.
לפני שמפעילים רינדור פוביאלי, זמן רינדור פריים של ה-GPU יכול להיות 13ms, שזה מעל התקציב של 11ms. מפעילים את הרינדור הממוקד, מודדים שוב, ואם הכול תקין, הערך יירד ל-9ms. כך הרווחתם 4ms כדי להוסיף עוד פרטים לסצנה, לשפר את האיכות החזותית במקומות אחרים או פשוט להבטיח ביצועים חלקים יותר במגוון רחב יותר של תוכן.
בלי המדדים האלה, האופטימיזציה מתבצעת ללא תובנות. ה-API של מדדי הביצועים מאפשר לכם לדעת מה באמת עוזר לתרחיש השימוש הספציפי שלכם.
כלי לניפוי באגים של פריימים
Frame Debugger הוא כלי מובנה של Unity שמאפשר להבין בדיוק איך הסצנה מוצגת, פריים אחר פריים. הוא מציג את רצף הקריאות לציור ומאפשר לכם לעבור ביניהן כדי לוודא שהאופטימיזציות פועלות בצורה תקינה.
רוצים לוודא שה-SRP Batcher פועל? מחפשים רשומות של RenderLoopNewBatcher בכלי Frame Debugger. האם בדקת אם ה-GPU Resident Drawer מבצע את האצווה בצורה תקינה? מחפשים רשומות של 'Hybrid Batch Group'. האישורים החזותיים האלה עוזרים לכם להבין אם הגדרות האופטימיזציה שלכם באמת משפיעות.
עוברים על 50 קריאות הציור הראשונות של הסצנה. אם אתם רואים שאובייקטים דומים מצוירים בנפרד במקום בקבוצות, זה אומר שהשימוש במופע או בקבוצה לא פועל בצורה נכונה. הכלי Frame Debugger מאפשר לראות את הבעיות האלה באופן מיידי כדי לטפל בהן.
אופטימיזציות נוספות
בנוסף לאופטימיזציות שצוינו למעלה, במדריך המלא לשיפור הביצועים מפורטות עוד כמה אופטימיזציות. הנה סיכום קצר:
- הגדרות URP: השבתה של HDR ושל עיבוד פוסט למכשירי XR לנייד. ההשפעה החזותית של התכונות האלה מינימלית בהשוואה לעלות הביצועים שלהן בחומרה של מכשירים ניידים, כך שתקבלו שיפורים מדידים בביצועים עם הבדלים חזותיים שכמעט לא מורגשים.
- SRP Batcher: מפחית את העומס על המעבד בסצנות עם הרבה חומרים שמשתמשים באותו וריאנט של Shader. אם מצמצמים את השינויים במצב העיבוד בין קריאות הציור, אפשר לצמצם באופן משמעותי את הזמן שהמעבד מבלה בעיבוד.
- קצב רענון התצוגה: מתבצעת התאמה דינמית בין 72fps ל-90fps בהתאם למורכבות הסצנה. כדי לשמור על יציבות, כדאי להקטין את קצב הפריימים במהלך רצפים מורכבים, ואז להגדיל אותו במהלך רגעים פשוטים יותר כדי לקבל אינטראקציה חלקה במיוחד.
- עומק/טקסטורות אטומות: כדאי להשבית את האפשרויות האלה אלא אם יש צורך ספציפי באפקטים של הצללה. הן גורמות לפעולות מיותרות של העתקת GPU שפוגעות בביצועים בלי לספק יתרון לרוב האפליקציות.
- URP Render Scale: ההגדרה הזו מאפשרת לכם לבצע רינדור ברזולוציה מופחתת כדי לשפר את הביצועים, או לבצע רינדור ברזולוציה גבוהה יותר כדי לשפר את איכות התמונה.
הוראות מפורטות לאופטימיזציות האלה ועוד מופיעות במדריך המלא שלנו לאופטימיזציה של ביצועים ב-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 יש הרבה אפשרויות בכל הנוגע לסוכנים, למודלים גדולים של שפה (LLM), לכלים ולממשקי שורת פקודה (CLI) שבהם הם משתמשים לפיתוח אפליקציות. המטרה שלנו היא לעזור לכם לפתח אפליקציות יפות ואיכותיות ל-Android, לא משנה איך תבחרו לפתח אותן.
Simona Milanovic • משך הקריאה: 4 דקות -
חדשות על מוצריםב-Google Play, אנחנו מרחיבים כל הזמן את פלטפורמת המינויים שלנו כדי לעזור לכם להגדיל את הצמיחה, להתאים את עצמכם למודלים עסקיים חדשים ולהגיע למשתמשים שלכם בדיוק במקום שבו הם נמצאים.
Sheenam Mittal • משך הקריאה: 4 דקות
רוצים לקבל טיפים עדכניים לפיתוח Android ישירות לאימייל כל שבוע?