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 फ़्रेम प्रति सेकंड
ज़्यादा फ़्रेम रेट बनाए रखना क्यों ज़रूरी है, इस बारे में ज़्यादा जानने के लिए परफ़ॉर्मेंस के बारे में दिशा-निर्देश देखें.
एक्सआर की परफ़ॉर्मेंस से जुड़ी सुविधाएं
हम सबसे पहले, 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 ऑक्लूज़न कलिंग, छिपे हुए ऑब्जेक्ट की पहचान करने और उन्हें रेंडर न करने के लिए, सीपीयू के बजाय GPU का इस्तेमाल करता है. यह सुविधा, अन्य ऑब्जेक्ट के पीछे छिपी हुई चीज़ों का अपने-आप पता लगा लेती है. इसलिए, आपका GPU उन चीज़ों पर काम नहीं करता जिन्हें उपयोगकर्ता नहीं देख सकता.
यह सुविधा, खास तौर पर अंदरूनी जगहों पर बेहतर तरीके से काम करती है. जैसे, कई कमरों वाली जगहें, घनी आबादी वाली जगहें या वास्तुकला से जुड़ी ऐसी जगहें जहां दीवारें, फ़र्श, और ऑब्जेक्ट, व्यू को स्वाभाविक रूप से ब्लॉक करते हैं.
उदाहरण के लिए, मान लें कि आपको एक ऐसा स्मार्ट होम बनाना है जिसमें कई कमरे हों. जब उपयोगकर्ता लिविंग रूम में है, तो किचन की पूरी जानकारी देने वाले सीन को रेंडर करने में जीपीयू साइकल क्यों बर्बाद करें, जबकि वह दीवार के पीछे पूरी तरह से छिपा हुआ है? GPU Occlusion Culling की सुविधा, छिपी हुई चीज़ों को रेंडर करने की प्रोसेस को अपने-आप स्किप कर देती है. इससे आपको दिखने वाली चीज़ों के लिए ज़्यादा परफ़ॉर्मेंस बजट मिलता है.
अपनी परफ़ॉर्मेंस को मॉनिटर करना
सिर्फ़ इन सुविधाओं का इस्तेमाल करना काफ़ी नहीं है. आपको अपने ऑप्टिमाइज़ेशन को भी मेज़र करना होगा, ताकि उनके असर का पता लगाया जा सके. साथ ही, यह पुष्टि की जा सके कि आपके बदलाव वाकई काम कर रहे हैं.
Performance Metrics API
परफ़ॉर्मेंस मेट्रिक एपीआई की मदद से, आपके ऐप्लिकेशन के मेमोरी इस्तेमाल, सीपीयू परफ़ॉर्मेंस, और जीपीयू परफ़ॉर्मेंस को रीयल टाइम में मॉनिटर किया जा सकता है. इससे आपको कंपोज़िटर और रनटाइम लेयर का पूरा डेटा मिलता है. इससे आपको यह पता चलता है कि आपके ऐप्लिकेशन में क्या हो रहा है.
बदलाव करने से पहले, एक बेसलाइन तय करें. इसके बाद, ऑप्टिमाइज़ेशन लागू करें, उसके असर को मेज़र करें, और फिर से प्रोसेस दोहराएं. डेटा पर आधारित इस अप्रोच का मतलब है कि आपको पता है कि आपकी परफ़ॉर्मेंस बेहतर हो रही है. आपको सिर्फ़ अनुमान नहीं लगाना पड़ रहा है.
फ़ोविएटेड रेंडरिंग की सुविधा चालू करने से पहले, आपके जीपीयू का फ़्रेम टाइम 13 मि॰से॰ हो सकता है. यह आपके 11 मि॰से॰ के बजट से ज़्यादा है. फ़ोविएटेड रेंडरिंग चालू करें, फिर से मेज़र करें, और उम्मीद है कि आपको यह 9 मि॰से॰ तक कम होता दिखेगा. इससे आपको 4 मिलीसेकंड का समय मिलता है. इस समय का इस्तेमाल, सीन में ज़्यादा जानकारी जोड़ने, अन्य जगहों पर विज़ुअल क्वालिटी को बेहतर बनाने या ज़्यादा कॉन्टेंट में बेहतर परफ़ॉर्मेंस को पक्का करने के लिए किया जा सकता है.
इन मेट्रिक के बिना, ऑप्टिमाइज़ेशन का कोई मतलब नहीं है. परफ़ॉर्मेंस मेट्रिक एपीआई से आपको यह पता चलता है कि आपके इस्तेमाल के उदाहरण के लिए, कौनसी चीज़ें वाकई में मददगार हैं.
फ़्रेम डीबगर
फ़्रेम डिबगर, Unity का एक बिल्ट-इन टूल है. इससे यह समझने में मदद मिलती है कि आपके सीन को फ़्रेम दर फ़्रेम कैसे रेंडर किया जा रहा है. यह आपको ड्रॉ कॉल का क्रम दिखाता है. साथ ही, आपको एक-एक करके उनकी जांच करने की सुविधा देता है, ताकि यह पुष्टि की जा सके कि आपके ऑप्टिमाइज़ेशन सही तरीके से काम कर रहे हैं.
क्या आपको पुष्टि करनी है कि SRP Batcher काम कर रहा है? फ़्रेम डिबगर में, 'RenderLoopNewBatcher' एंट्री देखें. क्या जीपीयू रेसिडेंट ड्रॉअर, बैचिंग की सुविधा का सही तरीके से इस्तेमाल कर रहा है? 'हाइब्रिड बैच ग्रुप' एंट्री ढूंढें. इन विज़ुअल पुष्टि से आपको यह समझने में मदद मिलती है कि आपकी ऑप्टिमाइज़ेशन सेटिंग लागू हो रही हैं या नहीं.
अपने सीन के पहले 50 ड्रॉ कॉल पर जाएं. अगर आपको एक जैसे ऑब्जेक्ट, बैच में न दिखकर अलग-अलग दिख रहे हैं, तो इसका मतलब है कि इंस्टेंसिंग या बैचिंग की सुविधा ठीक से काम नहीं कर रही है. फ़्रेम डिबगर, इन समस्याओं को तुरंत दिखाता है, ताकि आप उन्हें ठीक कर सकें.
अन्य ऑप्टिमाइज़ेशन
ऊपर बताए गए ऑप्टिमाइज़ेशन के साथ-साथ, परफ़ॉर्मेंस से जुड़ी हमारी पूरी गाइड में कुछ अन्य ऑप्टिमाइज़ेशन के बारे में भी बताया गया है. यहां खास जानकारी दी गई है:
- यूआरपी सेटिंग: मोबाइल एक्सआर के लिए, एचडीआर और पोस्ट प्रोसेसिंग की सुविधा बंद करें. ये सुविधाएं, मोबाइल हार्डवेयर पर परफ़ॉर्मेंस की कीमत की तुलना में कम विज़ुअल इफ़ेक्ट देती हैं. इसलिए, आपको परफ़ॉर्मेंस में काफ़ी सुधार देखने को मिलेगा. हालांकि, विज़ुअल में बहुत कम अंतर दिखेगा.
- एसआरपी बैचर: यह एक ही शेडर वैरिएंट का इस्तेमाल करने वाले कई मटीरियल वाले सीन के लिए, सीपीयू के ओवरहेड को कम करता है. ड्रॉ कॉल के बीच रेंडर-स्टेट में होने वाले बदलावों को कम करके, रेंडरिंग में लगने वाले सीपीयू के समय को काफ़ी हद तक कम किया जा सकता है.
- डिसप्ले रीफ़्रेश रेट: सीन की जटिलता के आधार पर, 72 एफ़पीएस और 90 एफ़पीएस के बीच डाइनैमिक तौर पर अडजस्ट होता है. जटिल सीक्वेंस के दौरान फ़्रेम रेट को कम करें, ताकि स्थिरता बनी रहे. इसके बाद, आसान पलों के दौरान इसे बढ़ाएं, ताकि इंटरैक्शन बहुत आसानी से हो सके.
- डेप्थ/ओपेक टेक्सचर: अगर आपको शेडर इफ़ेक्ट के लिए इनकी ज़रूरत नहीं है, तो इन्हें बंद कर दें. इनसे जीपीयू कॉपी करने की गैर-ज़रूरी कार्रवाइयां होती हैं. इससे परफ़ॉर्मेंस खराब होती है और ज़्यादातर ऐप्लिकेशन को कोई फ़ायदा नहीं मिलता.
- यूआरपी रेंडर स्केल: इस सेटिंग की मदद से, परफ़ॉर्मेंस को बेहतर बनाने के लिए कम रिज़ॉल्यूशन पर रेंडर किया जा सकता है. इसके अलावा, विज़ुअल क्वालिटी को बेहतर बनाने के लिए रेंडरिंग को अपस्केल किया जा सकता है.
इन और अन्य ऑप्टिमाइज़ेशन के बारे में सिलसिलेवार निर्देश पाने के लिए, Android XR के लिए Unity परफ़ॉर्मेंस गाइड देखें.
नतीजा
आपके XR ऐप्लिकेशन की परफ़ॉर्मेंस, सिर्फ़ एक तकनीकी चेकबॉक्स नहीं है. इससे उपयोगकर्ता को अच्छा और दिलचस्प अनुभव मिलता है. इसके उलट, खराब क्वालिटी की वजह से उपयोगकर्ता को असहज महसूस हो सकता है या उसे चक्कर आ सकते हैं. हमने जिन ऑप्टिमाइज़ेशन के बारे में बताया है वे नए XR डिवाइसों पर, फ़्रेमरेट के ज़रूरी टारगेट को पूरा करने के लिए आपके टूलकिट हैं.
यहां आपके लिए रोडमैप दिया गया है:
- फ़ोविएटेड रेंडरिंग और Vulkan Subsampling का इस्तेमाल शुरू करें. XR के लिए खास तौर पर डिज़ाइन की गई इन सुविधाओं से, जीपीयू की परफ़ॉर्मेंस में तुरंत और काफ़ी सुधार होता है.
- अगर आपके पास दोहराई गई ज्यामिति या इंटीरियर स्पेस वाले जटिल सीन हैं, तो जीपीयू रेज़िडेंट ड्रॉअर और ऑक्लूज़न कलिंग जोड़ें.
- परफ़ॉर्मेंस मेट्रिक एपीआई की मदद से, हर चीज़ को मॉनिटर करें. इससे यह पक्का किया जा सकेगा कि आपके बदलाव वाकई में मदद कर रहे हैं
- ज़्यादा परफ़ॉर्मेंस हेडरूम के लिए, यूआरपी के अन्य ऑप्टिमाइज़ेशन एक्सप्लोर करें
लगातार मेज़रमेंट करना और उसे दोहराना ज़रूरी है. हर ऑप्टिमाइज़ेशन से, हर प्रोजेक्ट को एक जैसा फ़ायदा नहीं मिलेगा. इसलिए, Performance Metrics API का इस्तेमाल करके यह पता लगाएं कि आपके इस्तेमाल के खास उदाहरण के लिए, कौनसी मेट्रिक सबसे ज़्यादा मददगार है.
इसके बाद क्या होगा: अपने कौशल को बेहतर बनाना
और जानने के लिए तैयार हैं? ये संसाधन देखें:
- Android XR के लिए Unity की परफ़ॉर्मेंस गाइड - इसमें यहां बताई गई सभी सुविधाओं को लागू करने के बारे में सिलसिलेवार निर्देश दिए गए हैं.
- Unity और Android XR का इस्तेमाल शुरू करना - अपना डेवलपमेंट एनवायरमेंट सेट अप करें और बनाना शुरू करें.
- Android XR डेवलपर दस्तावेज़ - Android XR की सभी सुविधाओं के लिए पूरी जानकारी देने वाली गाइड
-
प्रॉडक्ट से जुड़ी खबरेंहमें यह बताते हुए खुशी हो रही है कि Android XR के लिए, Unreal Engine और Godot के साथ काम करने की सुविधा उपलब्ध हो गई है. हम आपकी प्रॉडक्टिविटी बढ़ाने और नई XR क्षमताओं को चालू करने के लिए, नए टूल भी लॉन्च कर रहे हैं: Android XR Engine Hub और Android XR Interaction Framework.
Luke Hopkins, Ryan Bartley • पढ़ने में 4 मिनट लगेंगे -
प्रॉडक्ट से जुड़ी खबरेंहमने मार्च में, Android Bench लॉन्च किया था. यह असल दुनिया के Android डेवलपमेंट टास्क के लिए, हमारा एलएलएम लीडरबोर्ड है. इसके बाद से, हमने आपके सुझाव, शिकायत या राय के आधार पर बेंचमार्क को बेहतर बनाया है. इसमें ओपन-वेट मॉडल का आकलन करना और लीडरबोर्ड में लागत और परफ़ॉर्मेंस के डाइमेंशन जोड़ना शामिल है.
तीन मिनट में पढ़ा जा सकता है -
प्रॉडक्ट से जुड़ी खबरेंGoogle Play पर, हम उपयोगकर्ताओं को सबसे अच्छा अनुभव देने के लिए प्रतिबद्ध हैं. साथ ही, हम यह भी पक्का करते हैं कि डेवलपर के पास सफल होने के लिए ज़रूरी टूल और अडैप्टेबिलिटी हो.
Paul Feng • तीन मिनट में पढ़ा जा सकता है
Android डेवलपमेंट से जुड़ी नई अहम जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.