Jetpack XR SDK में, स्पेशल एनवायरमेंट इमर्सिव सराउंडिंग होते हैं. इन्हें अपने ऐप्लिकेशन में जोड़कर, वर्चुअल सीन के बैकग्राउंड को पसंद के मुताबिक बनाया जा सकता है. स्पेशल एनवायरमेंट सिर्फ़ तब दिखते हैं, जब कोई ऐप्लिकेशन फ़ुल स्पेस मोड में हो.
स्पेशल एनवायरमेंट के बारे में खास जानकारी
SpatialEnvironment, ऐप्लिकेशन के लिए स्पेशल एनवायरमेंट की सेटिंग मैनेज करता है. यह एक अलग स्काईबॉक्स इमेज और glTF-स्पेसिफ़ाइड ज्यामिति का कंपोज़िट है. एक बार में सिर्फ़ एक स्काईबॉक्स इमेज और एक glTF ज्यामिति फ़ाइल सेट की जा सकती है.
स्काईबॉक्स, वर्चुअल सीन में उपयोगकर्ता को अपने आस-पास दिखने वाली इमेज को दिखाता है. इससे दूर के बैकग्राउंड का भ्रम पैदा होता है, जैसे कि आसमान, पहाड़ या शहर का नज़ारा. उपयोगकर्ता, स्काईबॉक्स के साथ इंटरैक्ट नहीं कर सकता या उसके करीब नहीं जा सकता. Jetpack XR SDK, OpenEXR स्टैंडर्ड में स्फ़ेरिकल स्काईबॉक्स के साथ काम करता है. EXR स्काईबॉक्स, आपके ऐप्लिकेशन के लिए इमर्सिव बैकग्राउंड उपलब्ध कराने के साथ-साथ, आपके ऐप्लिकेशन से लोड किए गए 3D मॉडल के लिए, इमेज पर आधारित लाइटिंग (आईबीएल) भी उपलब्ध कराता है. ज़्यादा जानकारी के लिए, 3D मॉडल के साथ काम करने की गाइड देखें.
स्पेशल एनवायरमेंट में, glTF स्टैंडर्ड में 3D ज्यामिति वाला कॉन्टेंट भी शामिल हो सकता है. इस तरह लोड की गई एनवायरमेंट ज्योमेट्री, असल दुनिया के फ़्लोर के साथ अपने-आप अलाइन हो जाएगी. एनवायरमेंट ज्योमेट्री, आपके एनवायरमेंट को असली जैसा दिखाने का एक शानदार तरीका है. इसके लिए, फ़ोरग्राउंड और मिडग्राउंड एलिमेंट का इस्तेमाल किया जाता है. ये एलिमेंट, पैरालैक्स इफ़ेक्ट के साथ स्काईबॉक्स में ब्लेंड हो जाते हैं.
स्पेशल एनवायरमेंट के लिए डिज़ाइन से जुड़े दिशा-निर्देश में, आपको अलग-अलग तरह की उन ऐसेट के बारे में जानकारी मिलेगी जिनका इस्तेमाल करके स्पेशल एनवायरमेंट बनाए जा सकते हैं. साथ ही, आपको सुरक्षित और मज़ेदार स्पेशल एनवायरमेंट बनाने का तरीका भी पता चलेगा.
अपने ऐप्लिकेशन के लिए, इन तीन में से किसी एक कॉन्फ़िगरेशन को सेट किया जा सकता है:
- स्काईबॉक्स इमेज और glTF ज्यामिति का कॉम्बिनेशन.
- पासथ्रू सरफेस, जहां दिखाया गया एनवायरमेंट, डिवाइस के बाहर की ओर लगे कैमरों से मिलने वाला लाइव फ़ीड होता है. पूरी ओपैसिटी पर, यह पासथ्रू सरफ़ेस, स्काईबॉक्स और ज्यामिति को पूरी तरह से छिपा देता है.
- एक मिला-जुला कॉन्फ़िगरेशन, जिसमें पासथ्रू प्लैटफ़ॉर्म न तो पूरी तरह से ओपेक है और न ही पूरी तरह से पारदर्शी है. इस मामले में, पासथ्रू की सतह आधी पारदर्शी हो जाती है और ऐल्फ़ा, स्काईबॉक्स और उसके पीछे की ज्यामिति के साथ ब्लेंड हो जाता है.
स्पेशल एनवायरमेंट के लिए स्पेशल सुविधाएं
SpatialCapability: यह मौजूदा सेशन की स्पेशल सुविधाओं को दिखाता है. स्पेशल एनवायरमेंट के लिए, कुछ स्पेशल सुविधाएं काम की होती हैं.SpatialCapability.PASSTHROUGH_CONTROL: इससे पता चलता है कि गतिविधि, मौजूदा समय में पासथ्रू को चालू या बंद कर सकती है या नहीं.SpatialCapability.APP_ENVIRONMENT: इससे पता चलता है कि गतिविधि, मौजूदा समय में अपना स्पेशल एनवायरमेंट सेट कर सकती है या नहीं.
स्पेशल एनवायरमेंट के संसाधनों को इंपोर्ट और लोड करना
स्पेशल एनवायरमेंट के लिए glTF और EXR रिसॉर्स, एसिंक्रोनस तरीके से लोड होते हैं. इसके लिए, Session क्लास का इस्तेमाल किया जाता है.
glTF संसाधन बनाना
glTF रिसॉर्स को GltfModel के तौर पर बनाया जा सकता है. इसमें glTF को किसी लोकल फ़ाइल से लोड किया जाता है. GltfModel का इस्तेमाल, स्पेशल ऐप्लिकेशन एनवायरमेंट के हिस्से के तौर पर किया जा सकता है.
val environmentGeometry = GltfModel.create(session, Paths.get("DayGeometry.glb"))
इमेज पर आधारित लाइटिंग रिसॉर्स बनाना
इमेज पर आधारित लाइटिंग रिसॉर्स को ImageBasedLightingAsset के तौर पर बनाया जा सकता है. इसमें लाइटिंग को किसी लोकल फ़ाइल से लोड किया जाता है.
ImageBasedLightingAsset का इस्तेमाल cmgen के साथ करके, आपके स्काईबॉक्स के लिए आईबीएल की ZIP फ़ाइल बनाई जा सकती है. ज़्यादा जानकारी के लिए, एनवायरमेंट ऐसेट को ऑप्टिमाइज़ करने के बारे में हमारी गाइड देखें.
val lightingForSkybox = ImageBasedLightingAsset.createFromZip(session, Paths.get("BlueSkyboxLighting.zip"))
अपने ऐप्लिकेशन के लिए SpatialEnvironmentPreference सेट करें
preferredSpatialEnvironment प्रॉपर्टी, किसी ऐप्लिकेशन के लिए पसंदीदा स्पेशल एनवायरमेंट को कंट्रोल करती है. जब इस प्रॉपर्टी का इस्तेमाल करके कोई प्राथमिकता सेट की जाती है, तो तुरंत कोई बदलाव नहीं होता. हालांकि, अगर isPreferredSpatialEnvironmentActive पहले से ही true है, तो बदलाव तुरंत लागू हो जाता है. जब डिवाइस ऐसी स्थिति में आ जाता है जहां एक्सआर बैकग्राउंड को बदला जा सकता है और SpatialCapability.APP_ENVIRONMENT की सुविधा उपलब्ध होती है, तो ऐप्लिकेशन के लिए पसंदीदा स्पेशल एनवायरमेंट अपने-आप दिखने लगेगा.
प्राथमिकता को null पर सेट करने से, ऐप्लिकेशन के लिए पसंदीदा स्पेशल एनवायरमेंट बंद हो जाएगा. इसका मतलब है कि इसके बजाय, डिफ़ॉल्ट सिस्टम एनवायरमेंट दिखेगा.
अगर दिया गया SpatialEnvironmentPreference शून्य नहीं है, लेकिन इसकी सभी प्रॉपर्टी शून्य हैं, तो स्पेसियल एनवायरमेंट में काले रंग का स्काईबॉक्स होगा और कोई ज्यामिति नहीं होगी.
SpatialEnvironment की स्थिति में होने वाले बदलावों की सूचना पाने के लिए,
addOnSpatialEnvironmentChangedListener का इस्तेमाल करें.
बुनियादी इस्तेमाल
यह कोड स्निपेट, एनवायरमेंट ज्योमेट्री और स्काईबॉक्स रिसॉर्स बनाता है. इसके बाद, स्पेशल एनवायरमेंट की प्राथमिकता सेट करता है. इस प्राथमिकता को सेव किया जाएगा. साथ ही, इसे तब लागू किया जाएगा, जब ऐप्लिकेशन में अपना एनवायरमेंट सेट करने की सुविधा होगी.
val spatialEnvironmentPreference = SpatialEnvironment.SpatialEnvironmentPreference(lightingForSkybox, environmentGeometry) session.scene.spatialEnvironment.preferredSpatialEnvironment = spatialEnvironmentPreference if (session.scene.spatialEnvironment.isPreferredSpatialEnvironmentActive) { // The environment was successfully updated and is now visible, and any listeners // specified using addOnSpatialEnvironmentChangedListener will be notified. } else { // The passthrough opacity preference was successfully set, but not // immediately visible. The passthrough opacity change will be applied // when the activity has the SPATIAL_CAPABILITY_APP_ENVIRONMENT capability. // Then, any listeners specified using addOnSpatialEnvironmentChangedListener // will be notified. }
बेहतर इस्तेमाल
ज़्यादा ऐडवांस इस्तेमाल के उदाहरणों के लिए, जहां आपको एनवायरमेंट पर ज़्यादा कंट्रोल की ज़रूरत होती है, वहां SpatialCapability की जांच शामिल की जा सकती है. साथ ही, addOnSpatialEnvironmentChangedListener को लागू किया जा सकता है, ताकि यह तय किया जा सके कि आपको स्पेसियल एनवायरमेंट की सेटिंग कब सेट करनी है.
अपने ऐप्लिकेशन के लिए, स्पेशल एनवायरमेंट के लिए PassthroughOpacityPreference सेट करना
ऐप्लिकेशन के इमर्सिव वर्चुअल बैकग्राउंड के कॉम्पोनेंट में से एक, पासथ्रू सरफ़ेस है. इस मामले में, जो बैकग्राउंड दिखता है वह डिवाइस के बाहर की ओर लगे कैमरों से मिलने वाला लाइव फ़ीड होता है.
setPassthroughOpacityPreference का इस्तेमाल, किसी ऐप्लिकेशन के लिए पासथ्रू की पसंदीदा ओपैसिटी सेट करने के लिए किया जाता है. इस तरीके से सिर्फ़ प्राथमिकता सेट की जाती है. इससे तब तक कोई बदलाव नहीं होता, जब तक SpatialCapability.PASSTHROUGH_CONTROL की सुविधा उपलब्ध न हो. जब डिवाइस ऐसी स्थिति में आ जाता है जहां पासथ्रू ओपैसिटी को बदला जा सकता है और SpatialCapability.PASSTHROUGH_CONTROL सुविधा उपलब्ध होती है, तो ऐप्लिकेशन के लिए पसंदीदा पासथ्रू ओपैसिटी अपने-आप लागू हो जाएगी.
पासथ्रू ओपैसिटी की वैल्यू, 0.0f (शून्य ओपैसिटी, जहां पासथ्रू प्लैटफ़ॉर्म नहीं दिखता) से लेकर 1.0f (पूरी ओपैसिटी, जहां पासथ्रू प्लैटफ़ॉर्म, स्पेशल एनवायरमेंट को छिपा देता है) तक होती है. setPassthroughOpacityPreference पैरामीटर, एक नलेबल फ़्लोट है. वैल्यू को शून्य पर सेट करने का मतलब है कि ऐप्लिकेशन के लिए, पासथ्रू की ओपैसिटी से जुड़ी कोई प्राथमिकता नहीं है. साथ ही, पासथ्रू का कंट्रोल सिस्टम को वापस मिल जाएगा.
बुनियादी इस्तेमाल
यह कोड स्निपेट, पासथ्रू ओपैसिटी की प्राथमिकता सेट करता है. इस प्राथमिकता को सेव किया जाएगा. साथ ही, इसे तब लागू किया जाएगा, जब ऐप्लिकेशन में पासथ्रू की ओपैसिटी सेट करने की सुविधा उपलब्ध होगी.
session.scene.spatialEnvironment.preferredPassthroughOpacity = 1.0f if (session.scene.spatialEnvironment.currentPassthroughOpacity == 1.0f) { // The passthrough opacity request succeeded and should be visible now, and any listeners // specified using addOnPassthroughOpacityChangedListener will be notified. } else { // The passthrough opacity preference was successfully set, but not // immediately visible. The passthrough opacity change will be applied // when the activity has the // SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL capability. // Then, any listeners specified using addOnPassthroughOpacityChangedListener // will be notified. }
बेहतर इस्तेमाल
अगर आपको पासथ्रू की ओपैसिटी पर ज़्यादा कंट्रोल चाहिए, तो SpatialCapability की जांच शामिल करें. साथ ही, addOnPassthroughOpacityChangedListener का इस्तेमाल करके लिसनर जोड़ें. इससे यह तय किया जा सकता है कि आपको पासथ्रू की ओपैसिटी की सेटिंग कब सेट करनी है.
ऐसेट ऑप्टिमाइज़ेशन
उपयोगकर्ताओं के SpatialEnvironment को सेट करने के लिए ऐसेट बनाते समय, पक्का करें कि आपकी ऐसेट अच्छी क्वालिटी के रिज़ॉल्यूशन वाली हों. साथ ही, फ़ाइल का साइज़ भी सही हो. ज़्यादा जानने के लिए, एनवायरमेंट ऐसेट को ऑप्टिमाइज़ करने के बारे में हमारे दिशा-निर्देश देखें.
पासथ्रू की मौजूदा अपारदर्शिता का पता लगाना
val currentPassthroughOpacity = session.scene.spatialEnvironment.currentPassthroughOpacity