अपने ऐप्लिकेशन में 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 नोड पर मौजूद किसी नोड के मौजूदा मटीरियल को बदलें. इसके लिए, GltfModelNode पर setMaterialOverride को कॉल करें:
gltfModelNode.setMaterialOverride( material = pbrMaterial )
नए बनाए गए मटीरियल हटाने के लिए, GltfModelNode पर पहले से बदले गए नोड पर clearMaterialOverride को कॉल करें. इससे आपका 3D मॉडल, अपनी डिफ़ॉल्ट स्थिति में वापस आ जाता है:
gltfModelNode.clearMaterialOverride()
glTF और glTF लोगो, Khronos Group Inc. के ट्रेडमार्क हैं.