Android Performance Tuner (Unity) की खास जानकारी

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

C या C++ का इस्तेमाल करने वाले गेम इंजन के लिए, नेटिव गेम इंजन के लिए गाइड देखें.

बैकग्राउंड

रेंडरिंग परफ़ॉर्मेंस, गेम के उपयोगकर्ता अनुभव का एक अहम हिस्सा है. रेंडरिंग की परफ़ॉर्मेंस इन दो इनपुट पर निर्भर करती है:

  • फ़्रेम रेट: फ़्रेम कितनी बार बनाया जाता है.
  • ग्राफ़िकल क्वालिटी सेटिंग: फ़िडेलिटी का वह लेवल जिस पर कोई फ़्रेम दिखाया जाता है. इसमें सिमुलेशन फ़िडेलिटी के साथ-साथ ग्राफ़िक्स भी शामिल हैं.

गेम के लिए, रेंडरिंग की अच्छी परफ़ॉर्मेंस का मतलब यह है:

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

Android फ़्रेम पेसिंग लाइब्रेरी, फ़्रेम रेंडर होने में लगने वाले समय में होने वाले बदलाव को काफ़ी हद तक कम कर देती है. इससे गेम के लिए, फ़्रेम रेट स्थिर रहता है. फ़्रेम रेंडर होने में लगने वाले समय में बाकी अंतर, गेमप्ले के दौरान कुछ सीन में दिखाई गई बारीकियों और डिवाइस की ग्राफ़िकल क्षमताओं की वजह से होता है. Android Performance Tuner का इस्तेमाल करके, गेमप्ले के दौरान उन समयों का पता लगाया जा सकता है जब फ़्रेम टाइम, टारगेट फ़्रेम टाइम से कम या ज़्यादा होता है. साथ ही, इन समस्याओं और अवसरों को इनसे जोड़ा जा सकता है:

  • क्वालिटी की खास सेटिंग
  • आपके गेम के खास सीन
  • डिवाइस के मॉडल या डिवाइस की खास जानकारी

डेटा रिकॉर्ड और अपलोड करना

Tuning Fork लाइब्रेरी, अपने किसी एक टिक फ़ंक्शन पर निर्भर करती है. इस फ़ंक्शन को Android Frame Pacing लाइब्रेरी हर फ़्रेम के लिए कॉल करती है. इसके अलावा, Unity के पुराने वर्शन के लिए Unity इंजन भी इस फ़ंक्शन को कॉल करता है. Unity के इन वर्शन में, Frame Pacing Library मौजूद नहीं होती है. लाइब्रेरी में, इस टिक की जानकारी को हिस्टोग्राम में इकट्ठा किया जाता है. इसके बाद, इन्हें समय-समय पर एचटीटीपी एंडपॉइंट के ज़रिए Google Play पर अपलोड किया जाता है. हर टिक को इंस्ट्रुमेंट की और एनोटेशन से जुड़ा हुआ रिकॉर्ड किया जाता है. Unity प्लगिन का इस्तेमाल करके एनोटेशन तय किए जाते हैं.

इंस्ट्रुमेंट की

इंस्ट्रूमेंट की से पता चलता है कि फ़्रेम में टिक कहां से आता है. यह एक पूर्णांक होता है, जिसे हर टिक फ़ंक्शन कॉल में पास करना ज़रूरी होता है. यह काम, Unity प्लगिन अपने-आप करता है. अगर आपके गेम के लिए Unity की सेटिंग में, ऑप्टिमाइज़ किए गए फ़्रेम पेसिंग का विकल्प चालू है (यह Unity के 2019.3.14 या इसके बाद वाले वर्शन में उपलब्ध है), तो Android Performance Tuner, बेहतर मेट्रिक की रिपोर्ट देने के लिए, Android फ़्रेम पेसिंग लाइब्रेरी से मिली जानकारी का इस्तेमाल करेगा.

एनोटेशन

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

  • गेम का मौजूदा लेवल
  • कोई सीन लोड हो रहा है
  • स्क्रीन पर "बिग बॉस" दिख रहा है
  • गेम की स्थिति के बारे में कोई अन्य काम की जानकारी

एनोटेशन, Unity प्लगिन के ज़रिए उपलब्ध कराए गए डायलॉग में तय किए जाते हैं.

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

फ़िडेलिटी के पैरामीटर

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

मेमोरी और सीपीयू का ओवरहेड

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

सबमिट करने की प्रोसेस अलग थ्रेड पर होती है और यह टिक कॉल को ब्लॉक नहीं करती. अगर अपलोड करने के लिए कोई कनेक्शन उपलब्ध नहीं है, तो सबमिट किए गए डेटा को बाद में अपलोड करने के लिए लाइन में लगा दिया जाता है.

टिक फ़ंक्शन को कॉल करने में बहुत कम प्रोसेसिंग ओवरहेड होता है: यह सिर्फ़ हिस्टोग्राम बकेट के ऐरे में इंडेक्स की गिनती करता है और पूर्णांक की गिनती को बढ़ाता है.

वेब अनुरोध

लाइब्रेरी, सर्वर एंडपॉइंट को दो तरह के अनुरोध भेजती है:

  • शुरू करने के समय generateTuningParameters का अनुरोध
  • गेमप्ले के दौरान समय-समय पर, सर्वर को डेटा भेजने के लिए uploadTelemetry अनुरोध किया जाता है

ऑफ़लाइन प्लेयर

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

ज़रूरी शर्तें

अपने गेम में प्लगिन का इस्तेमाल करने के लिए, Unity के साथ काम करने वाला वर्शन इस्तेमाल करें:

  • Unity 2017.4 या इसके बाद का वर्शन और .NET 4.6 वर्शन
  • APK एक्सपैंशन फ़ाइलों का इस्तेमाल करने के लिए, Unity 2018.2 की ज़रूरत होती है
  • बेहतर फ़्रेम पेसिंग और जीपीयू मेज़रमेंट के लिए, Unity का 2019.3.14 या इसके बाद का वर्शन ज़रूरी है
  • Addressables सीन के साथ काम करने के लिए, Unity 2019.3 या इसके बाद का वर्शन और Addressables पैकेज 1.19.4 या इसके बाद का वर्शन ज़रूरी है.

Android Performance Tuner को Unity में इंटिग्रेट करना

Android Performance Tuner को Unity में इंटिग्रेट करने के बारे में जानकारी के लिए, एपीआई चालू करना लेख पढ़ें.