अपने ऐप्लिकेशन में 3D मॉडल जोड़ने के बाद, कस्टम मटीरियल प्रॉपर्टी तय करके और ऑब्जेक्ट पर टेक्सचर लागू करके, विज़ुअल अनुभव को बेहतर बनाया जा सकता है. Jetpack XR का मटीरियल सिस्टम, glTF™ 2.0 स्पेसिफ़िकेशन पर आधारित है. साथ ही, 3D मॉडल को फ़िज़िकली-बेस्ड रेंडरिंग (पीबीआर) का इस्तेमाल करके रेंडर किया जाता है. ये ओपन स्टैंडर्ड हैं. इनका रखरखाव Khronos Group करता है.
रनटाइम के दौरान, मटीरियल एट्रिब्यूट में बदलाव किया जा सकता है. इससे, उपयोगकर्ता के इनपुट या ऐप्लिकेशन की मौजूदा स्थिति के आधार पर, किसी ऑब्जेक्ट की बनावट में डाइनैमिक तरीके से बदलाव होता है.
Android XR में काम करने वाली हर प्रॉपर्टी और पसंद के मुताबिक बनाए जा सकने वाले पैरामीटर के बारे में जानकारी पाने के लिए, रेफ़रंस के लिए दस्तावेज़ देखें. इन प्रॉपर्टी के बारे में बेहतर तरीके से जानने के लिए, Khronos की शब्दावली देखें.
अपने 3D मॉडल की मटीरियल प्रॉपर्टी को पसंद के मुताबिक बनाना
Material किसी ऑब्जेक्ट की सतह के लिए विज़ुअल प्रॉपर्टी का सेट तय करता है. साथ ही, यह तय करता है कि सीन में वह सतह, रोशनी के साथ कैसे इंटरैक्ट करती है.
Jetpack XR में, इन मटीरियल को बनाने और उनमें बदलाव करने के लिए KhronosPbrMaterial और KhronosUnlitMaterial क्लास का इस्तेमाल किया जाता है. नाम से पता चलता है कि KhronosUnlitMaterials में रोशनी नहीं होती है. साथ ही, सीन की लाइटिंग का इन पर कोई असर नहीं पड़ता. KhronosPbrMaterial की मदद से, कई प्रॉपर्टी को पसंद के मुताबिक बनाया जा सकता है. जैसे, चमक का रंग, कोई ऑब्जेक्ट कितना मेटैलिक या खुरदरा है, और क्या वह रोशनी देता है.

अपने 3D मॉडल की मटीरियल प्रॉपर्टी को पसंद के मुताबिक बनाने के लिए, सबसे पहले 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 ) )
अपने 3D मॉडल के लिए कस्टम टेक्सचर बनाना
Texture एक इमेज ऐसेट होती है. इसे 3D मॉडल की सतह पर लागू किया जा सकता है, ताकि रंग, ब्यौरा या सतह की अन्य जानकारी दी जा सके. Jetpack XR Texture API की मदद से, इमेज डेटा लोड किया जा सकता है. जैसे, PNG फ़ाइलों को अपने ऐप्लिकेशन के /assets/ फ़ोल्डर से एसिंक्रोनस तरीके से लोड किया जा सकता है.
टेक्स्चर लोड करते समय, TextureSampler तय किया जा सकता है. इससे यह कंट्रोल किया जा सकता है कि टेक्स्चर कैसे रेंडर किया जाए. सैंपलर, फ़िल्टर करने की प्रॉपर्टी तय करता है. जैसे, टेक्सचर अपने ओरिजनल साइज़ से छोटा या बड़ा कब दिखेगा. साथ ही, यह रैपिंग मोड तय करता है. जैसे, स्टैंडर्ड [0, 1] रेंज से बाहर के कोऑर्डिनेट को कैसे हैंडल किया जाएगा.
Texture ऑब्जेक्ट सिर्फ़ डेटा होता है. इसे Material को असाइन किया जाना चाहिए, ताकि 3D मॉडल पर विज़ुअल इफ़ेक्ट दिखे.

कस्टम टेक्सचर बनाने के लिए, आपको सबसे पहले इमेज फ़ाइल को अपने /assets/ फ़ोल्डर में सेव करना होगा. सबसे सही तरीका यह है कि आप उस फ़ोल्डर में एक textures
सबडायरेक्ट्री भी बनाएं.
फ़ाइल को सही डायरेक्ट्री में सेव करने के बाद, Texture API की मदद से टेक्सचर बनाएं. अगर ज़रूरत हो, तो यहां वैकल्पिक TextureSampler भी लागू किया जा सकता है:
val texture = Texture.create( session = xrSession, path = Path("textures/texture_file.png") )
इसके बाद, टेक्सचर का टाइप तय करें और उससे जुड़े पैरामीटर सेट करें. इस उदाहरण में, हमने ओक्लूज़न टेक्सचर लागू किया है और इसकी इंटेंसिटी सेट की है:
pbrMaterial.setOcclusionTexture( texture = texture, strength = 1.0f )
अपने 3D ऑब्जेक्ट में मटीरियल और टेक्सचर जोड़ना
नए मटीरियल या टेक्सचर को लागू करने के लिए, अपनी glTF इकाई पर मौजूद किसी खास नोड के मौजूदा मटीरियल को बदलें. इसके लिए, GltfModelEntity पर setMaterialOverride को कॉल करें:
gltfModelEntity.setMaterialOverride( material = pbrMaterial, nodeName = "Node Name" )
नए बनाए गए मटीरियल हटाने के लिए, clearMaterialOverride को कॉल करें. ऐसा GltfModelEntity पर पहले से बदले गए नोड पर करें. इससे आपका 3D मॉडल, अपनी डिफ़ॉल्ट स्थिति में वापस आ जाता है:
gltfModelEntity.clearMaterialOverride( nodeName = "Node Name" )
glTF और glTF का लोगो, Khronos Group Inc. के ट्रेडमार्क हैं.