Jetpack XR लाइब्रेरी के alpha04 वर्शन से, आपको बेहतर परफ़ॉर्मेंस और विज़ुअल क्वालिटी के लिए, स्पेस एनवायरमेंट ऐसेट उपलब्ध कराने के तरीके में अहम अपडेट मिलेंगे. इन बदलावों का असर, कंपैटबिलटी पर पड़ता है. इसलिए, स्पेस एनवायरमेंट सेट करने वाले मौजूदा ऐप्लिकेशन को अपडेट करना ज़रूरी है.
स्पेस एनवायरमेंट उपलब्ध कराने के लिए, आपको दो मुख्य कॉम्पोनेंट की ज़रूरत होती है:
- एनवायरमेंट की ज्यामिति के लिए .glb या .gltf फ़ाइल. उदाहरण के लिए, ग्राउंड प्लेन, आस-पास के ऑब्जेक्ट. साथ ही, प्राइमरी विज़ुअल स्काईबॉक्स टेक्सचर, जो उपयोगकर्ताओं को दिखता है.
- एक अलग ZIP फ़ाइल. इसमें, cmgen टूल का इस्तेमाल करके, हाई डाइनैमिक रेंज वाली EXR इमेज से जनरेट की गई, इमेज पर आधारित लाइटिंग (आईबीएल) की जानकारी होती है. ZIP फ़ाइल का इस्तेमाल, लाइटिंग की कैलकुलेशन के लिए किया जाता है. जैसे, ऑब्जेक्ट पर दिखने वाले रिफ़्लेक्शन. इसका इस्तेमाल, विज़ुअल स्काईबॉक्स टेक्सचर के लिए नहीं किया जाता.
यह तरीका क्यों इस्तेमाल किया जाता है?
ऐसेट के अपडेट किए गए स्ट्रक्चर से ये फ़ायदे मिलते हैं:
- फ़ाइल का साइज़ कम होना: पिछले तरीकों की तुलना में, इस तरीके से फ़ाइल का साइज़ कम होता है. उदाहरण के लिए, विज़ुअल डिसप्ले और लाइटिंग की जानकारी, दोनों के लिए हाई रिज़ॉल्यूशन वाली एक ही एचडीआर स्काईबॉक्स फ़ाइल का इस्तेमाल करना.
- बेहतर परफ़ॉर्मेंस: विज़ुअल स्काईबॉक्स टेक्सचर (glb में शामिल) को आईबीएल डेटा (ZIP फ़ाइल में) से अलग करने पर, हर कॉम्पोनेंट को अलग-अलग ऑप्टिमाइज़ किया जा सकता है. इससे, टेक्सचर मेमोरी के रीड बैंडविथ और पावर की खपत कम होती है.
- ऑप्टिमाइज़ की गई लाइटिंग: लाइटिंग मैप के लिए, कम रिज़ॉल्यूशन वाले स्काईबॉक्स रिसॉर्स का इस्तेमाल करना, परफ़ॉर्मेंस के लिए फ़ायदेमंद होता है. साथ ही, इससे ऑब्जेक्ट पर दिखने वाली लाइटिंग के विज़ुअल नतीजों पर ज़्यादा असर नहीं पड़ता.
अपने ऐप्लिकेशन में स्पेस एनवायरमेंट जोड़ने के बारे में ज़्यादा जानने के लिए, हमारे इस गाइड को देखें: अपने ऐप्लिकेशन में एनवायरमेंट जोड़ना.
अपने glb को ऑप्टिमाइज़ करना

आपका glb, उपयोगकर्ता के आस-पास की ज्यामिति को दिखाता है. इसमें, आपके स्काईबॉक्स का विज़ुअल टेक्सचर शामिल होता है. अपनी ज्यामिति के लिए, आपको फ़ाइल का साइज़ 80 एमबी या उससे कम रखने की कोशिश करनी चाहिए.
ऐसा करने के लिए, आपके पास अपने एनवायरमेंट को बेहतर बनाने के कई विकल्प होते हैं. साथ ही, इससे क्वालिटी भी बेहतर बनी रहती है. उदाहरण के लिए, आपके मेश की डेंसिटी, उपयोगकर्ता के पास सबसे ज़्यादा होनी चाहिए. साथ ही, उपयोगकर्ता से दूर मौजूद मेश के लिए, डेंसिटी कम की जा सकती है.
- व्यू डिस्टेंस: Android XR में एनवायरमेंट के लिए, व्यू डिस्टेंस उपयोगकर्ता के पॉइंट से 200 मीटर होता है. साथ ही, आपके स्काईबॉक्स टेक्सचर को इस सीमा का पालन करना चाहिए. इससे बेहतर अनुभव मिलता है, क्योंकि उस दूरी पर पैरैलैक्स को पहचाना नहीं जा सकता.
उपयोगकर्ता की ऊंचाई: भौगोलिक स्थिति अलग-अलग हो सकती है. हालांकि, ऐप्लिकेशन में बड़े यूज़र इंटरफ़ेस (यूआई) एलिमेंट के साथ क्लिप होने से बचने के लिए, उपयोगकर्ता को करीब 1.5 मीटर की ऊंचाई पर किसी टीले पर रखें.
पॉलीकाउंट: अपनी glb फ़ाइलों में पॉलीकाउंट का ध्यान रखें, क्योंकि ज़्यादा पॉलीकाउंट होने पर, ज़रूरत से ज़्यादा बैटरी खर्च हो सकती है. ज्यामिति के हर पैच में 10,000 से ज़्यादा वर्टिकल नहीं होने चाहिए.
केटीएक्स कंप्रेशन: अपनी glb फ़ाइल की जीपीयू परफ़ॉर्मेंस को ऑप्टिमाइज़ करें. इसके लिए, पक्का करें कि आपके glb में मिपमैप और ktx2 टेक्सचर का इस्तेमाल किया गया हो.
आईबीएल को ऑप्टिमाइज़ करने के लिए ज़रूरी चीज़ें
cmgen कमांड लाइन यूटिलिटी डाउनलोड करें:
- आपको Filament रिपॉज़िटरी में, सबसे नया वर्शन मिल सकता है.
- अपने प्लैटफ़ॉर्म के लिए, cmgen का पहले से बना वर्शन वाली .tgz फ़ाइल ढूंढें और उसे एक्सट्रैक्ट करें.
- पहले से बना टूल, एक्सट्रैक्ट की गई .tgz फ़ाइल की /bin डायरेक्ट्री में मौजूद होता है.
आईबीएल के लिए ZIP फ़ाइल जनरेट करने के लिए, तैयार की जाने वाली ऐसेट:
- कम रिज़ॉल्यूशन वाली EXR फ़ाइल, जो आपके स्काईबॉक्स टेक्सचर से मेल खाती हो
- आपका स्काईबॉक्स टेक्सचर इनपुट, EXR फ़ाइल होनी चाहिए. हालांकि, cmgen अन्य फ़ॉर्मैट के साथ भी काम करता है. फिर भी, EXR फ़ाइलें इस्तेमाल करने का सुझाव दिया जाता है, क्योंकि इनमें हाई डाइनैमिक रेंज की जानकारी होती है. यह जानकारी, अच्छी क्वालिटी वाली आईबीएल उपलब्ध कराने के लिए ज़रूरी है. अन्य फ़ॉर्मैट, जैसे कि पीएनजी का इस्तेमाल करने पर, लाइटिंग कम सटीक होती है.
- सोर्स इमेज (EXR) का रेशियो 2:1 होना चाहिए. साथ ही, इसके डाइमेंशन, दो की पावर में होने चाहिए. 1024 x 512 पिक्सल वाली EXR फ़ाइल का इस्तेमाल करें. ध्यान दें: ऐसा लग सकता है कि 1024 x 512, बहुत कम रिज़ॉल्यूशन है. हालांकि, यह परफ़ॉर्मेंस के लिए फ़ायदेमंद है. आईबीएल के लिए, उपयोगकर्ता को दिखने वाले नतीजे, आईबीएल के बहुत ज़्यादा रिज़ॉल्यूशन वाली ऐसेट के नतीजों से काफ़ी मिलते-जुलते होते हैं.
- पूरी तरह से काले रंग की पीएनजी फ़ाइल
- इस ऐसेट का रेशियो भी 2:1 होना चाहिए. 100 x 50 पिक्सल का साइज़ इस्तेमाल करें.
- यह आईबीएल के साथ इस्तेमाल करने के लिए, ऑप्टिमाइज़ किया गया टेक्सचर है. उपयोगकर्ता इसे नहीं देखेंगे. इसलिए, हम ऐसेट को परफ़ॉर्मेंस के लिए ऑप्टिमाइज़ करने पर फ़ोकस करते हैं.

यहां, आईबीएल के लिए ZIP फ़ाइल बनाने के लिए, cmgen का इस्तेमाल करने का एक उदाहरण दिया गया है.
इस उदाहरण में, my_360_skybox_1024_x_512.exr और black_skybox.png नाम की इनपुट फ़ाइलों का इस्तेमाल करके, my_ibl.zip नाम की ZIP फ़ाइल बनाई गई है.
# Produce black cubemaps for the texture of the IBL asset.
./cmgen --format=rgb32f --size=128 --extract=./skybox_ibl ./black_skybox.png
# Produce lighting cubemaps and a Spherical Harmonics from EXR
./cmgen --format=rgb32f --size=128 --deploy=./skybox_ibl --ibl-ld=. --ibl-samples=1024 --extract-blur=0.0 --sh-irradiance --sh-shader --sh-output=./skybox_ibl/sh.txt ./my_360_skybox_1024_x_512.exr
# Copy all of the black cubemaps into the other folder.
cp -rf ./skybox_ibl/black_skybox/* ./skybox_ibl/my_360_skybox_1024_x_512
# Rename the directory to reflect that these are old assets.
mv ./skybox_ibl/black_skybox ./skybox_ibl/black_skybox_old
# Rename the directory to reflect that these are your cubemap assets.
mv ./skybox_ibl/my_360_skybox_1024_x_512 ./skybox_ibl/black_skybox
# Change into the child directory.
cd ./skybox_ibl
# Zip all of the cubemap and the Spherical Harmonics assets together.
zip -q my_ibl.zip black_skybox/*
# Return to the directory you started in.
cd ..