प्रॉडक्ट से जुड़ी खबरें

Unity की मदद से Android XR के लिए परफ़ॉर्मेंस ऑप्टिमाइज़ करना

छह मिनट में पढ़ें
Luke Hopkins
डेवलपर रिलेशंस इंजीनियर, Android

Samsung Galaxy XR लॉन्च हो गया है और यह Android XR पर काम करता है! यह ब्लॉग पोस्ट, Android XR Spotlight Week का हिस्सा है. इसमें हम संसाधन उपलब्ध कराते हैं. जैसे, ब्लॉग पोस्ट, वीडियो, सैंपल कोड वगैरह. इन सभी को इस तरह डिज़ाइन किया गया है कि इनकी मदद से, Android XR के लिए ऐप्लिकेशन बनाना और उन्हें तैयार करना सीखा जा सके.  

इस हफ़्ते, Samsung ने Galaxy XR लॉन्च किया है. इसे Google और Qualcomm के साथ मिलकर बनाया गया है. यह डेवलपर्स के लिए एक रोमांचक समय है. हम चाहते थे कि आपको अपने XR ऐप्लिकेशन से सबसे अच्छी परफ़ॉर्मेंस मिले.

सामान्य डिवाइसों पर गेम और ऐप्लिकेशन की परफ़ॉर्मेंस खराब होने से, उपयोगकर्ताओं को परेशानी हो सकती है. हालांकि, XR डिवाइसों पर खराब परफ़ॉर्मेंस से ज़्यादा गंभीर समस्याएं हो सकती हैं. जैसे, चक्कर आना. इसलिए, XR डिवाइसों पर परफ़ॉर्मेंस को बेहतर बनाना ज़रूरी है.

इस गाइड में, हम आपको Android XR के लिए ऐप्लिकेशन डेवलप करने के लिए, परफ़ॉर्मेंस ऑप्टिमाइज़ेशन के ज़रूरी पहलुओं के बारे में बताएंगे. आपको यह पता चलेगा कि किन सुविधाओं से परफ़ॉर्मेंस को सबसे ज़्यादा बेहतर बनाया जा सकता है. साथ ही, यह भी पता चलेगा कि इन सुविधाओं का इस्तेमाल कब और कैसे किया जाए, ताकि फ़्रेम रेट के टारगेट पूरे किए जा सकें.

हमारा लक्ष्य यह है: 

  • कम से कम: 72 एफ़पीएस (यह Play की क्वालिटी के लिए बने दिशा-निर्देशों का हिस्सा है)
  • ज़रूरी नहीं: 90 एफ़पीएस. इसके लिए, हर फ़्रेम के लिए 11 मि॰से॰ का बजट

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

एक्सआर के लिए खास परफ़ॉर्मेंस सुविधाएं

हम एक्सआर के लिए खास परफ़ॉर्मेंस की दो सुविधाओं के बारे में बताकर शुरुआत करेंगे: फ़ोविएटेड रेंडरिंग और Vulkan सबसैंपलिंग. 

फ़ोविएटेड रेंडरिंग

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

दूसरा मोड आई-ट्रैकिंग मोड है. इसमें स्क्रीन के उस हिस्से को पूरी जानकारी के साथ रेंडर किया जाता है जिस पर उपयोगकर्ता की नज़र होती है. वहीं, स्क्रीन के किनारे वाले हिस्सों को कम क्वालिटी पर रेंडर किया जाता है. यह मोड, असल में इंसानों की आंखों के काम करने के तरीके की नकल करता है. इसमें हम जिस हिस्से पर फ़ोकस करते हैं, सिर्फ़ वही हिस्सा हमें पूरी जानकारी के साथ दिखता है.

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

मान लें कि आपको 3D कलाकृतियों वाला एक म्यूज़ियम बनाना है. फ़ोविएटेड रेंडरिंग के बिना, आपको 'फ़ील्ड ऑफ़ व्यू' में मौजूद हर चीज़ को 90 एफ़पीएस पर रेंडर करने में परेशानी होगी. वहीं, फ़ोविएटेड रेंडरिंग की मदद से, उन हिस्सों को ज़्यादा जानकारी के साथ रेंडर किया जा सकता है जिन पर उपयोगकर्ता की नज़र होती है. हालांकि, बैकग्राउंड एनवायरमेंट को कम क्वालिटी पर रेंडर किया जा सकता है. उपयोगकर्ताओं को कोई अंतर नहीं दिखेगा. हालांकि, आपके पास सीन में ज़्यादा जानकारी जोड़ने का विकल्प होगा.

Vulkan सबसैंपलिंग

Vulkan सबसैंपलिंग, फ़ोविएटेड रेंडरिंग के साथ मिलकर काम करता है. फ़ोविएटेड रेंडरिंग यह तय करता है कि अलग-अलग क्वालिटी लेवल पर क्या रेंडर करना है. वहीं, Vulkan सबसैंपलिंग, फ़्रैगमेंट डेंसिटी मैप का इस्तेमाल करके, अलग-अलग क्वालिटी लेवल को असरदार तरीके से रेंडर करने का काम करता है.

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

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

मुश्किल सीन के लिए जीपीयू की सुविधाएं

फ़ोविएटेड रेंडरिंग और Vulkan सबसैंपलिंग के अलावा, जीपीयू की कुछ ऐसी सुविधाएं भी हैं जिनसे स्मार्ट इंस्टेंसिंग और कलिंग की मदद से, गैर-ज़रूरी स्ट्रेन को कम किया जा सकता है. ये सुविधाएं, खास तौर पर उन मुश्किल सीन के लिए कारगर हैं जिनमें एक ही तरह की ज्यामिति या ज़्यादा ऑक्लूज़न होता है.

जीपीयू रेसिडेंट ड्रॉअर

जीपीयू रेसिडेंट ड्रॉअर, ड्रॉ कॉल को कम करने और सीपीयू के प्रोसेसिंग टाइम को बढ़ाने के लिए, जीपीयू इंस्टेंसिंग का इस्तेमाल अपने-आप करता है. इसलिए, सीपीयू हर ऑब्जेक्ट के बारे में जीपीयू को अलग-अलग बताने के बजाय, जीपीयू एक जैसे ऑब्जेक्ट को एक साथ बैच करता है.

यह सुविधा, खास तौर पर उन बड़े सीन के लिए कारगर है जिनमें एक ही तरह के मेश का इस्तेमाल किया जाता है. जैसे, जंगल में पेड़, ऑफ़िस की बिल्डिंग में फ़र्नीचर या किसी एनवायरमेंट में बिखरे हुए प्रॉप.

मान लें कि जंगल के एक सीन में 200 पेड़ हैं और इन सभी के लिए एक ही बेस मेश का इस्तेमाल किया गया है. जीपीयू रेसिडेंट ड्रॉअर के बिना, जीपीयू के 200 ड्रॉ कॉल होंगे. इससे सीपीयू का प्रोसेसिंग टाइम कम हो जाएगा. इस सुविधा को चालू करने पर, जीपीयू उन पेड़ों को स्मार्ट तरीके से इंस्टेंस करेगा. इससे ड्रॉ कॉल की संख्या 5 से 10 तक कम हो जाएगी. इससे जीपीयू के वर्कलोड को काफ़ी कम किया जा सकता है. इसके बाद, इस बचे हुए समय का इस्तेमाल गेमप्ले लॉजिक या फ़िज़िक्स कैलकुलेशन के लिए किया जा सकता है.

जीपीयू ऑक्लूज़न कलिंग

जीपीयू ऑक्लूज़न कलिंग, छिपे हुए ऑब्जेक्ट को आइडेंटिफ़ाई करने और उन्हें रेंडर न करने के लिए, सीपीयू के बजाय जीपीयू का इस्तेमाल करता है. यह सुविधा, अन्य ऑब्जेक्ट के पीछे छिपे हुए ऑब्जेक्ट को अपने-आप डिटेक्ट करती है. इसलिए, जीपीयू का इस्तेमाल उन चीज़ों को रेंडर करने के लिए नहीं किया जाता जिन्हें उपयोगकर्ता नहीं देख सकता.

यह सुविधा, खास तौर पर उन इनडोर स्पेस के लिए कारगर है जिनमें कई कमरे, घने एनवायरमेंट या आर्किटेक्चरल सीन होते हैं. इनमें दीवारें, फ़्लोर, और ऑब्जेक्ट, व्यू को स्वाभाविक तौर पर ब्लॉक करते हैं.

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

अपनी परफ़ॉर्मेंस की निगरानी करना

सिर्फ़ इन सुविधाओं का इस्तेमाल करना काफ़ी नहीं है. आपको अपने ऑप्टिमाइज़ेशन को मेज़र भी करना होगा, ताकि उनके असर का आकलन किया जा सके और यह पुष्टि की जा सके कि आपके बदलाव असल में काम कर रहे हैं.

परफ़ॉर्मेंस मेट्रिक API

परफ़ॉर्मेंस मेट्रिक API, आपके ऐप्लिकेशन के मेमोरी यूसेज, सीपीयू परफ़ॉर्मेंस, और जीपीयू परफ़ॉर्मेंस की रीयल-टाइम निगरानी करता है. यह आपको कंपोज़िटर और रनटाइम लेयर से पूरा डेटा देता है, ताकि आपको यह पता चल सके कि आपके ऐप्लिकेशन में असल में क्या हो रहा है.

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

फ़ोविएटेड रेंडरिंग को चालू करने से पहले, हो सकता है कि आपका जीपीयू फ़्रेम टाइम 13 मि॰से॰ हो. यह आपके 11 मि॰से॰ के बजट से ज़्यादा है. फ़ोविएटेड रेंडरिंग को चालू करें, फिर से मेज़र करें, और उम्मीद है कि यह 9 मि॰से॰ तक कम हो जाएगा. इससे आपको 4 मि॰से॰ का अतिरिक्त समय मिलेगा. इसका इस्तेमाल, सीन में ज़्यादा जानकारी जोड़ने, अन्य जगहों पर विज़ुअल क्वालिटी को बेहतर बनाने या अलग-अलग तरह के कॉन्टेंट के लिए बेहतर परफ़ॉर्मेंस पक्का करने के लिए किया जा सकता है.

इन मेट्रिक के बिना, ऑप्टिमाइज़ेशन का कोई फ़ायदा नहीं है. परफ़ॉर्मेंस मेट्रिक API आपको यह बताता है कि आपके खास इस्तेमाल के मामले में असल में क्या मदद कर रहा है.

फ़्रेम डीबगर

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

क्या आपको पुष्टि करनी है कि एसआरपी बैचिंग की सुविधा काम कर रही है? फ़्रेम डीबगर में 'RenderLoopNewBatcher' एंट्री देखें. क्या आपको यह देखना है कि जीपीयू रेसिडेंट ड्रॉअर सही तरीके से बैचिंग कर रहा है या नहीं? 'हाइब्रिड बैच ग्रुप' एंट्री देखें. इन विज़ुअल पुष्टि से आपको यह समझने में मदद मिलती है कि आपकी ऑप्टिमाइज़ेशन सेटिंग असल में काम कर रही हैं या नहीं.

अपने सीन के पहले 50 ड्रॉ कॉल को स्टेप-बाय-स्टेप देखें. अगर आपको एक जैसे ऑब्जेक्ट, बैच के बजाय अलग-अलग ड्रॉ होते दिखते हैं, तो इसका मतलब है कि आपकी इंस्टेंसिंग या बैचिंग सही तरीके से काम नहीं कर रही है. फ़्रेम डीबगर, इन समस्याओं को तुरंत दिखाता है, ताकि उन्हें ठीक किया जा सके.

अन्य ऑप्टिमाइज़ेशन

ऊपर बताए गए ऑप्टिमाइज़ेशन के अलावा, परफ़ॉर्मेंस के लिए बनी हमारी पूरी गाइड में कुछ अन्य ऑप्टिमाइज़ेशन के बारे में भी बताया गया है. यहां खास बातें बताई गई हैं:

  • यूआरपी सेटिंग: मोबाइल एक्सआर के लिए, एचडीआर और पोस्ट प्रोसेसिंग को बंद करें. मोबाइल हार्डवेयर पर इन सुविधाओं की परफ़ॉर्मेंस की लागत की तुलना में, इनका विज़ुअल असर बहुत कम होता है. इसलिए, आपको परफ़ॉर्मेंस में काफ़ी सुधार दिखेगा. साथ ही, विज़ुअल में बहुत कम अंतर दिखेगा.
  • एसआरपी बैचिंग: एक ही शेडर वैरिएंट का इस्तेमाल करने वाले कई मटीरियल वाले सीन के लिए, सीपीयू ओवरहेड को कम करता है. ड्रॉ कॉल के बीच रेंडर-स्टेट में होने वाले बदलावों को कम करके, रेंडरिंग में लगने वाले सीपीयू टाइम को काफ़ी कम किया जा सकता है.
  • डिसप्ले रीफ़्रेश रेट: सीन की जटिलता के आधार पर, 72 एफ़पीएस और 90 एफ़पीएस के बीच डाइनैमिक तौर पर अडजस्ट करें. जटिल सीक्वेंस के दौरान, फ़्रेम रेट को कम करें, ताकि स्थिरता बनी रहे. इसके बाद, आसान पलों के दौरान, अल्ट्रा-स्मूद इंटरैक्शन के लिए इसे बढ़ाएं.
  • डेप्थ/ओपेक टेक्सचर: इन्हें तब तक बंद रखें, जब तक शेडर इफ़ेक्ट के लिए इनकी ज़रूरत न हो. इनकी वजह से, जीपीयू की कॉपी करने की गैर-ज़रूरी कार्रवाइयां होती हैं. इससे परफ़ॉर्मेंस खराब होती है. साथ ही, ज़्यादातर ऐप्लिकेशन के लिए इनका कोई फ़ायदा नहीं होता.
  • यूआरपी रेंडर स्केल: इस सेटिंग की मदद से, परफ़ॉर्मेंस के फ़ायदों के लिए कम रिज़ॉल्यूशन पर रेंडर किया जा सकता है. साथ ही, बेहतर विज़ुअल क्वालिटी के लिए, रेंडरिंग को अपस्केल किया जा सकता है.

इन और अन्य ऑप्टिमाइज़ेशन के बारे में चरण-दर-चरण निर्देश पाने के लिए, Android XR के लिए Unity की परफ़ॉर्मेंस से जुड़ी पूरी गाइड देखें.

नतीजा

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

यहां आपका रोडमैप दिया गया है:

  1. फ़ोविएटेड रेंडरिंग और Vulkan सबसैंपलिंग से शुरुआत करें. एक्सआर के लिए खास इन सुविधाओं से, जीपीयू के वर्कलोड को तुरंत और काफ़ी कम किया जा सकता है.
  2. अगर आपके पास एक ही तरह की ज्यामिति या इनडोर स्पेस वाले मुश्किल सीन हैं, तो जीपीयू रेसिडेंट ड्रॉअर और ऑक्लूज़न कलिंग को जोड़ें.
  3. परफ़ॉर्मेंस मेट्रिक API की मदद से हर चीज़ की निगरानी करें, ताकि यह पक्का किया जा सके कि आपके बदलाव असल में मदद कर रहे हैं
  4. परफ़ॉर्मेंस को बेहतर बनाने के लिए, यूआरपी के अन्य ऑप्टिमाइज़ेशन देखें

लगातार मेज़र करना और प्रोसेस को दोहराना ज़रूरी है. हर ऑप्टिमाइज़ेशन से हर प्रोजेक्ट को एक जैसा फ़ायदा नहीं मिलेगा. इसलिए, परफ़ॉर्मेंस मेट्रिक API का इस्तेमाल करके, यह पता करें कि आपके खास इस्तेमाल के मामले में असल में क्या मदद कर रहा है.

आगे क्या करना है: अपने कौशल को बढ़ाना

और जानने के लिए तैयार हैं? ये संसाधन देखें:

इसे लिखा है:

पढ़ना जारी रखें