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

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

पढ़ने में 6 मिनट लगेंगे
ल्यूक हॉपकिंस की प्रोफ़ाइल देखें
Luke Hopkins डेवलपर रिलेशंस इंजीनियर, Android

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

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

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

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

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

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

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

एक्सआर की परफ़ॉर्मेंस से जुड़ी सुविधाएं

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

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

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

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

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

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

Vulkan Subsampling

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

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

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

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

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

GPU Resident Drawer

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

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

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

GPU Occlusion Culling

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

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

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

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

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

Performance Metrics API

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

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

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

इन मेट्रिक के बिना, ऑप्टिमाइज़ेशन का कोई मतलब नहीं है. Performance Metrics API से आपको यह पता चलता है कि आपके इस्तेमाल के उदाहरण के लिए, कौनसी चीज़ें काम कर रही हैं.

फ़्रेम डीबगर

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

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

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

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

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

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

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

नतीजा

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

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

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

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

इसके बाद क्या होगा: अपने कौशल को बेहतर बनाना

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

  • Android XR के लिए Unity की परफ़ॉर्मेंस गाइड - इसमें यहां बताई गई सभी सुविधाओं को लागू करने के बारे में सिलसिलेवार निर्देश दिए गए हैं.
  • Unity और Android XR का इस्तेमाल शुरू करना - डेवलपमेंट एनवायरमेंट सेट अप करें और बनाना शुरू करें.
  • Android XR डेवलपर दस्तावेज़ - Android XR की सभी सुविधाओं के लिए पूरी जानकारी देने वाली गाइड
लेखक:
पढ़ना जारी रखें