החל מגרסת אלפא04 של ספריות Jetpack XR, יש עדכונים חשובים לגבי האופן שבו צריך לספק נכסי סביבה מרחבית כדי להשיג ביצועים אופטימליים ואיכות ויזואלית גבוהה. השינויים האלה משפיעים על התאימות, וצריך לעדכן אפליקציות קיימות שמגדירות סביבות מרחביות.
כדי לספק סביבות מרחביות, צריך שני רכיבים עיקריים:
- קובץ .glb או .gltf לגיאומטריה של הסביבה (לדוגמה, מישור הקרקע, אובייקטים קרובים) ומרקם ה-skybox הראשי שמוצג למשתמשים.
- קובץ ZIP נפרד שמכיל מידע על תאורה מבוססת-תמונה (IBL) שנוצר מתמונת EXR בטווח דינמי גבוה באמצעות הכלי cmgen. קובץ ה-ZIP משמש לחישובים של תאורה, כמו השתקפויות על אובייקטים, ולא לטקסטורה של ה-skybox עצמו.
למה בחרנו בגישה הזו?
היתרונות של מבנה הנכסים המעודכן:
- גודלי קבצים קטנים יותר: בהשוואה לשיטות קודמות, כמו שימוש בקובץ HDR skybox יחיד ברזולוציה גבוהה גם לתצוגה חזותית וגם לנתוני תאורה, הגישה הזו מקטינה את גודלי הקבצים.
- ביצועים משופרים: הפרדת מרקם ה-skybox החזותי (שמובנה ב-glb) מנתוני ה-IBL (בקובץ ה-ZIP) מאפשרת לכם לבצע אופטימיזציה לכל רכיב בנפרד. כתוצאה מכך, רוחב הפס של קריאת זיכרון הטקסטורה נמוך יותר וצריכת החשמל נמוכה יותר.
- תאורה אופטימלית: שימוש במשאב skybox ברזולוציה נמוכה יותר, במיוחד למפת התאורה, מועיל לביצועים בלי להשפיע באופן משמעותי על התוצאות החזותיות של התאורה על האובייקטים.
מידע נוסף על הוספת סביבה מרחבית לאפליקציה זמין במדריך בנושא הוספת סביבות לאפליקציה.
אופטימיזציה של קובץ GLB

קובץ ה-glb מייצג את הגיאומטריה שמסביב למשתמש, ואתם כוללים בו את המרקם החזותי של תיבת השמיים. במקרה של גיאומטריה, מומלץ לשמור על גודל קובץ של עד 80MB.
כדי לעשות את זה, יש כמה הזדמנויות לשפר את היעילות של הסביבה בלי לפגוע באיכות. לדוגמה, הצפיפות של הרשת צריכה להיות הכי גבוהה ליד המשתמש, ואפשר להקטין את הצפיפות של רשתות שנמצאות רחוק יותר מהמשתמש.
- מרחק הצפייה: מרחק הצפייה בסביבות ב-Android XR הוא 200 מטרים מנקודת המשתמש, ומרקם ה-skybox צריך לעמוד במגבלה הזו. כך אפשר לספק חוויה אופטימלית כי אפקט הפרלקסה לא מורגש במרחק הזה.
גובה המשתמש: המיקום הגיאוגרפי יכול להשתנות, אבל כדאי למקם את המשתמש על תל בגובה של כ-1.5 מטרים כדי למנוע חיתוך עם רכיבי ממשק משתמש גדולים יותר באפליקציות.
מספר הפוליגונים: חשוב לשים לב למספר הפוליגונים בקובצי ה-glb, כי מספר גבוה של פוליגונים עלול לגרום לצריכת חשמל מיותרת. כל תיקון גיאומטרי לא יכול לכלול יותר מ-10,000 קודקודים.
דחיסת KTX: כדי לבצע אופטימיזציה של ביצועי ה-GPU של קובץ ה-glb, צריך לוודא שקובץ ה-glb משתמש במיפמפים ובמרקמי ktx2.
מה צריך כדי לבצע אופטימיזציה של מודעות IBL
מורידים את כלי שורת הפקודה cmgen:
- אפשר למצוא את הגרסה האחרונה במאגר Filament.
- מוצאים את קובץ ה- .tgz שמכיל את הגרסה המוכנה מראש של cmgen לפלטפורמה שלכם ומחלצים אותו.
- הכלי המובנה נמצא בתיקייה /bin של קובץ ה- .tgz שחולץ.
נכסים שצריך להכין כדי ליצור את קובץ ה-ZIP ל-IBL:
- קובץ EXR ברזולוציה נמוכה שתואם לטקסטורה של תיבת השמיים
- קובץ הקלט של טקסטורת ה-skybox צריך להיות קובץ EXR. אמנם cmgen תומך בפורמטים אחרים, אבל מומלץ להשתמש בפורמט EXR כי הוא מספק את המידע על הטווח הדינמי הגבוה שנדרש כדי לספק IBL באיכות גבוהה. שימוש בפורמטים אחרים כמו PNG מוביל לתאורה פחות מדויקת.
- תמונת המקור (EXR) צריכה להיות ביחס של 2:1 ובמידות שהן חזקה של 2. משתמשים בקובץ EXR בגודל 1,024x512 פיקסלים. הערה: יכול להיות שרזולוציה של 1024 x 512 נראית נמוכה מדי, אבל היא מועילה לביצועים. ב-IBL, התוצאות החזותיות למשתמש דומות מאוד לנכסי IBL ברזולוציה גבוהה בהרבה.
- קובץ PNG שחור מלא
- יחס הגובה-רוחב של הנכס הזה צריך להיות 2:1. הגודל צריך להיות 100x50 פיקסלים.
- המרקם הזה משמש כמרקם אופטימלי שמלווה את ה-IBL. המשתמשים לא יראו את הנכס הזה, ולכן אנחנו מתמקדים באופטימיזציה שלו לשיפור הביצועים.

בדוגמה הבאה מוצג איך להשתמש ב-cmgen כדי ליצור את קובץ ה-ZIP של IBL. בדוגמה הזו אנחנו משתמשים בקובצי קלט בשם my_360_skybox_1024_x_512.exr ו-black_skybox.png, ויוצרים קובץ .zip בשם my_ibl.zip
# Produce black cubemaps for the texture of the IBL asset.
./cmgen --format=rgb32f --size=128 --extract=./skybox_ibl ./black_skybox.png
# Produce lighting cubemaps and a Spherical Harmonics from EXR
./cmgen --format=rgb32f --size=128 --deploy=./skybox_ibl --ibl-ld=. --ibl-samples=1024 --extract-blur=0.0 --sh-irradiance --sh-shader --sh-output=./skybox_ibl/sh.txt ./my_360_skybox_1024_x_512.exr
# Copy all of the black cubemaps into the other folder.
cp -rf ./skybox_ibl/black_skybox/* ./skybox_ibl/my_360_skybox_1024_x_512
# Rename the directory to reflect that these are old assets.
mv ./skybox_ibl/black_skybox ./skybox_ibl/black_skybox_old
# Rename the directory to reflect that these are your cubemap assets.
mv ./skybox_ibl/my_360_skybox_1024_x_512 ./skybox_ibl/black_skybox
# Change into the child directory.
cd ./skybox_ibl
# Zip all of the cubemap and the Spherical Harmonics assets together.
zip -q my_ibl.zip black_skybox/*
# Return to the directory you started in.
cd ..