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

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

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

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

यह तरीका क्यों अपनाया गया है?

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

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

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

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

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

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

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

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

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

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

cmgen कमांड लाइन की सुविधा डाउनलोड करें:

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

IBL के लिए .zip फ़ाइल जनरेट करने के लिए तैयार की जाने वाली एसेट:

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