अपने ऐप्लिकेशन में 3D मॉडल जोड़ना

3D मॉडल के साथ काम करते समय, Jetpack XR SDK, glTF 2.0 ओपन स्टैंडर्ड के साथ काम करता है. जब Android XR, Jetpack XR SDK के साथ बनाए गए ऐप्लिकेशन को रेंडर करता है, तो 3D मॉडल को glTF 2.0 स्टैंडर्ड में बताई गई फ़िज़िकली आधारित रेंडरिंग (पीबीआर) तकनीकों के साथ रेंडर किया जाएगा. साथ ही, इन मॉडल को इस्तेमाल किए जा सकने वाले एक्सटेंशन भी रेंडर किए जाएंगे. Autodesk Maya, Maxon ZBrush, Blender, और Spline जैसे ज़्यादातर डिजिटल कॉन्टेंट क्रिएशन (डीसीसी) टूल, 3D मॉडल को glTF फ़ॉर्मैट (.gltf या .glb फ़ाइलें) में एक्सपोर्ट कर सकते हैं.

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

इस्तेमाल किए जा सकने वाले मटीरियल के बारे में खास जानकारी पाने के लिए, Khronos साइट पर glTF PBR Properties देखें.

Jetpack XR SDK टूल की मदद से बनाए गए ऐप्लिकेशन, 3D मॉडल लोड करने के लिए दो मुख्य तरीकों का इस्तेमाल कर सकते हैं.

ActivitySpace में 3D मॉडल डालना

glTF फ़ाइल बनाने के बाद, अगला चरण Android Studio में ऐसेट डायरेक्ट्री में इसे जोड़ना है. हमारा सुझाव है कि ऐसेट टाइप को बेहतर तरीके से व्यवस्थित करने के लिए, models डायरेक्ट्री बनाएं.

/models डायरेक्ट्री में ऐसेट जोड़ने का उदाहरण

glTF मॉडल लोड करने के लिए, GltfModel.create() को कॉल करें.

val gltfModel = GltfModel.create(session, "models/saturn_rings.glb").await()

इस समय, मॉडल मेमोरी में लोड हो जाता है, लेकिन उसे अभी रेंडर नहीं किया जा रहा है. अगर आपको कई 3D मॉडल लोड करने हैं या आपका मॉडल बड़ा है, तो समय से पहले उन्हें एसिंक्रोनस तौर पर लोड करना एक अच्छा विचार है. इस तरह, उपयोगकर्ताओं को आपके मॉडल के मेमोरी में लोड होने का इंतज़ार नहीं करना पड़ता.

हमें ActivitySpace में glTF जोड़ना होगा. इकाई बनाने और उसे ActivitySpace में डालने के लिए, GltfModelEntity.create को कॉल करें. सबसे सही तरीका यह है कि आप देखें कि ऐप्लिकेशन ऐसी स्थिति में है या नहीं जिसमें स्पेस की जानकारी देने वाली सुविधाएं काम करती हैं.

if (session.scene.spatialCapabilities
    .hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT)
) {
    val gltfEntity = GltfModelEntity.create(session, gltfModel)
}

अब ऐप्लिकेशन चलाने पर, आपको लोड किया गया 3D मॉडल दिखेगा.

लोड किए गए 3D मॉडल का उदाहरण

Compose वॉल्यूम में 3D मॉडल डालना

आपको अब भी GltfModel.create() का इस्तेमाल करके, glTF को मेमोरी में लोड करना होगा. हालांकि, अगर XR के लिए Jetpack Compose का इस्तेमाल करके यूज़र इंटरफ़ेस (यूआई) बनाया जा रहा है, तो 3D मॉडल को Volume में रखा जा सकता है. अपने लेआउट में 3D ऑब्जेक्ट डालने के लिए, वॉल्यूम का इस्तेमाल करना लेख पढ़ें.

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

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

ऐनिमेशन चलाने के लिए, startAnimation() बोलें और ऐनिमेशन का नाम बताएं. आपके पास यह तय करने का विकल्प होता है कि ऐनिमेशन को हमेशा के लिए लूप करना है या नहीं.

gltfEntity.startAnimation(loop = true, animationName = "Walk")

startAnimation को दूसरी बार दबाने पर, मौजूदा ऐनिमेशन बंद हो जाएगा और नया ऐनिमेशन शुरू हो जाएगा.

getAnimationState() की मदद से, ऐनिमेशन की मौजूदा स्थिति के बारे में क्वेरी की जा सकती है.

अगर startAnimation() को कॉल करते समय, ऐनिमेशन का जो नाम दिया गया है वह मौजूद नहीं है, तो कॉल चुपचाप बंद हो जाता है. साथ ही, चल रहे सभी ऐनिमेशन बंद हो जाते हैं और getAnimationState(), STOPPED दिखाता है.

सीन व्यूअर का इस्तेमाल करके 3D मॉडल लोड करना

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

सीन व्यूअर एक अलग ऐप्लिकेशन है. इसे किसी इंटेंट का इस्तेमाल करके चालू किया जाता है और यह फ़ुल स्क्रीन मोड में चलता है. इस वजह से, इसे चालू करने पर, आपका ऐप्लिकेशन नहीं दिखेगा और Scene Viewer पर फ़ोकस रहेगा. आपने जो भी एनवायरमेंट बदले होंगे उन्हें उपयोगकर्ता के सिस्टम की प्राथमिकताओं पर रीसेट कर दिया जाएगा.

Android XR पर, सीन व्यूअर में glTF फ़ाइल देखने के लिए, Intent का इस्तेमाल करने का उदाहरण यहां दिया गया है:

val url =
    "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/Avocado/glTF/Avocado.gltf"
val sceneViewerIntent = Intent(Intent.ACTION_VIEW)
val intentUri =
    Uri.parse("https://arvr.google.com/scene-viewer/1.2")
        .buildUpon()
        .appendQueryParameter("file", url)
        .build()
sceneViewerIntent.setData(intentUri)
try {
    startActivity(sceneViewerIntent)
} catch (e: ActivityNotFoundException) {
    // There is no activity that could handle the intent.
}

सीन व्यूअर के इंटरैक्टिव विकल्पों के बारे में ज़्यादा जानने के लिए, 3D मॉडल के डिज़ाइन से जुड़ा दस्तावेज़ देखें.

glTF एक्सटेंशन

Jetpack XR SDK, कई gfTF एक्सटेंशन के साथ काम करता है. इन एक्सटेंशन की मदद से, 3D मॉडल की सुविधाओं को बेहतर बनाया जा सकता है. ये सुविधाएं, GltfEntity और सीन व्यूअर, दोनों में उपलब्ध हैं.