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

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

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

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

למה דווקא הגישה הזו?

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

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

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

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

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

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

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

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

  • דחיסת KTX: כדי לבצע אופטימיזציה של ביצועי ה-GPU בקובץ ה-GLB, צריך לוודא שבקובץ ה-GLB נעשה שימוש ב-mipmaps ובטקסטורות של KTX2.

מה צריך כדי לבצע אופטימיזציה של IBL

מורידים את הכלי של שורת הפקודה cmgen:

  • הגרסה האחרונה זמינה במאגר Filament.
  • מחפשים את קובץ ה-tgz .‎ שמכיל את הגרסה המוכנה מראש של cmgen לפלטפורמה שלכם ומחלצים אותו.
  • הכלי שנוצר מראש נמצא בתיקייה /bin של קובץ ה-tgz שחולץ.

נכסים שצריך להכין כדי ליצור את קובץ ה-zip ל-IBL:

  • קובץ EXR ברזולוציה נמוכה שתואמת למרקם של תיבת השמיים
    • הקלט של טקסטורת תיבת השמיים צריך להיות קובץ EXR. הכלי cmgen תומך בפורמטים אחרים, אבל מומלץ להשתמש בפורמטים של EXR כי הם מספקים את המידע של טווח הדינמיקה הגבוה, שחשוב מאוד כדי לספק איכות גבוהה של IBL. שימוש בפורמטים אחרים כמו PNG גורם לתאורה פחות מדויקת.
    • יחס הגובה-רוחב של קובץ התמונה המקורית (EXR) צריך להיות 2:1 והמידות צריכות להיות כפולות של 2. צריך להשתמש בקובץ EXR בגודל 1,024x512 פיקסלים. הערה: יכול להיות שרזולוציה של 1,024 x 512 נמוכה מדי, אבל היא מועילה לשיפור הביצועים. לגבי IBL, התוצאות החזוניות של המשתמשים דומות מאוד לנכסי IBL ברזולוציה גבוהה בהרבה.
  • קובץ PNG שחור אטום
    • יחס הגובה-רוחב של הנכס הזה צריך להיות 2:1. מומלץ להשתמש בתמונה בגודל 100 x 50 פיקסלים.
    • הוא משמש כטקסטורה אופטימיזציה שתלווה את ה-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 ..