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

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 का इस्तेमाल, स्पेस ऐप्लिकेशन के एनवायरमेंट के हिस्से के तौर पर किया जा सकता है.

// assume that session is a Session that has been previously created
val environmentGeometryFuture = session.createGltfResourceAsync("DayGeometry.glb")

val environmentGeometry = environmentGeometryFuture.await()

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

EXR इमेज रिसॉर्स को ExrImage के तौर पर बनाया जा सकता है. इसमें, EXR को किसी लोकल फ़ाइल से लोड किया जाता है. स्काईबॉक्स बनाने के लिए, ExrImage का इस्तेमाल स्पेस ऐप्लिकेशन के एनवायरमेंट के हिस्से के तौर पर किया जा सकता है.

// assume that session is a Session that has been previously created
val skyboxExrFuture = session.createExrImageResourceAsync("BlueSkybox.exr")

val skyboxExr = skyboxExrFuture.await()

अपने ऐप्लिकेशन के लिए SpatialEnvironmentPreference सेट करना

setSpatialEnvironmentPreference का इस्तेमाल, किसी ऐप्लिकेशन के लिए पसंदीदा स्पेशल एनवायरमेंट सेट करने के लिए किया जाता है. यह तरीका सिर्फ़ प्राथमिकता सेट करता है और जब तक isSpatialEnvironmentPreferenceActive पहले से ही सही नहीं होता, तब तक इसमें तुरंत बदलाव नहीं होता. जब डिवाइस ऐसी स्थिति में पहुंच जाता है जहां XR बैकग्राउंड बदला जा सकता है और SpatialCapabilities.SPATIAL_CAPABILITY_APP_ENVIRONMENT की सुविधा उपलब्ध होती है, तो ऐप्लिकेशन के लिए पसंदीदा स्पेस वाला एनवायरमेंट अपने-आप दिखने लगेगा.

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

अगर दिया गया SpatialEnvironmentPreference शून्य नहीं है, लेकिन उसकी सभी प्रॉपर्टी शून्य हैं, तो स्पेस एनवायरमेंट में एक काला स्काईबॉक्स होगा और कोई ज्यामिति नहीं होगी.

SpatialEnvironment की स्थिति में होने वाले बदलावों की सूचना पाने के लिए, addOnSpatialEnvironmentChangedListener का इस्तेमाल करें.

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

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

// Assume that session is a Session that has been previously created

// Create a GLTFResource
val environmentGeometry = session.createGltfResourceAsync("DayGeometry.glb").await()

// Create an ExrImage for the skybox
val skyboxExr = session.createExrImageResourceAsync("BlueSkybox.exr").await()

val spatialEnvironmentPreference = SpatialEnvironmentPreference(skyboxExr, environmentGeometry)

val preferenceResult = session.spatialEnvironment.setSpatialEnvironmentPreference(spatialEnvironmentPreference)

if (preferenceResult ==  SpatialEnvironment.SetSpatialEnvironmentPreferenceChangeApplied()) {
   // The environment was successfully updated and is now visible, and any listeners
   // specified using addOnSpatialEnvironmentChangedListener will be notified.
} else if (preferenceResult == SpatialEnvironment.SetSpatialEnvironmentPreferenceChangePending()) {
    // The environment is in the process of being updated. Once visible, 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 पैरामीटर, वैल्यू न होने पर भी काम करता है. वैल्यू को शून्य पर सेट करने का मतलब है कि ऐप्लिकेशन में पास-थ्रू ओपैसिटी की कोई प्राथमिकता नहीं है. साथ ही, यह सिस्टम को पास-थ्रू कंट्रोल वापस कर देगा.

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

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

// Assume that session is a Session that has been previously created

val preferenceResult = session.spatialEnvironment.setPassthroughOpacityPreference(1.0f)

if (preferenceResult ==  SpatialEnvironment.SetPassthroughOpacityPreferenceChangeApplied()) {
  // The passthrough opacity request succeeded and should be visible now, and any listeners specified using addOnPassthroughOpacityChangedListener
  // will be notified
} else if (preferenceResult == SpatialEnvironment.SetPassthroughOpacityPreferenceChangePending()) {
  // 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 को सेट करने के लिए एसेट बनाते समय, आपको यह पक्का करना होगा कि आपकी एसेट अच्छी क्वालिटी का रिज़ॉल्यूशन हासिल करें. साथ ही, फ़ाइल का साइज़ भी सही हो. आपको यह पक्का करना होगा कि आपका glb, mipmaps और ktx2 टेक्सचर का इस्तेमाल करता हो. आपको अपनी glb फ़ाइलों में पॉलीगिन की संख्या पर भी ध्यान देना होगा, क्योंकि ज़्यादा पॉलीगिन की वजह से, ज़रूरत से ज़्यादा बैटरी खर्च हो सकती है. ज़्यादातर SpatialEnvironment इंस्टेंस के लिए, फ़ाइल का ज़्यादातर साइज़ स्काईबॉक्स के लिए इस्तेमाल की गई इमेज से मिलता है. यह पक्का करने के लिए कि आपकी इमेज ऑप्टिमाइज़ की गई हैं, ऑप्टिमाइज़ेशन टूल (जैसे, ktx) की मदद से एसेट चलाएं.

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

val currentPassthroughOpacity =  session.spatialEnvironment.getCurrentPassthroughOpacity()

यह भी देखें: