Unity की मदद से Android XR के लिए परफ़ॉर्मेंस ऑप्टिमाइज़ करना
पढ़ने में 6 मिनट लगेंगे
Samsung Galaxy XR लॉन्च हो गया है, जो Android XR पर काम करता है! यह ब्लॉग पोस्ट, Android XR Spotlight Week का हिस्सा है. इसमें हम संसाधन उपलब्ध कराते हैं. जैसे, ब्लॉग पोस्ट, वीडियो, सैंपल कोड वगैरह. इन सभी को इस तरह डिज़ाइन किया गया है कि ये Android XR के लिए ऐप्लिकेशन बनाने, उन्हें तैयार करने, और उनके बारे में ज़्यादा जानने में आपकी मदद करें.
इस हफ़्ते, Samsung ने Galaxy XR लॉन्च किया है. इसे Google और Qualcomm के साथ मिलकर बनाया गया है. यह डेवलपर के लिए एक रोमांचक समय है. हम चाहते थे कि आपको अपने एक्सआर ऐप्लिकेशन से सबसे अच्छी परफ़ॉर्मेंस मिले.
सामान्य डिवाइसों पर गेम और ऐप्लिकेशन की परफ़ॉर्मेंस खराब होने से, उपयोगकर्ताओं को परेशानी हो सकती है. हालांकि, एक्सआर की दुनिया में परफ़ॉर्मेंस सिर्फ़ ज़रूरी नहीं है, बल्कि यह आपके ऐप्लिकेशन की कामयाबी के लिए बहुत अहम है. अगर आप एक्सआर में अपना फ़्रेम रेट टारगेट पूरा नहीं कर पाते हैं, तो इससे मोशन सिकनेस जैसी ज़्यादा गंभीर समस्याएं हो सकती हैं.
इस गाइड में, हम आपको 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 की परफ़ॉर्मेंस से जुड़ी पूरी गाइड देखें.
नतीजा
आपके एक्सआर ऐप्लिकेशन की परफ़ॉर्मेंस, सिर्फ़ एक तकनीकी पहलू नहीं है. इससे उपयोगकर्ता को बेहतर और दिलचस्प अनुभव मिलता है. वहीं, खराब परफ़ॉर्मेंस की वजह से, उपयोगकर्ताओं को चक्कर आ सकते हैं या वे असहज महसूस कर सकते हैं. हमने जिन ऑप्टिमाइज़ेशन के बारे में बताया है वे नए एक्सआर डिवाइसों पर, फ़्रेम रेट के ज़रूरी टारगेट पूरे करने में आपकी मदद करेंगे.
यहां आपका रोडमैप दिया गया है:
- फ़ोविएटेड रेंडरिंग और Vulkan सबसैंपलिंग से शुरुआत करें. एक्सआर डिवाइसों के लिए बनी इन सुविधाओं से, जीपीयू के वर्कलोड को तुरंत और काफ़ी कम किया जा सकता है.
- अगर आपके पास एक ही तरह की ज्यामिति या इनडोर स्पेस वाले मुश्किल सीन हैं, तो जीपीयू रेसिडेंट ड्रॉअर और ऑक्लूज़न कलिंग की सुविधा जोड़ें.
- परफ़ॉर्मेंस मेट्रिक API की मदद से हर चीज़ की निगरानी करें, ताकि यह पक्का किया जा सके कि आपके बदलाव असल में मदद कर रहे हैं
- परफ़ॉर्मेंस को बेहतर बनाने के लिए, यूआरपी के अन्य ऑप्टिमाइज़ेशन देखें
लगातार मेज़र करना और प्रोसेस को दोहराना ज़रूरी है. हर ऑप्टिमाइज़ेशन से हर प्रोजेक्ट को एक जैसा फ़ायदा नहीं मिलेगा. इसलिए, परफ़ॉर्मेंस मेट्रिक API का इस्तेमाल करके यह पता करें कि आपके खास इस्तेमाल के मामले में असल में क्या मदद कर रहा है.
आगे क्या करना है: अपने कौशल को बढ़ाना
और जानने के लिए तैयार हैं? ये संसाधन देखें:
- Android XR के लिए Unity की परफ़ॉर्मेंस से जुड़ी गाइड - इसमें यहां बताई गई सभी सुविधाओं को लागू करने के बारे में चरण-दर-चरण निर्देश दिए गए हैं यहां.
- Unity और Android XR का इस्तेमाल शुरू करना - अपना डेवलपमेंट एनवायरमेंट सेट अप करें और ऐप्लिकेशन बनाना शुरू करें.
- Android XR के लिए डेवलपर दस्तावेज़ - इसमें Android XR की सभी सुविधाओं के लिए पूरी गाइड दी गई हैं
-
प्रॉडक्ट से जुड़ी खबरेंहमें यह बताते हुए खुशी हो रही है कि Unreal Engine और Godot के लिए, Android XR की आधिकारिक तौर पर सहायता उपलब्ध है. हम आपकी प्रॉडक्टिविटी बढ़ाने और एक्सआर की नई सुविधाएं उपलब्ध कराने के लिए, नए टूल भी लॉन्च कर रहे हैं: Android XR Engine Hub और Android XR Interaction Framework.
Luke Hopkins, Ryan Bartley • पढ़ने में 4 मिनट लगेंगे -
प्रॉडक्ट से जुड़ी खबरेंGoogle Play पर, हम उपयोगकर्ताओं को सबसे अच्छा अनुभव देने के लिए प्रतिबद्ध हैं. साथ ही, हम यह भी पक्का करते हैं कि डेवलपर के पास सफल होने के लिए ज़रूरी टूल और अडैप्टेबिलिटी हो.
Paul Feng • पढ़ने में 3 मिनट लगेंगे -
प्रॉडक्ट से जुड़ी खबरेंपिछले साल, हमने Android डेवलपर की पहचान की पुष्टि करने की सुविधा शुरू की थी. इससे इकोसिस्टम की सुरक्षा को मज़बूत किया जा सकता है और नुकसान पहुंचाने वाले ऐप्लिकेशन रिलीज़ करने के लिए, बुरे मकसद से काम करने वाले लोगों या ग्रुप को अपनी पहचान छिपाने से रोका जा सकता है.
Matthew Forsythe • पढ़ने में 2 मिनट लगेंगे
Android डेवलपमेंट से जुड़ी नई जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.