Jetpack XR SDK में, स्पेशल एनवायरमेंट ऐसे इमर्सिव आस-पास के माहौल होते हैं जिन्हें अपने ऐप्लिकेशन में जोड़ा जा सकता है. इससे वर्चुअल सीन के बैकग्राउंड को पसंद के मुताबिक बनाया जा सकता है. स्पेशल एनवायरमेंट सिर्फ़ तब दिखते हैं, जब ऐप्लिकेशन फ़ुल स्पेस में हो.
स्पेशल एनवायरमेंट की खास जानकारी
SpatialEnvironment का इस्तेमाल, ऐप्लिकेशन के स्पेशल एनवायरमेंट की प्राथमिकताओं को मैनेज करने के लिए किया जाता है. यह एक स्टैंडअलोन स्काईबॉक्स इमेज और glTF में बताई गई ज्यामिति का कंपोज़िट है. एक बार में सिर्फ़ एक स्काईबॉक्स इमेज और एक glTF ज्यामिति फ़ाइल सेट की जा सकती है.
स्काईबॉक्स, वर्चुअल सीन में उपयोगकर्ता को दिखने वाली इमेज को दिखाता है. इससे दूर के बैकग्राउंड एनवायरमेंट का भ्रम पैदा होता है. जैसे, आसमान, पहाड़ या शहर का नज़ारा. उपयोगकर्ता, स्काईबॉक्स से इंटरैक्ट नहीं कर सकता या उसके करीब नहीं जा सकता. Jetpack XR SDK, OpenEXR स्टैंडर्ड में स्फ़ेरिकल स्काईबॉक्स को सपोर्ट करता है. EXR स्काईबॉक्स, आपके ऐप्लिकेशन के लिए शानदार बैकग्राउंड उपलब्ध कराने के साथ-साथ, आपके ऐप्लिकेशन से लोड किए गए 3D मॉडल के लिए इमेज आधारित लाइटिंग (आईबीएल) भी उपलब्ध कराता है. ज़्यादा जानकारी के लिए, 3D मॉडल के साथ काम करने से जुड़ी गाइड पढ़ें.
स्पेशल एनवायरमेंट में, glTF स्टैंडर्ड में 3D ज्यामिति वाला कॉन्टेंट भी शामिल किया जा सकता है. इस तरह से लोड की गई एनवायरमेंट ज्योमेट्री, असल दुनिया के फ़्लोर के साथ अपने-आप अलाइन हो जाएगी. एनवायरमेंट ज्योमेट्री, फ़ोरग्राउंड और मिडग्राउंड एलिमेंट के ज़रिए अपने एनवायरमेंट को असली जैसा दिखाने का एक बेहतरीन तरीका है. ये एलिमेंट, पैरलैक्स इफ़ेक्ट के साथ स्काईबॉक्स में ब्लेंड हो जाते हैं.
स्पेशल एनवायरमेंट के डिज़ाइन से जुड़ी गाइडलाइन में, आपको स्पेशल एनवायरमेंट बनाने के लिए इस्तेमाल की जा सकने वाली अलग-अलग तरह की ऐसेट के बारे में जानकारी मिलेगी. साथ ही, आपको यह भी पता चलेगा कि सुरक्षित और मज़ेदार स्पेशल एनवायरमेंट कैसे बनाए जाते हैं.
अपने ऐप्लिकेशन के लिए, इन तीन कॉन्फ़िगरेशन में से किसी एक को स्पैटियल एनवायरमेंट के तौर पर सेट किया जा सकता है:
- स्काईबॉक्स इमेज और glTF ज्यामिति का कॉम्बिनेशन.
- पासथ्रू की सुविधा वाली सतह, जहां डिवाइस के सामने की ओर लगे कैमरों से लाइव फ़ीड दिखाया जाता है. पूरी अपारदर्शिता पर, यह पास-थ्रू सतह स्काईबॉक्स और ज्यामिति को पूरी तरह से छिपा देती है.
- मिक्स कॉन्फ़िगरेशन, जिसमें पासथ्रू की सुविधा वाली सतह पूरी तरह से पारदर्शी नहीं होती है. साथ ही, यह पूरी तरह से अपारदर्शी भी नहीं होती है. इस मामले में, पासथ्रू की सतह थोड़ी पारदर्शी हो जाती है और इसके पीछे मौजूद स्काईबॉक्स और ज्यामिति के साथ अल्फा ब्लेंड हो जाती है.
स्पेशल एनवायरमेंट के लिए स्पेशल सुविधाएं
SpatialCapabilities: इससे मौजूदा सेशन की स्पेशल क्षमताओं के बारे में पता चलता है. कुछ स्पेशल सुविधाएं, स्पेशल एनवायरमेंट के लिए काम की होती हैं.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL: इससे पता चलता है कि गतिविधि के दौरान, पासथ्रू मोड को चालू या बंद किया जा सकता है या नहीं.SPATIAL_CAPABILITY_APP_ENVIRONMENT: इससे पता चलता है कि गतिविधि, मौजूदा समय में अपना स्पेशल एनवायरमेंट सेट कर सकती है या नहीं.
स्पेशल एनवायरमेंट रिसॉर्स इंपोर्ट और लोड करना
स्पेशल एनवायरमेंट के लिए glTF और EXR संसाधन, Session क्लास का इस्तेमाल करके एसिंक्रोनस तरीके से लोड किए जाते हैं.
glTF संसाधन बनाना
glTF रिसॉर्स को GltfModel के तौर पर बनाया जा सकता है. इसमें glTF को किसी लोकल फ़ाइल से लोड किया जाता है. GltfModel का इस्तेमाल, स्पेशल ऐप्लिकेशन एनवायरमेंट के हिस्से के तौर पर किया जा सकता है.
val environmentGeometry = GltfModel.create(session, Paths.get("DayGeometry.glb"))
इमेज के आधार पर रोशनी डालने वाला संसाधन बनाना
इमेज पर आधारित लाइटिंग रिसोर्स को ImageBasedLightingAsset के तौर पर बनाया जा सकता है. इसमें लाइटिंग को किसी लोकल फ़ाइल से लोड किया जाता है.
स्काईबॉक्स के लिए आईबीएल की ZIP फ़ाइल बनाने के लिए, ImageBasedLightingAsset का इस्तेमाल cmgen के साथ किया जा सकता है. ज़्यादा जानकारी के लिए, एनवायरमेंट ऐसेट को ऑप्टिमाइज़ करने के बारे में हमारी गाइड देखें.
val lightingForSkybox = ImageBasedLightingAsset.createFromZip(session, Paths.get("BlueSkyboxLighting.zip"))
अपने ऐप्लिकेशन के लिए SpatialEnvironmentPreference सेट करना
preferredSpatialEnvironment प्रॉपर्टी, किसी ऐप्लिकेशन के लिए पसंदीदा स्पैटियल एनवायरमेंट को कंट्रोल करती है. इस प्रॉपर्टी का इस्तेमाल करके कोई प्राथमिकता सेट करने पर, तुरंत बदलाव नहीं होता. ऐसा तब तक होता है, जब तक isPreferredSpatialEnvironmentActive पहले से ही true न हो. जब डिवाइस ऐसी स्थिति में पहुंच जाता है जहां XR बैकग्राउंड को बदला जा सकता है और SpatialCapabilities.SPATIAL_CAPABILITY_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. }
ऐडवांस इस्तेमाल
अगर आपको ज़्यादा बेहतर इस्तेमाल के उदाहरणों के लिए, एनवायरमेंट पर ज़्यादा कंट्रोल चाहिए, तो SpatialCapabilities की जांच शामिल करें. साथ ही, addOnSpatialEnvironmentChangedListener लागू करें. इससे यह तय किया जा सकेगा कि आपको स्पेशल एनवायरमेंट की सेटिंग कब सेट करनी है.
अपने ऐप्लिकेशन के स्पेशल एनवायरमेंट के लिए, PassthroughOpacityPreference सेट करना
ऐप्लिकेशन के इमर्सिव वर्चुअल बैकग्राउंड के कॉम्पोनेंट में से एक, पासथ्रू सरफ़ेस होता है. इस मामले में, बैकग्राउंड में डिवाइस के बाहर की ओर लगे कैमरों का लाइव फ़ीड दिखता है.
setPassthroughOpacityPreference का इस्तेमाल, किसी ऐप्लिकेशन के लिए पास-थ्रू की पसंदीदा अपारदर्शिता सेट करने के लिए किया जाता है. यह तरीका सिर्फ़ प्राथमिकता सेट करता है और SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL केपबिलिटी उपलब्ध होने पर ही तुरंत बदलाव करता है. जब डिवाइस ऐसी स्थिति में पहुंच जाता है जहां पास-थ्रू अपारदर्शिता को बदला जा सकता है और SpatialCapabilities.SPATIAL_CAPABILITY_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. }
ऐडवांस इस्तेमाल
अगर आपको ज़्यादा बेहतर तरीके से पासथ्रू ओपैसिटी को कंट्रोल करना है, तो SpatialCapabilities चेक शामिल करें. साथ ही, addOnPassthroughOpacityChangedListener का इस्तेमाल करके एक लिसनर जोड़ें. इससे यह तय किया जा सकेगा कि आपको पासथ्रू ओपैसिटी की प्राथमिकता कब सेट करनी है.
ऐसेट ऑप्टिमाइज़ेशन
उपयोगकर्ताओं के लिए SpatialEnvironment सेट करने के लिए ऐसेट बनाते समय, पक्का करें कि आपकी ऐसेट का रिज़ॉल्यूशन अच्छी क्वालिटी का हो. साथ ही, फ़ाइल का साइज़ भी सही हो. ज़्यादा जानने के लिए, Environment ऐसेट को ऑप्टिमाइज़ करने से जुड़े हमारे दिशा-निर्देश देखें.
मौजूदा पासथ्रू ओपैसिटी का पता लगाना
val currentPassthroughOpacity = session.scene.spatialEnvironment.currentPassthroughOpacity