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

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

छह मिनट में पढ़ें
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 के लिए खास तौर पर डिज़ाइन की गई परफ़ॉर्मेंस की दो सुविधाओं के बारे में बात करेंगे: फ़ोविएटेड रेंडरिंग और वल्कन सबसैंपलिंग. 

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

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

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

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

मान लें कि आपको किसी म्यूज़ियम के लिए, 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

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

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

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

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

फ़्रेम डीबगर

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

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

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

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

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

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

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

नतीजा

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

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

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

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

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

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

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

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