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 instancing כדי להפחית את מספר הבקשות להזזת פריטים גרפיים ולפנות זמן עיבוד ב-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 דקות -
חדשות על המוצריותר מחצי מהמשחקים לנייד בעולם מבוססים על Unity, ולכן הרושם הראשוני חשוב. למפתחי משחקים, חוויית הצטרפות חלקה ואמינה לשחקנים היא חיונית כדי להגביר את שימור המשתמשים ביום הראשון ואת המעורבות לטווח הארוך.
Michelle Martin • משך הקריאה: דקה אחת -
חדשות על המוצרמחוויות סוחפות בבית ועד לחוויות שניתן לראות במבט חטוף תוך כדי תנועה, פיתוח ב-Android XR מאפשר לכם להגיע למשתמשים בכל רגע, בכל מגוון האפליקציות המרחביות. במפגש של מפתחי Android, ציינו אבן דרך מרגשת עם ההשקה של XREAL AURA.
Amy Zeppenfeld, Vinny DaSilva • משך הקריאה: 3 דקות
רוצים לקבל טיפים עדכניים לפיתוח Android ישירות לאימייל כל שבוע?