3D मॉडल के साथ काम करते समय, Jetpack XR SDK, glTF
2.0 ओपन स्टैंडर्ड के साथ काम करता है. जब Android XR, Jetpack XR SDK टूल से बनाए गए ऐप्लिकेशन को रेंडर करता है, तो 3D मॉडल को glTF 2.0 स्टैंडर्ड में बताई गई फ़िज़िकली आधारित रेंडरिंग (पीबीआर) तकनीकों के साथ रेंडर किया जाएगा. साथ ही, extensions
के साथ काम करने वाले Autodesk Maya, Maxon ZBrush, Blender, और Spline जैसे ज़्यादातर डिजिटल कॉन्टेंट क्रिएशन (डीसीसी) टूल, 3D मॉडल को glTF फ़ॉर्मैट (.gltf
या .glb
फ़ाइलें) में एक्सपोर्ट कर सकते हैं.
अगर उपयोगकर्ता या आपके ऐप्लिकेशन ने कोई SpatialEnvironment
स्काईबॉक्स तय किया है, तो 3D मॉडल को, एनवायरमेंट स्काईबॉक्स से मिली लाइटिंग की जानकारी के हिसाब से रोशन किया जाएगा. चमकदार चीज़ों और स्पेक्ट्रल हाइलाइट से भी, एनवायरमेंट स्काईबॉक्स दिखेगा. अगर पासथ्रू की सुविधा चालू है, तो लाइटिंग, रिफ़्लेक्शन, और स्पेक्ट्रल हाइलाइट, एक ही दिशा से आने वाली लाइट वाले साधारण और रोशन कमरे पर आधारित होंगी.
इस्तेमाल किए जा सकने वाले मटीरियल के बारे में खास जानकारी पाने के लिए, Khronos साइट पर glTF PBR Properties देखें.
Jetpack XR SDK टूल की मदद से बनाए गए ऐप्लिकेशन में 3D मॉडल लोड करने के दो मुख्य तरीके हैं.
- इसे
ActivitySpace
में लोड करें, जैसा कि नीचे दिए गए सेक्शन में बताया गया है, ActivitySpace में 3D मॉडल डालें - इंटेंट की मदद से, पहले से मौजूद सीन व्यूअर का इस्तेमाल करना
ActivitySpace में 3D मॉडल डालना
glTF फ़ाइल बनाने के बाद, अगला चरण यह है कि उसे Android Studio में एसेट डायरेक्ट्री में जोड़ें. हमारा सुझाव है कि ऐसेट टाइप को बेहतर तरीके से व्यवस्थित करने के लिए, models
डायरेक्ट्री बनाएं.
glTF मॉडल लोड करने के लिए, createGltfResourceAsync
को कॉल करें.
// load the gltf file
val gltfModel = xrSession.createGltfResourceAsync("models/saturn_rings.glb").await()
इस समय, मॉडल मेमोरी में लोड हो जाता है, लेकिन उसे अभी रेंडर नहीं किया जा रहा है. अगर आपको कई 3D मॉडल लोड करने हैं या आपका मॉडल बड़ा है, तो समय से पहले उन्हें एसिंक्रोनस तौर पर लोड करना एक अच्छा विचार है. इस तरह, उपयोगकर्ताओं को आपके मॉडल के मेमोरी में लोड होने का इंतज़ार नहीं करना पड़ता.
हमें ActivitySpace
में glTF जोड़ना होगा. इकाई बनाने और उसे ActivitySpace
में डालने के लिए, createGltfEntity
को कॉल करें. सबसे सही तरीके के तौर पर, आपको देखना चाहिए कि ऐप्लिकेशन ऐसी स्थिति में है या नहीं जिसमें स्पेस की जानकारी देने वाली सुविधाएं काम करती हैं.
// check for spatial capabilities
if (xrSession.getSpatialCapabilities().hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT)){
// create the gltf entity using the gltf file from the previous snippet
val gltfEntity = xrSession.createGltfEntity(gltfModel)
}
अब ऐप्लिकेशन चलाने पर, आपको लोड किया गया 3D मॉडल दिखेगा.
Compose वॉल्यूम में 3D मॉडल डालना
आपको अब भी createGltfResourceAsync
का इस्तेमाल करके, glTF को मेमोरी में लोड करना होगा. हालांकि, अगर XR के लिए Jetpack Compose का इस्तेमाल करके यूज़र इंटरफ़ेस (यूआई) बनाया जा रहा है, तो 3D मॉडल को Volume
में रखा जा सकता है. अपने लेआउट में 3D ऑब्जेक्ट डालने के लिए वॉल्यूम का इस्तेमाल करना लेख पढ़ें.
3D मॉडल ऐनिमेट करना
glTF स्पेसिफ़िकेशन के तहत, 3D मॉडल में ऐनिमेशन जोड़े जा सकते हैं.
Jetpack XR SDK में स्केलेटल (रिग किए गए), रिगिड, और मॉर्फ़ टारगेट (ब्लेंड किए गए आकार) ऐनिमेशन का इस्तेमाल किया जा सकता है. KHR_animation_pointer
glTF एक्सटेंशन की मदद से बनाए गए मटीरियल ऐनिमेशन भी काम करते हैं.
कोई ऐनिमेशन चलाने के लिए, startAnimation
बोलें और ऐनिमेशन का नाम बताएं. आपके पास यह तय करने का विकल्प होता है कि ऐनिमेशन को हमेशा लूप में चलाया जाए या नहीं.
//start a looping walk animation for a model
gltfEntity.startAnimation(loop = true, animationName = "Walk")
startAnimation
को दूसरी बार दबाने पर, मौजूदा ऐनिमेशन बंद हो जाएगा और नया ऐनिमेशन शुरू हो जाएगा.
getAnimationState()
की मदद से, ऐनिमेशन की मौजूदा स्थिति के बारे में क्वेरी की जा सकती है.
अगर startAnimation()
को कॉल करते समय, ऐनिमेशन का जो नाम दिया गया है वह मौजूद नहीं है, तो कॉल चुपचाप बंद हो जाता है. साथ ही, चल रहे सभी ऐनिमेशन बंद हो जाते हैं और getAnimationState()
के तौर पर STOPPED
दिखता है.
सीन व्यूअर का इस्तेमाल करके 3D मॉडल लोड करना
अगर आपको इंटरैक्शन की बुनियादी सुविधाओं के साथ 3D मॉडल को लोड करने का सबसे आसान तरीका चाहिए, तो मोबाइल पर जैसे इस्तेमाल किया जाता है वैसे ही सीन व्यूअर का इस्तेमाल करें. Android XR और मोबाइल पर मौजूद सीन व्यूअर के बीच एक मुख्य अंतर यह है कि सीन व्यूअर सिर्फ़ glTF फ़ाइल पर ले जाने वाले फ़ाइल यूआरआई पैरामीटर के साथ काम करता है. साथ ही, अन्य सभी पैरामीटर को अनदेखा कर दिया जाता है.
सीन व्यूअर एक अलग ऐप्लिकेशन है. इसे किसी इंटेंट की मदद से चालू किया जाता है और यह फ़ुल स्क्रीन मोड में काम करता है. इस वजह से, इसे चालू करने पर, आपका ऐप्लिकेशन नहीं दिखेगा और सीन व्यूअर पर फ़ोकस रहेगा. आपने जिन एनवायरमेंट में बदलाव किया है उन्हें उपयोगकर्ता के सिस्टम की प्राथमिकताओं पर रीसेट कर दिया जाएगा.
Android XR पर Scene Viewer में glTF फ़ाइल देखने के लिए, Intent
का इस्तेमाल करने का उदाहरण यहां दिया गया है:
val THREED_MODEL_URL = "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/FlightHelmet/glTF/FlightHelmet.gltf"
val MIME_TYPE = "model/gltf-binary"
val sceneViewerIntent = Intent(Intent.ACTION_VIEW)
val intentUri =
Uri.parse("https://arvr.google.com/scene-viewer/1.2")
.buildUpon()
.appendQueryParameter("file", THREED_MODEL_URL)
.build()
sceneViewerIntent.setDataAndType(intentUri, MIME_TYPE)
startActivity(sceneViewerIntent)
सीन व्यूअर के इंटरैक्टिव विकल्पों के बारे में ज़्यादा जानने के लिए, 3D मॉडल के डिज़ाइन से जुड़ा दस्तावेज़ देखें.
glTF एक्सटेंशन
Jetpack XR SDK टूल, कई gfTF एक्सटेंशन के साथ काम करता है. इन एक्सटेंशन की मदद से, 3D मॉडल की सुविधाओं को बेहतर बनाया जा सकता है. ये सुविधाएं, GltfEntity
और सीन व्यूअर, दोनों में उपलब्ध हैं.
KHR_animation_pointer
KHR_draco_mesh_compression
KHR_lights_punctual
KHR_materials_clearcoat
KHR_materials_sheen
KHR_materials_unlit
KHR_materials_variants
KHR_mesh_quantization
KHR_texture_basisu
KHR_texture_transform
EXT_texture_webp