अपने ऐप्लिकेशन में स्पेस के हिसाब से अलग-अलग तरह के माहौल जोड़ना

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"))

EXR इमेज रिसॉर्स बनाना

EXR इमेज रिसॉर्स को ExrImage के तौर पर बनाया जा सकता है. इसमें EXR को किसी लोकल फ़ाइल से लोड किया जाता है. स्काईबॉक्स के लिए आईबीएल की ZIP फ़ाइल बनाने के लिए, ExrImage का इस्तेमाल cmgen के साथ किया जा सकता है. ज़्यादा जानकारी के लिए, एनवायरमेंट ऐसेट को ऑप्टिमाइज़ करने के बारे में हमारी गाइड देखें.

val lightingForSkybox = ExrImage.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 पैरामीटर, शून्य हो सकने वाला फ़्लोट है. वैल्यू को null पर सेट करने का मतलब है कि ऐप्लिकेशन के लिए, पासथ्रू ओपैसिटी की कोई प्राथमिकता नहीं है. साथ ही, यह सिस्टम को पासथ्रू कंट्रोल वापस कर देगा.

बुनियादी इस्तेमाल

यह कोड स्निपेट, ओपैसिटी को पास करने की सुविधा की सेटिंग सेट करता है. इस सेटिंग को सेव कर लिया जाएगा. इसे तब लागू किया जाएगा, जब ऐप्लिकेशन में पासथ्रू ओपैसिटी सेट करने की सुविधा होगी.

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 सेट करते समय ऐसेट बनाते समय, पक्का करें कि आपकी ऐसेट का रिज़ॉल्यूशन अच्छी क्वालिटी का हो. साथ ही, फ़ाइल का साइज़ भी सही हो. ज़्यादा जानने के लिए, एनवायरमेंट ऐसेट को ऑप्टिमाइज़ करने से जुड़े हमारे दिशा-निर्देश देखें.

मौजूदा पासथ्रू ओपैसिटी का पता लगाना

val currentPassthroughOpacity = session.scene.spatialEnvironment.currentPassthroughOpacity

यह भी देखें: