Unity की मदद से, Android XR के लिए परफ़ॉर्मेंस को ऑप्टिमाइज़ करना
पढ़ने में लगने वाला समय: 6 मिनट
Samsung Galaxy XR अब उपलब्ध है. यह Android XR की मदद से काम करता है! यह ब्लॉग पोस्ट, हमारे Android XR Spotlight Week का हिस्सा है. इसमें हम ब्लॉग पोस्ट, वीडियो, सैंपल कोड वगैरह जैसे संसाधन उपलब्ध कराते हैं. इन्हें Android XR के लिए ऐप्लिकेशन बनाने, सीखने, और तैयार करने में आपकी मदद करने के लिए डिज़ाइन किया गया है.
इस हफ़्ते, Samsung ने Galaxy XR लॉन्च किया. इसे Google और Qualcomm के साथ मिलकर बनाया गया है. डेवलपर के लिए यह एक शानदार मौका है. हम चाहते हैं कि आपको अपने एक्सआर ऐप्लिकेशन से बेहतरीन परफ़ॉर्मेंस मिले.
सामान्य डिवाइसों पर गेम और ऐप्लिकेशन की परफ़ॉर्मेंस खराब होने से, उपयोगकर्ताओं को परेशानी हो सकती है. हालांकि, XR की दुनिया में परफ़ॉर्मेंस सिर्फ़ एक विकल्प नहीं है, बल्कि यह आपके ऐप्लिकेशन की सफलता के लिए ज़रूरी है. अगर XR में फ़्रेम रेट का टारगेट पूरा नहीं होता है, तो इससे मोशन सिकनेस जैसी गंभीर समस्याएं हो सकती हैं.
इस गाइड में, हम आपको Android XR डेवलपमेंट के लिए ज़रूरी परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के बारे में बताएंगे. आपको पता चलेगा कि कौनसी सुविधाएं परफ़ॉर्मेंस को सबसे ज़्यादा बेहतर बनाती हैं, उनका इस्तेमाल कब करना चाहिए, और वे एक साथ कैसे काम करती हैं. इससे आपको फ़्रेम रेट के टारगेट हासिल करने में मदद मिलेगी.
हमारा मकसद यह है:
- कम से कम: 72 एफ़पीएस (यह हमारी क्वालिटी के लिए दिशा-निर्देशों का हिस्सा है)
- ज़रूरी नहीं: हर फ़्रेम के लिए 11 मिलीसेकंड के बजट के साथ 90 एफ़पीएस
इतना ज़्यादा फ़्रेम-रेट बनाए रखना क्यों ज़रूरी है, इस बारे में ज़्यादा जानने के लिए, परफ़ॉर्मेंस से जुड़े हमारे दिशा-निर्देश देखें.
एक्सआर के लिए परफ़ॉर्मेंस से जुड़ी सुविधाएं
हम एक्सआर के लिए, परफ़ॉर्मेंस से जुड़ी दो सुविधाओं के बारे में बात करेंगे: फ़ोविएटेड रेंडरिंग और वल्कन सबसैंपलिंग.
फ़ोविएटेड रेंडरिंग
फ़ोविएटेड रेंडरिंग, ऑप्टिमाइज़ेशन की एक सुविधा है. इसके दो मोड होते हैं. पहला है स्टैटिक मोड. यह स्क्रीन के बीच के हिस्से को ज़्यादा रिज़ॉल्यूशन में रेंडर करता है. साथ ही, स्क्रीन के किनारों की तरफ़ जाने पर रिज़ॉल्यूशन कम होता जाता है.
दूसरा है आई-ट्रैकिंग मोड. यह मोड, खास तौर पर उस हिस्से को पूरी बारीकी से रेंडर करता है जिस पर आपकी नज़र होती है. साथ ही, यह आपके आस-पास के हिस्से की क्वालिटी को कम कर देता है. यह असल में इंसानों की देखने की क्षमता की तरह काम करता है. इसमें हम सिर्फ़ उस खास हिस्से की बारीकियां देख पाते हैं जिस पर हम फ़ोकस कर रहे होते हैं.
फ़ोविएटेड रेंडरिंग की मदद से, जीपीयू के वर्कलोड को काफ़ी कम किया जा सकता है. इससे उपयोगकर्ता को इमेज की क्वालिटी में कोई कमी महसूस नहीं होती. फ़ोविएटेड रेंडरिंग की सबसे अच्छी बात यह है कि उपयोगकर्ताओं को अपनी पेरिफ़रल विज़न में क्वालिटी में कमी नहीं दिखेगी. हालांकि, आपके जीपीयू को बेहतर परफ़ॉर्मेंस ज़रूर दिखेगी.
मान लें कि आपको किसी म्यूज़ियम के लिए, 3D आर्टफ़ैक्ट का इस्तेमाल करके एक शानदार अनुभव तैयार करना है. फ़ोविएटेड रेंडरिंग के बिना, 'फ़ील्ड ऑफ़ व्यू' में मौजूद हर चीज़ को रेंडर करने के लिए, 90 एफ़पीएस को बनाए रखना मुश्किल होगा. फ़ोविएटेड रेंडरिंग की मदद से, उपयोगकर्ता की नज़र जहां है वहां हाई-पॉली डिटेल को बनाए रखा जा सकता है. हालांकि, बैकग्राउंड का एनवायरमेंट कम क्वालिटी में रेंडर होता है. आपके उपयोगकर्ताओं को इस बदलाव का पता नहीं चलेगा. हालांकि, आपको अपने सीन में ज़्यादा जानकारी जोड़ने के लिए जगह मिल जाएगी.
Vulkan सबसैंपलिंग
Vulkan सबसैंपलिंग, फ़ोविएटेड रेंडरिंग के लिए सबसे सही है. फ़ोविएटेड रेंडरिंग से यह तय होता है कि अलग-अलग क्वालिटी लेवल पर क्या रेंडर करना है. वहीं, Vulkan सबसैंपलिंग, फ़्रैगमेंट डेंसिटी मैप का इस्तेमाल करके, अलग-अलग क्वालिटी लेवल को बेहतर तरीके से रेंडर करने का तरीका मैनेज करती है.
फ़ोविएटेड रेंडरिंग के साथ इस्तेमाल करने पर, Vulkan सबसैंपलिंग से आपको 0.5 मि॰से॰ की अतिरिक्त परफ़ॉर्मेंस मिलती है. यह आपकी पेरिफ़रल विज़न में मौजूद खराब किनारों को भी ठीक करता है. इससे पूरी इमेज साफ़ दिखती है.
उदाहरण के लिए, किसी फ़्लाइट सिम्युलेटर गेम में, जहां उपयोगकर्ता इंस्ट्रुमेंट और कंट्रोल पर फ़ोकस करते हैं, वहां Vulkan सबसैंपलिंग के साथ फ़ोविएटेड रेंडरिंग को जोड़ने का मतलब है कि ज़्यादा जानकारी वाले कंट्रोल साफ़ तौर पर रेंडर होते हैं. हालांकि, पेरिफ़ेरल कॉकपिट स्ट्रक्चर में कम संसाधनों का इस्तेमाल होता है. यह 0.5 मिलीसेकंड का अंतर ज़्यादा नहीं लगता, लेकिन इससे यह तय होता है कि गेम में कोई अतिरिक्त इंटरैक्टिव एलिमेंट जोड़ा जा सकता है या नहीं. इसके अलावा, इससे यह भी तय होता है कि गेम के अहम पलों के दौरान फ़्रेम ड्रॉप होंगे या नहीं.
जटिल सीन के लिए जीपीयू की सुविधाएं
फ़ोविएटेड रेंडरिंग और वल्कन सबसैंपलिंग के अलावा, जीपीयू की कुछ ऐसी सुविधाएं भी हैं जो स्मार्ट इंस्टेंसिंग और कलिंग की मदद से, जीपीयू पर पड़ने वाले गैर-ज़रूरी दबाव को कम करती हैं. ये खास तौर पर उन मुश्किल सीन के लिए असरदार होते हैं जिनमें बार-बार ज्यामिति या ज़्यादा रुकावटें आती हैं.
जीपीयू रेज़िडेंट ड्रॉअर
जीपीयू रेज़िडेंट ड्रॉअर, ड्रॉ करने के लिए कॉल की संख्या को कम करने और सीपीयू प्रोसेसिंग के समय को कम करने के लिए, जीपीयू इंस्टेंसिंग का इस्तेमाल अपने-आप करता है. इसलिए, सीपीयू हर ऑब्जेक्ट के बारे में जीपीयू को अलग-अलग जानकारी देने के बजाय, एक जैसे ऑब्जेक्ट का बैच बना देता है.
यह सुविधा, बार-बार इस्तेमाल होने वाली मेश वाले बड़े सीन के लिए सबसे ज़्यादा असरदार है. जैसे, जंगल में पेड़, ऑफ़िस की इमारत में फ़र्नीचर या किसी एनवायरमेंट में बिखरे हुए प्रॉप.
एक ही बेस मेश का इस्तेमाल करके, 200 पेड़ों वाले जंगल के सीन की इमेज जनरेट करो. जीपीयू रेज़िडेंट ड्रॉअर के बिना, आपके पास 200 ड्रॉ कॉल हैं, जो जीपीयू का इस्तेमाल करते हैं. इसलिए, सीपीयू का इस्तेमाल नहीं होता. इस सुविधा को चालू करने पर, जीपीयू उन पेड़ों को समझदारी से इंस्टैंस करेगा. इससे ड्रॉ करने के लिए कॉल की संख्या सिर्फ़ 5 से 10 रह जाएगी. इससे जीपीयू की काफ़ी बचत होती है. इस बचत का इस्तेमाल, गेमप्ले लॉजिक या फ़िज़िक्स कैलकुलेशन में किया जा सकता है.
जीपीयू ऑक्लूज़न कलिंग
जीपीयू ऑक्लूज़न कलिंग, छिपे हुए ऑब्जेक्ट की पहचान करने और उन्हें रेंडर न करने के लिए, सीपीयू के बजाय जीपीयू का इस्तेमाल करता है. यह अपने-आप पता लगाता है कि अन्य ऑब्जेक्ट के पीछे क्या छिपा हुआ है. इससे, जीपीयू का इस्तेमाल उन चीज़ों पर नहीं होता जो उपयोगकर्ता को नहीं दिखती हैं.
यह सुविधा खास तौर पर, कई कमरों वाली इमारतों, घनी आबादी वाले इलाकों या ऐसी जगहों पर बहुत काम आती है जहां दीवारों, फ़र्श, और चीज़ों की वजह से व्यू ब्लॉक हो जाता है.
उदाहरण के लिए, मान लें कि आपको कई कमरों वाले घर का अनुभव तैयार करना है. जब उपयोगकर्ता लिविंग रूम में हो, तो दीवार के पीछे छिपे किचन को पूरी बारीकी से रेंडर करने में जीपीयू साइकल क्यों बर्बाद करें? जीपीयू ऑक्लूज़न कलिंग, छिपे हुए ऑब्जेक्ट को रेंडर करने से अपने-आप बचता है. इससे आपको असल में दिखने वाले ऑब्जेक्ट के लिए, ज़्यादा परफ़ॉर्मेंस बजट मिलता है.
अपनी परफ़ॉर्मेंस पर नज़र रखना
सिर्फ़ इन सुविधाओं का इस्तेमाल करना काफ़ी नहीं है. आपको अपने ऑप्टिमाइज़ेशन को भी मेज़र करना होगा, ताकि आप उनके असर को संख्या में बता सकें और यह पुष्टि कर सकें कि आपके बदलाव वाकई काम कर रहे हैं.
Performance Metrics API
Performance Metrics API की मदद से, आपके ऐप्लिकेशन की मेमोरी के इस्तेमाल, सीपीयू की परफ़ॉर्मेंस, और जीपीयू की परफ़ॉर्मेंस को रीयल-टाइम में मॉनिटर किया जा सकता है. यह आपको कंपोज़िटर और रनटाइम लेयर से पूरा डेटा देता है, ताकि आप देख सकें कि आपके ऐप्लिकेशन में क्या हो रहा है.
बदलाव करने से पहले एक बेसलाइन तय करें, ऑप्टिमाइज़ेशन लागू करें, असर का आकलन करें, और दोहराएं. डेटा पर आधारित इस तरीके का मतलब है कि आपको पता है कि आपकी परफ़ॉर्मेंस बेहतर हो रही है. आपको अनुमान लगाने की ज़रूरत नहीं है.
फ़ोविएटेड रेंडरिंग की सुविधा चालू करने से पहले, आपके जीपीयू का फ़्रेम टाइम 13 मि॰से॰ हो सकता है. यह आपके 11 मि॰से॰ के बजट से ज़्यादा है. फ़ोविएटेड रेंडरिंग की सुविधा चालू करें और फिर से मेज़र करें. उम्मीद है कि आपको यह 9 मि॰से॰ तक कम होता दिखेगा. इसका मतलब है कि आपको चार मिलीसेकंड का अतिरिक्त समय मिल गया है. इस समय का इस्तेमाल करके, अपने सीन में ज़्यादा जानकारी जोड़ी जा सकती है, अन्य जगहों पर विज़ुअल क्वालिटी को बेहतर बनाया जा सकता है या अलग-अलग तरह के कॉन्टेंट में बेहतर परफ़ॉर्मेंस को पक्का किया जा सकता है.
इन मेट्रिक के बिना, ऑप्टिमाइज़ेशन का सही तरीका नहीं अपनाया जा सकता. परफ़ॉर्मेंस मेट्रिक एपीआई से आपको पता चलता है कि आपके इस्तेमाल के उदाहरण के लिए, असल में क्या मददगार है.
फ़्रेम डीबगर
फ़्रेम डीबगर, Unity का पहले से मौजूद टूल है. इससे यह समझने में मदद मिलती है कि आपका सीन, फ़्रेम दर फ़्रेम कैसे रेंडर हो रहा है. यह आपको ड्रॉ करने के लिए कॉल का क्रम दिखाता है. साथ ही, आपको उनके बारे में सिलसिलेवार तरीके से जानकारी देता है, ताकि आप पुष्टि कर सकें कि आपके ऑप्टिमाइज़ेशन सही तरीके से काम कर रहे हैं.
क्या आपको यह पुष्टि करनी है कि खोज नतीजों का पेज बैचर काम कर रहा है? फ़्रेम डीबगर में 'RenderLoopNewBatcher' एंट्री देखें. क्या आपको यह देखना है कि जीपीयू रेज़िडेंट ड्रॉअर, सही तरीके से बैच बना रहा है या नहीं? 'हाइब्रिड बैच ग्रुप' एंट्री ढूंढें. इन विज़ुअल कन्फ़र्मेशन से आपको यह समझने में मदद मिलती है कि आपकी ऑप्टिमाइज़ेशन सेटिंग असल में लागू हो रही हैं या नहीं.
अपने सीन के पहले 50 ड्रॉ कॉल को एक-एक करके देखें. अगर आपको एक जैसे ऑब्जेक्ट, बैच में होने के बजाय अलग-अलग ड्रॉ होते हुए दिखते हैं, तो इसका मतलब है कि इंस्टेंसिंग या बैचिंग की प्रोसेस सही तरीके से काम नहीं कर रही है. फ़्रेम डीबगर की मदद से, ये समस्याएं तुरंत दिखती हैं, ताकि उन्हें ठीक किया जा सके.
अन्य ऑप्टिमाइज़ेशन
ऊपर बताए गए ऑप्टिमाइज़ेशन के अलावा, परफ़ॉर्मेंस से जुड़ी हमारी पूरी गाइड में कुछ अन्य ऑप्टिमाइज़ेशन भी शामिल हैं. यहां खास जानकारी दी गई है:
- यूआरपी सेटिंग: मोबाइल एक्सआर के लिए, एचडीआर और पोस्ट प्रोसेसिंग की सुविधा बंद करें. मोबाइल हार्डवेयर पर परफ़ॉर्मेंस की लागत की तुलना में, इन सुविधाओं से विज़ुअल पर बहुत कम असर पड़ता है. इसलिए, आपको विज़ुअल में मामूली अंतर के साथ परफ़ॉर्मेंस में काफ़ी फ़ायदा मिलेगा.
- SRP Batcher: यह एक ही शेडर वैरिएंट का इस्तेमाल करने वाले कई मटीरियल वाले सीन के लिए, सीपीयू ओवरहेड को कम करता है. ड्रॉ करने के लिए कॉल के बीच रेंडर-स्टेट में होने वाले बदलावों को कम करके, रेंडरिंग में लगने वाले सीपीयू समय को काफ़ी कम किया जा सकता है.
- डिसप्ले का रीफ़्रेश रेट: सीन की जटिलता के आधार पर, 72 एफ़पीएस और 90 एफ़पीएस के बीच डाइनैमिक तौर पर अडजस्ट करें. गेम को क्रैश होने से बचाने के लिए, मुश्किल सीक्वेंस के दौरान फ़्रेम रेट कम करें. इसके बाद, आसान मोमेंट के दौरान फ़्रेम रेट बढ़ाएं, ताकि गेम आसानी से खेला जा सके.
- डेप्थ/ओपेक टेक्सचर: इन्हें तब तक बंद रखें, जब तक शेडर इफ़ेक्ट के लिए इनकी ज़रूरत न हो. इनकी वजह से, जीपीयू को कॉपी करने की ऐसी प्रोसेस होती हैं जिनकी ज़रूरत नहीं होती. इससे परफ़ॉर्मेंस खराब होती है और ज़्यादातर ऐप्लिकेशन को कोई फ़ायदा नहीं मिलता.
- यूआरपी रेंडर स्केल: इस सेटिंग की मदद से, बेहतर परफ़ॉर्मेंस के लिए कम रिज़ॉल्यूशन पर रेंडर किया जा सकता है. इसके अलावा, बेहतर विज़ुअल क्वालिटी के लिए रेंडरिंग को अपस्केल किया जा सकता है.
इन और अन्य ऑप्टिमाइज़ेशन के बारे में सिलसिलेवार निर्देश पाने के लिए, Android XR के लिए Unity की परफ़ॉर्मेंस गाइड देखें.
नतीजा
आपके एक्सआर ऐप्लिकेशन की परफ़ॉर्मेंस सिर्फ़ एक तकनीकी चेकबॉक्स नहीं है. इससे तय होता है कि उपयोगकर्ता को आरामदायक और दिलचस्प अनुभव मिलेगा या उसे चक्कर आने लगेंगे या असहज महसूस होगा. हमने जिन ऑप्टिमाइज़ेशन के बारे में बताया है वे नए XR डिवाइसों पर, फ़्रेमरेट के ज़रूरी टारगेट हासिल करने के लिए आपकी टूलकिट हैं.
यहां आपका रोडमैप दिया गया है:
- फ़ोविएटेड रेंडरिंग और Vulkan सबसैंपलिंग का इस्तेमाल करें. एक्सआर के लिए उपलब्ध ये सुविधाएं, जीपीयू की खपत को तुरंत और काफ़ी हद तक कम करती हैं.
- अगर आपके गेम में बार-बार दिखने वाली ज्यामिति या अंदरूनी जगहों वाले जटिल सीन हैं, तो जीपीयू रेज़िडेंट ड्रॉअर और ऑक्लूज़न कलिंग जोड़ें.
- परफ़ॉर्मेंस मेट्रिक एपीआई की मदद से, हर चीज़ पर नज़र रखें. इससे यह पक्का किया जा सकेगा कि आपके किए गए बदलावों से वाकई मदद मिल रही है
- परफ़ॉर्मेंस को और बेहतर बनाने के लिए, यूआरपी के अन्य ऑप्टिमाइज़ेशन एक्सप्लोर करें
यह ज़रूरी है कि आप लगातार मेज़र करें और बदलाव करें. हर ऑप्टिमाइज़ेशन से हर प्रोजेक्ट को एक जैसा फ़ायदा नहीं मिलेगा. इसलिए, परफ़ॉर्मेंस मेट्रिक एपीआई का इस्तेमाल करके यह जानें कि आपके इस्तेमाल के उदाहरण के लिए असल में क्या मददगार है.
इसके बाद क्या होगा: अपनी स्किल को बेहतर बनाना
और जानने के लिए तैयार हैं? ये संसाधन देखें:
- Android XR के लिए Unity की परफ़ॉर्मेंस गाइड - यहां बताई गई सभी सुविधाओं को लागू करने के सिलसिलेवार निर्देश.
- Unity और Android XR का इस्तेमाल शुरू करना - अपना डेवलपमेंट एनवायरमेंट सेट अप करें और ऐप्लिकेशन बनाना शुरू करें.
- Android XR डेवलपर दस्तावेज़ - Android XR की सभी सुविधाओं के बारे में पूरी जानकारी देने वाली गाइड
-
प्रॉडक्ट से जुड़ी खबरेंहमें यह बताते हुए खुशी हो रही है कि अब Android XR के लिए, Unreal Engine और Godot का आधिकारिक तौर पर इस्तेमाल किया जा सकता है. हम आपकी प्रॉडक्टिविटी बढ़ाने और एक्सआर की नई सुविधाएं देने के लिए, नए टूल भी लॉन्च कर रहे हैं: Android XR इंजन हब और Android XR इंटरैक्शन फ़्रेमवर्क.
Luke Hopkins, Ryan Bartley • पढ़ने में लगने वाला समय: 4 मिनट -
प्रॉडक्ट से जुड़ी खबरेंआज Android डेवलपर समिट में, हम कई टूल और एपीआई की उपलब्धता का एलान कर रहे हैं. इन्हें रोज़मर्रा की समस्याओं को दूर करने और आपको बेहतरीन Android ऐप्लिकेशन बनाने के लिए ज़्यादा सुविधाएं देने के लिए डिज़ाइन किया गया है.
Matthew McCullough • पढ़ने में लगने वाला समय: 4 मिनट -
प्रॉडक्ट से जुड़ी खबरेंAndroid Studio Rabbit 2 अब स्टेबल है और प्रोडक्शन में इस्तेमाल के लिए तैयार है. इस रिलीज़ में, ऐप्लिकेशन डेवलपमेंट को बेहतर बनाने के लिए मुख्य सुविधाएं शामिल हैं. जैसे, Bring Your Own Agent, XR एमुलेटर की नई सुविधाएं, LeakCanary का अपडेट, एजेंट स्किल मैनेजर का नया टूल, एआई की मदद से कोड की समीक्षा करने की सुविधा वगैरह.
Matthew Warner • तीन मिनट में पढ़ा जा सकता है
Android डेवलपमेंट से जुड़ी ताज़ा अहम जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.