אופטימיזציה של נכסי הסביבה

מכשירי XR שנתמכים
ההנחיות האלה יעזרו לכם ליצור חוויות למכשירי XR מהסוגים הבאים.
משקפי XR
משקפי XR עם חיבור קווי

החל מגרסת אלפא04 של ספריות Jetpack XR, יש עדכונים חשובים לגבי האופן שבו צריך לספק נכסי סביבה מרחבית כדי להשיג ביצועים אופטימליים ואיכות חזותית גבוהה. השינויים האלה משפיעים על התאימות, ולכן צריך לעדכן אפליקציות קיימות שמגדירות סביבות מרחביות.

כדי לספק סביבות מרחביות, צריך שני רכיבים עיקריים:

  • קובץ ‎ .glb או ‎ .gltf לגיאומטריה של הסביבה (לדוגמה, מישור הקרקע, אובייקטים קרובים) והמרקם החזותי הראשי של תיבת השמיים שהמשתמשים רואים.
  • קובץ ZIP נפרד שמכיל מידע על תאורה מבוססת-תמונה (IBL) שנוצר מתמונה בפורמט EXR עם טווח דינמי גבוה באמצעות הכלי cmgen. קובץ ה-ZIP משמש לחישובי תאורה, כמו השתקפויות על אובייקטים, ולא לטקסטורה של ה-skybox עצמו.

למה כדאי להשתמש בגישה הזו?

מבנה הנכסים המעודכן מספק את היתרונות הבאים:

  • גודלי קבצים קטנים יותר: בהשוואה לשיטות קודמות, כמו שימוש בקובץ HDR skybox יחיד ברזולוציה גבוהה גם לתצוגה חזותית וגם לנתוני תאורה, הגישה הזו מקטינה את גודלי הקבצים.
  • ביצועים משופרים: הפרדת מרקם ה-skybox החזותי (שמובנה ב-glb) מנתוני ה-IBL (בקובץ ה-ZIP) מאפשרת לכם לבצע אופטימיזציה לכל רכיב בנפרד. כתוצאה מכך, רוחב הפס של קריאת הזיכרון של הטקסטורה נמוך יותר וצריכת החשמל נמוכה יותר.
  • תאורה אופטימלית: שימוש במשאב skybox ברזולוציה נמוכה יותר, במיוחד למפת התאורה, משפר את הביצועים בלי להשפיע באופן משמעותי על התוצאות החזותיות של התאורה על האובייקטים.

מידע נוסף על הוספת סביבה מרחבית לאפליקציה זמין במדריך בנושא הוספת סביבות לאפליקציה.

אופטימיזציה של קובץ ה-glb

קובץ ה-glb מייצג את הגיאומטריה שמסביב למשתמש, ואתם כוללים בו את המרקם החזותי של ה-skybox. במקרה של גיאומטריה, מומלץ לשמור על גודל קובץ של עד 80MB.

כדי לעשות את זה, יש כמה הזדמנויות לשפר את היעילות של הסביבה שלכם בלי לפגוע באיכות. לדוגמה, הצפיפות של הרשת צריכה להיות הכי גבוהה ליד המשתמש, ואפשר להקטין את הצפיפות של רשתות שנמצאות רחוק יותר מהמשתמש.

  • מרחק הצפייה: מרחק הצפייה בסביבות ב-Android XR הוא 200 מטרים מנקודת המשתמש, ומרקם ה-skybox צריך לעמוד במגבלה הזו. כך מתקבלת חוויה אופטימלית כי אי אפשר להבחין באפקט הפרלקסה במרחק הזה.
  • גובה המשתמש: המיקום הגיאוגרפי יכול להשתנות, אבל כדאי למקם את המשתמש על תל בגובה של כ-1.5 מטרים כדי למנוע חיתוך עם רכיבי ממשק משתמש גדולים יותר באפליקציות.

  • מספר הפוליגונים: חשוב לשים לב למספר הפוליגונים בקובצי ה-glb, כי מספר גבוה של פוליגונים עלול להוביל לצריכת חשמל מיותרת. כל תיקון של גיאומטריה לא יכול לחרוג מ-10,000 קודקודים.

  • דחיסת KTX: כדי לשפר את ביצועי ה-GPU של קובץ ה-glb, צריך לוודא שקובץ ה-glb משתמש ב-mipmap ובמרקמי 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 ..