एनवायरमेंट ऐसेट ऑप्टिमाइज़ करना

एक्सआर की सुविधा वाले डिवाइस
इस गाइड की मदद से, इन तरह के एक्सआर डिवाइसों के लिए अनुभव बनाए जा सकते हैं.
एक्सआर हेडसेट
वायर्ड एक्सआर ग्लास

Jetpack XR लाइब्रेरी के alpha04 वर्शन से, आपको यह तय करने के तरीके में कुछ ज़रूरी बदलाव दिखेंगे कि आपको बेहतर परफ़ॉर्मेंस और विज़ुअल क्वालिटी के लिए, स्पैटियल एनवायरमेंट ऐसेट कैसे उपलब्ध करानी चाहिए. इन बदलावों का असर, कंपैटिबिलिटी पर पड़ता है. साथ ही, इसके लिए उन मौजूदा ऐप्लिकेशन को अपडेट करना ज़रूरी है जो स्पेशल एनवायरमेंट सेट करते हैं.

स्पेशल एनवायरमेंट उपलब्ध कराने के लिए, आपको दो मुख्य कॉम्पोनेंट की ज़रूरत होती है:

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

यह तरीका क्यों इस्तेमाल किया गया है?

ऐसेट के अपडेट किए गए स्ट्रक्चर से ये फ़ायदे मिलते हैं:

  • फ़ाइल का छोटा साइज़: विज़ुअल डिसप्ले और लाइटिंग की जानकारी, दोनों के लिए एक ही हाई-रिज़ॉल्यूशन वाली एचडीआर स्काईबॉक्स फ़ाइल का इस्तेमाल करने जैसे पिछले तरीकों की तुलना में, इस तरीके से फ़ाइल का साइज़ कम हो जाता है.
  • बेहतर परफ़ॉर्मेंस: विज़ुअल स्काईबॉक्स टेक्सचर (glb में बनाया गया) को IBL डेटा (ज़िप फ़ाइल में) से अलग करने पर, हर कॉम्पोनेंट को अलग-अलग ऑप्टिमाइज़ किया जा सकता है. इससे टेक्स्चर के लिए मेमोरी रीड बैंडविथ कम हो जाता है और बिजली की खपत भी कम होती है.
  • ऑप्टिमाइज़ की गई रोशनी: लाइटिंग मैप के लिए, कम रिज़ॉल्यूशन वाले स्काईबॉक्स रिसोर्स का इस्तेमाल करना परफ़ॉर्मेंस के लिए फ़ायदेमंद होता है. इससे ऑब्जेक्ट पर रोशनी के विज़ुअल नतीजों पर ज़्यादा असर नहीं पड़ता.

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

अपने glb फ़ाइल को ऑप्टिमाइज़ करना

आपके glb में उपयोगकर्ता के आस-पास की ज्यामिति मौजूद होती है. साथ ही, इसमें स्काईबॉक्स का विज़ुअल टेक्सचर शामिल होता है. ज्यामिति के लिए, फ़ाइल का साइज़ 80 एमबी या इससे कम होना चाहिए.

इसके लिए, आपके पास कई विकल्प होते हैं. इनकी मदद से, क्वालिटी को बनाए रखते हुए अपने एनवायरमेंट को ज़्यादा असरदार बनाया जा सकता है. उदाहरण के लिए, आपके मेश की डेंसिटी, उपयोगकर्ता के पास सबसे ज़्यादा होनी चाहिए. साथ ही, उपयोगकर्ता से दूर मौजूद मेश की डेंसिटी को कम किया जा सकता है.

  • देखने की दूरी: Android XR में एनवायरमेंट को देखने की दूरी, उपयोगकर्ता के पॉइंट से 200 मीटर होती है. साथ ही, आपके स्काईबॉक्स टेक्सचर को इस सीमा का पालन करना चाहिए. इससे बेहतर अनुभव मिलता है, क्योंकि उस दूरी पर पैरैलैक्स का पता नहीं चलता.
  • उपयोगकर्ता की लंबाई: जगह के हिसाब से लंबाई अलग-अलग हो सकती है. हालांकि, उपयोगकर्ता को करीब 1.5 मीटर की ऊंचाई पर रखें, ताकि ऐप्लिकेशन में बड़े यूज़र इंटरफ़ेस (यूआई) एलिमेंट के साथ क्लिप होने से बचा जा सके.

  • पॉलीकाउंट: अपनी glb फ़ाइलों में पॉलीकाउंट का ध्यान रखें, क्योंकि ज़्यादा पॉलीकाउंट से बैटरी ज़्यादा खर्च हो सकती है. ज्यामिति के हर पैच में 10,000 से ज़्यादा वर्टिकल नहीं होने चाहिए.

  • KTX कंप्रेशन: यह पक्का करें कि आपकी glb फ़ाइल में मिपमैप और ktx2 टेक्सचर का इस्तेमाल किया गया हो. इससे, glb फ़ाइल की GPU परफ़ॉर्मेंस को ऑप्टिमाइज़ किया जा सकता है.

आईबीएल को ऑप्टिमाइज़ करने के लिए, आपको क्या करना होगा

cmgen कमांड लाइन यूटिलिटी डाउनलोड करें:

  • आपको Filament रिपॉज़िटरी में, नया वर्शन मिल जाएगा.
  • अपने प्लैटफ़ॉर्म के लिए, cmgen का पहले से बना हुआ वर्शन शामिल करने वाली .tgz फ़ाइल ढूंढें और उसे निकालें.
  • प्रीबिल्ट टूल, निकाली गई .tgz फ़ाइल की /bin डायरेक्ट्री में मौजूद होता है.

आईबीएल के लिए .zip फ़ाइल जनरेट करने के लिए, इन ऐसेट को तैयार करें:

  • कम रिज़ॉल्यूशन वाला ऐसा EXR जो आपके स्काईबॉक्स टेक्सचर से मेल खाता हो
    • स्काईबॉक्स टेक्सचर का इनपुट, EXR फ़ाइल होनी चाहिए. हालांकि, cmgen अन्य फ़ॉर्मैट के साथ भी काम करता है, लेकिन EXR फ़ॉर्मैट का इस्तेमाल करने का सुझाव दिया जाता है. ऐसा इसलिए, क्योंकि इससे हाई डायनैमिक रेंज की ऐसी जानकारी मिलती है जो अच्छी क्वालिटी का आईबीएल देने के लिए ज़रूरी होती है. PNG जैसे अन्य फ़ॉर्मैट का इस्तेमाल करने पर, रोशनी कम सटीक होती है.
    • सोर्स इमेज (EXR) का अनुपात 2:1 होना चाहिए. साथ ही, डाइमेंशन 2 के पावर में होने चाहिए. 1024 x 512 पिक्सल वाले EXR का इस्तेमाल करें. ध्यान दें: ऐसा लग सकता है कि 1024 x 512 का रिज़ॉल्यूशन बहुत कम है, लेकिन यह परफ़ॉर्मेंस के लिए फ़ायदेमंद है. आईबीएल के लिए, उपयोगकर्ता को दिखने वाले विज़ुअल नतीजे, आईबीएल के बहुत ज़्यादा रिज़ॉल्यूशन वाली ऐसेट के काफ़ी मिलते-जुलते होते हैं.
  • गहरे काले रंग की PNG इमेज
    • इस ऐसेट का आसपेक्ट रेशियो (लंबाई-चौड़ाई का अनुपात) भी 2:1 होना चाहिए. 100 x 50 पिक्सल के साइज़ का इस्तेमाल करें.
    • यह IBL के साथ इस्तेमाल करने के लिए, ऑप्टिमाइज़ किया गया टेक्सचर है. उपयोगकर्ता इसे नहीं देखेंगे. इसलिए, हम ऐसेट को परफ़ॉर्मेंस के लिए ऑप्टिमाइज़ करने पर फ़ोकस करते हैं.

नीचे, IBL के लिए .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 ..