अपने ऐप्लिकेशन में 3D मॉडल को पसंद के मुताबिक बनाना

XR डिवाइस, जिन पर यह सुविधा काम करती है
इस गाइड से आपको इन XR डिवाइस के लिए अनुभव बनाने में मदद मिलती है.
XR हेडसेट
वायर वाले XR चश्मे

अपने ऐप्लिकेशन में 3D मॉडल जोड़ने के बाद, इसे पसंद के मुताबिक बनाकर विज़ुअल और इंटरैक्टिव अनुभव को बेहतर बनाया जा सकता है. उदाहरण के लिए, एम्बेड किए गए glTF ऐनिमेशन चलाए और कंट्रोल किए जा सकते हैं. साथ ही, पसंद के मुताबिक मटीरियल प्रॉपर्टी (जैसे कि बेस कलर या मेटैलिक रफ़नेस) तय की जा सकती हैं. इसके अलावा, अपने 3D मॉडल पर पसंद के मुताबिक टेक्सचर लागू किए जा सकते हैं. इन सुविधाओं की मदद से, रनटाइम के दौरान किसी ऑब्जेक्ट की दिखावट और उसके काम करने के तरीके में डाइनैमिक तौर पर बदलाव किया जा सकता है.

3D मॉडल को ऐनिमेट करना

glTF के स्पेसिफ़िकेशन के तहत, 3D मॉडल में एम्बेड किए गए ऐनिमेशन हो सकते हैं. Jetpack XR SDK में, स्केलेटल (रिग्ड), रिजिड, और मॉर्फ टारगेट (ब्लेंड शेप) ऐनिमेशन, सभी काम करते हैं. KHR_animation_pointer glTF एक्सटेंशन की मदद से बनाए गए मटीरियल ऐनिमेशन भी काम करते हैं.

किसी ऐनिमेशन को चलाने के लिए, सूची में से किसी खास ट्रैक का नाम तय करें animations. चलाना शुरू करने के लिए, GltfAnimation.start() पर कॉल करें. GltfAnimationStartOptions का इस्तेमाल करके, स्पीड, सीक टाइम, और यह तय किया जा सकता है कि ऐनिमेशन लूप होना चाहिए या नहीं.

val animation = gltfEntity.animations.find { it.name == "Walk" }
animation?.start(GltfAnimationStartOptions(shouldLoop = true))

ऐनिमेशन को pause(), resume(), और stop() किया जा सकता है. इसके अलावा, ऐनिमेशन ट्रैक में किसी खास समय पर जाने के लिए, seekTo() का इस्तेमाल किया जा सकता है. ऐनिमेशन की मौजूदा स्थिति के बारे में क्वेरी करने के लिए, GltfAnimation.AnimationState का इस्तेमाल करें.

अपने 3D मॉडल की मटीरियल प्रॉपर्टी को पसंद के मुताबिक बनाना

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

Material, किसी ऑब्जेक्ट की सतह के लिए विज़ुअल प्रॉपर्टी का सेट तय करता है. साथ ही, यह तय करता है कि सीन में वह सतह, रोशनी के साथ कैसे इंटरैक्ट करती है.

Jetpack XR में, इन मटीरियल को बनाने और उनमें बदलाव करने के लिए, KhronosPbrMaterial और KhronosUnlitMaterial क्लास का इस्तेमाल किया जाता है. जैसा कि नाम से पता चलता है, KhronosUnlitMaterials में रोशनी नहीं होती है. साथ ही, सीन की लाइटिंग से इन पर कोई असर नहीं पड़ता. KhronosPbrMaterial की मदद से, कई प्रॉपर्टी को पसंद के मुताबिक बनाया जा सकता है. जैसे, शाइन कलर, कोई ऑब्जेक्ट कितना मेटैलिक या रफ़ है, और क्या वह रोशनी छोड़ता है.

Android XR में काम करने वाली हर प्रॉपर्टी और पसंद के मुताबिक बनाए जा सकने वाले पैरामीटर के बारे में ज़्यादा जानने के लिए, हमारा रेफ़रंस दस्तावेज़ देखें. इन प्रॉपर्टी के बारे में बेहतर तरीके से समझने के लिए, Khronos की शब्दावली देखें.

3D मॉडल पर बेस कलर बदलने का उदाहरण

अपने 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 = 1.0f
    )
)

अपने 3D मॉडल के लिए पसंद के मुताबिक टेक्सचर बनाना

A Texture, एक इमेज ऐसेट है. इसे 3D मॉडल की सतह पर लागू करके, रंग, जानकारी या सतह की अन्य जानकारी दी जा सकती है. Jetpack XR Texture API की मदद से, अपने ऐप्लिकेशन के /assets/ फ़ोल्डर से, इमेज डेटा को एसिंक्रोनस तरीके से लोड किया जा सकता है. जैसे, पीएनजी फ़ाइलें.

टेक्सचर लोड करते समय, TextureSampler तय किया जा सकता है. इससे यह कंट्रोल किया जा सकता है कि टेक्सचर कैसे रेंडर किया जाए. सैंपलर, फ़िल्टर करने की प्रॉपर्टी (जब टेक्सचर, उसके ओरिजनल साइज़ से छोटा या बड़ा दिखता है) और रैपिंग मोड (स्टैंडर्ड [0, 1] रेंज से बाहर के कोऑर्डिनेट को मैनेज करने के लिए) तय करता है. Texture ऑब्जेक्ट, सिर्फ़ डेटा होता है. 3D मॉडल पर विज़ुअल इफ़ेक्ट पाने के लिए, इसे 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 नोड पर किसी खास नोड के लिए मौजूदा मटीरियल को बदलें. ऐसा करने के लिए, setMaterialOverride GltfModelNode पर कॉल करें:

gltfModelNode.setMaterialOverride(
    material = pbrMaterial
)

नए बनाए गए मटीरियल को हटाने के लिए, clearMaterialOverride को अपने GltfModelNode पर पहले से बदले गए नोड पर कॉल करें. इससे आपका 3D मॉडल, अपनी डिफ़ॉल्ट स्थिति में वापस आ जाता है:

gltfModelNode.clearMaterialOverride()


glTF और glTF का लोगो, Khronos Group Inc. के ट्रेडमार्क हैं.