אחרי הוספת מודל תלת-ממדי לאפליקציה, אפשר לשפר את החוויה החזותית על ידי הגדרה של מאפייני חומר מותאמים אישית והחלה של טקסטורות על האובייקט. מערכת החומרים של Jetpack XR מבוססת על המפרט של glTF™ 2.0, ומודלים תלת-ממדיים מעובדים באמצעות עיבוד פיזיקלי (PBR). אלה סטנדרטים פתוחים שמתוחזקים על ידי Khronos Group.
אפשר לשנות מאפייני חומר בזמן הריצה כדי לשנות את המראה של אובייקט באופן דינמי על סמך קלט של משתמשים או המצב הנוכחי של האפליקציה.
פרטים על כל מאפיין נתמך והפרמטרים הניתנים להתאמה אישית ב-Android XR זמינים במסמכי העזר. כדי להבין טוב יותר את המאפיינים האלה, אפשר לעיין במילון המונחים של Khronos.
התאמה אישית של מאפייני החומר של המודל התלת-ממדי
Material מגדיר קבוצה של מאפיינים חזותיים של פני השטח של אובייקט, וקובע איך פני השטח האלה יוצרים אינטראקציה עם האור בסצנה.
ב-Jetpack XR, משתמשים במחלקות KhronosPbrMaterial ו-KhronosUnlitMaterial
כדי ליצור את החומרים האלה ולבצע בהם מניפולציות. כפי שהשם מרמז, KhronosUnlitMaterials לא מוארים ולא מושפעים מתאורה בסצנה. KhronosPbrMaterial מאפשרת לכם להתאים אישית מגוון רחב יותר של מאפיינים, כמו צבע הברק, מידת המתכתיות או החספוס של אובייקט, והאם הוא פולט אור.

כדי להתאים אישית את מאפייני החומר של המודל התלת-ממדי, קודם צריך ליצור את החומר החדש באמצעות KhronosPbrMaterial. תצטרכו להגדיר את AlphaMode המתאים כדי להשיג את המראה הרצוי:
val pbrMaterial = KhronosPbrMaterial.create( session = xrSession, alphaMode = AlphaMode.OPAQUE )
לאחר מכן, מגדירים את המאפיינים שרוצים לשנות. בדוגמה הזו, אנחנו משתמשים ב-setBaseColorFactor כדי לשנות את צבע הבסיס. בשיטה הזו צריך להשתמש ב-Vector4, כאשר הרכיבים x, y, z ו-w תואמים לערכי ה-RGBA (אדום, ירוק, כחול ואלפא) בהתאמה:
pbrMaterial.setBaseColorFactor( Vector4( x = 0.5f, y = 0.0f, z = 0.5f, w = 0.0f ) )
יצירת טקסטורות בהתאמה אישית למודל תלת-ממדי
Texture הוא נכס תמונה שאפשר להחיל על פני השטח של מודל תלת-ממדי כדי לספק צבע, פרטים או מידע אחר על פני השטח. Jetpack XR
Texture API מאפשר לטעון נתוני תמונה, כמו קובצי PNG, מהתיקייה /assets/ של האפליקציה באופן אסינכרוני.
כשמעלים טקסטורה, אפשר לציין TextureSampler, שקובע איך הטקסטורה תוצג. הסמפלר מגדיר מאפייני סינון (למקרים שבהם הטקסטורה מופיעה קטנה או גדולה יותר מהגודל המקורי שלה) ומצבי גלישה (לטיפול בקואורדינטות מחוץ לטווח הרגיל [0, 1]).
אובייקט Texture הוא רק נתונים; צריך להקצות אותו ל-Material
כדי ליצור אפקט חזותי במודל תלת-ממדי.

כדי ליצור טקסטורה בהתאמה אישית, קודם צריך לשמור את קובץ התמונה בתיקייה /assets/. מומלץ גם ליצור textures
תיקיית משנה בתיקייה הזו.
אחרי ששומרים את הקובץ בספרייה המתאימה, יוצרים את הטקסטורה באמצעות ה-API Texture. כאן גם אפשר להוסיף את התג TextureSampler אם צריך:
val texture = Texture.create( session = xrSession, path = Path("textures/texture_file.png") )
לאחר מכן, מגדירים את סוג הטקסטורה ומזינים את הפרמטרים המתאימים. בדוגמה הזו, אנחנו מחילים טקסטורה של הסתרה ומגדירים את העוצמה:
pbrMaterial.setOcclusionTexture( texture = texture, strength = 1.0f )
החלת חומרים וטקסטורות על אובייקטים בתלת-ממד
כדי להחיל את החומר או הטקסטורה החדשים, צריך לבטל את החומר הקיים עבור צומת ספציפי בצומת glTF. כדי לעשות זאת, קוראים ל-API setMaterialOverride ב-GltfModelNode:
gltfModelNode.setMaterialOverride( material = pbrMaterial )
כדי להסיר את החומרים החדשים שנוצרו, מתקשרים אל clearMaterialOverride בצומת שהוחלף קודם ב-GltfModelNode. הפעולה הזו תחזיר את מודל התלת-ממד למצב ברירת המחדל שלו:
gltfModelNode.clearMaterialOverride()
glTF והלוגו של glTF הם סימנים מסחריים של Khronos Group Inc.