אחרי הוספת מודל תלת-ממדי לאפליקציה, אפשר לשפר את החוויה החזותית על ידי הגדרה של מאפייני חומר מותאמים אישית והחלה של טקסטורות על האובייקט. מערכת החומרים של 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, שקובע איך הטקסטורה תוצג. ה-sampler מגדיר מאפייני סינון (למקרים שבהם הטקסטורה מופיעה קטנה או גדולה יותר מהגודל המקורי שלה) ומצבי גלישה (לטיפול בקואורדינטות מחוץ לטווח הרגיל [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. כדי לעשות את זה, מתקשרים למספר setMaterialOverride בטלפון GltfModelEntity:
gltfModelEntity.setMaterialOverride( material = pbrMaterial, nodeName = "Node Name" )
כדי להסיר את החומרים החדשים שנוצרו, מתקשרים אל clearMaterialOverride בצומת שהוחלף קודם ב-GltfModelEntity. הפעולה הזו תחזיר את מודל התלת-ממד למצב ברירת המחדל שלו:
gltfModelEntity.clearMaterialOverride( nodeName = "Node Name" )
glTF והלוגו של glTF הם סימנים מסחריים של Khronos Group Inc.