मटेरियल और शेडर

अपने Android गेम में मटीरियल और शेडर का इस्तेमाल ऑप्टिमाइज़ करने के लिए, इन सबसे सही तरीकों को अपनाएं.

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

इस लेख के कुछ हिस्से, Arm Limited के योगदान और कॉपीराइट पर आधारित हैं.

गेम इंजन के मोबाइल फ़्रेंडली शेडर

गेम इंजन, मटीरियल और शेडर को अलग-अलग तरीके से जोड़ते हैं. Unity इंजन कई शेडर बना सकता है, लेकिन हर मटीरियल को सिर्फ़ एक शेडर असाइन किया जा सकता है. Unreal Engine 4, टारगेट प्लैटफ़ॉर्म के आधार पर किसी मटीरियल पर अलग-अलग शेडर लागू कर सकता है.

शेडर और मटीरियल की परिभाषा जानने के लिए, कलाकारों के लिए मटीरियल और शेडर इस्तेमाल करने के सबसे सही तरीके लेख पढ़ें.

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

Unity

Unity में कई रेंडरिंग इंजन शामिल होते हैं. आजकल के मोबाइल गेम के लिए, सबसे अच्छा विकल्प यूनिवर्सल रेंडर पाइपलाइन (यूआरपी) है. यूआरपी में, शेडर का एक स्टैंडर्ड सेट शामिल होता है. यह टारगेट प्लैटफ़ॉर्म के हिसाब से, अपने-आप स्केल होता है. लेगसी Unity रेंडरर में, मोबाइल प्लैटफ़ॉर्म के लिए डिज़ाइन किए गए शेडर का कलेक्शन शामिल होता है. इन शेडर को मोबाइल कैटगरी में ग्रुप किया गया है.

Unreal Engine 4

Unreal Engine, चुने गए टारगेट प्लैटफ़ॉर्म के हिसाब से मोबाइल शेडर चुनेगा. मोबाइल शेडर से मिलने वाला विज़ुअल आउटपुट, डिफ़ॉल्ट ShaderModel 5 शेडर से अलग हो सकता है. मोबाइल शेडर के रेंडरिंग आउटपुट का सिम्युलेशन करने के लिए, Unreal Editor में झलक दिखाने के रेंडरिंग लेवल को बदला जा सकता है. कुछ अंतरों के बावजूद, Unreal सभी प्लैटफ़ॉर्म पर मटीरियल के लिए एक ही प्रोसेस का इस्तेमाल करता है. इसलिए, मोबाइल शेडर में आम तौर पर डिफ़ॉल्ट शेडर की तरह ही विज़ुअल और व्यवहार होते हैं.

Unreal एडिटर में मोबाइल पर दिखने वाली झलक की रेंडरिंग सेट करना
पहली इमेज. Unreal Editor में मोबाइल प्रीव्यू रेंडरिंग सेट अप करना.

टेक्सचर सैंपलर को छोटा करें

मोबाइल डिवाइसों को टारगेट करने वाले गेम में, कम से कम टेक्सचर का इस्तेमाल किया जाना चाहिए. जोड़े गए हर टेक्सचर के लिए, टेक्सचर सैंपलिंग की ज़रूरत होती है. इससे मेमोरी बैंडविड्थ का इस्तेमाल होता है और बिजली की खपत बढ़ती है. Unreal Engine 4, मोबाइल डिवाइसों पर चलाने के लिए ज़्यादा से ज़्यादा पांच मटीरियल टेक्सचर इस्तेमाल करने का सुझाव देता है. पांच टेक्सचर सैंपलर का इस्तेमाल करने पर भी, कई डिवाइसों पर बड़े पैमाने पर इस्तेमाल करने के लिए, बहुत ज़्यादा खर्च करना पड़ सकता है. टेक्सचर सैंपलर की संख्या कम करने के लिए, ये रणनीतियां अपनाई जा सकती हैं:

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

जब मुमकिन हो, तब लाइटिंग बंद करें

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

रोशनी के साथ और रोशनी के बिना रेंडर किए गए मॉडल की तुलना
दूसरी इमेज. इस इमेज में, रीयल टाइम लाइटिंग के साथ (बाईं ओर) और रीयल टाइम लाइटिंग के बिना (दाईं ओर) रेंडर किए गए मॉडल का उदाहरण दिखाया गया है.

पारदर्शिता का इस्तेमाल कम से कम करें

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

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

Unity एडिटर में ओवरड्रॉ विज़ुअलाइज़ेशन टूल का उदाहरण
तीसरी इमेज. Unity एडिटर में ओवरड्रॉ विज़ुअलाइज़ेशन टूल का उदाहरण.
Unreal एडिटर में ओवरड्रॉ विज़ुअलाइज़ेशन टूल का उदाहरण
चौथी इमेज. Unreal एडिटर में ओवरड्रॉ विज़ुअलाइज़ेशन टूल का उदाहरण.

सही ऐल्फ़ा मेथड का इस्तेमाल करना

पारदर्शिता लागू करने के सबसे सामान्य तरीके, ऐल्फ़ा ब्लेंडिंग और ऐल्फ़ा टेस्टिंग हैं.

ऐल्फ़ा टेस्टिंग से, ऑब्जेक्ट का मटीरियल या तो 100% अपारदर्शी दिखेगा या 100% पारदर्शी. इस कटऑफ़ के लिए, ऐल्फ़ा वैल्यू थ्रेशोल्ड को कॉन्फ़िगर किया जा सकता है. Unity में इस तरह की पारदर्शिता को कटआउट कहा जाता है. Unreal Engine 4 में इसे Masked ब्लेंड मोड कहा जाता है.

अल्फ़ा ब्लेंडिंग की मदद से, ऑब्जेक्ट के मटीरियल को अलग-अलग लेवल पर पारदर्शी बनाया जा सकता है. इससे ऑब्जेक्ट कुछ हद तक पारदर्शी दिखता है. Unity इस तरह की पारदर्शिता को पारदर्शी कहता है. Unreal Engine 4 में इसे Translucent ब्लेंड मोड कहा जाता है.

ऐल्फ़ा ब्लेंडिंग और ऐल्फ़ा टेस्टिंग के बीच तुलना
पांचवीं इमेज. ऐल्फ़ा ब्लेंडिंग (बीच में) और ऐल्फ़ा टेस्टिंग (दाईं ओर) का इस्तेमाल करके रेंडर की गई इमेज (बाईं ओर) का उदाहरण.

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

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

प्रोफ़ाइल शेडर कॉम्प्लेक्सिटी

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

Unreal Engine 4 में Shader Complexity व्यू मोड शामिल है. यह आपके सीन में मौजूद ऑब्जेक्ट के लिए लागत का अनुमान लगाता है.

Unreal एडिटर में शेडर कॉम्प्लेक्सिटी व्यू मोड
छठी इमेज. Unreal एडिटर में शेडर कॉम्प्लेक्सिटी व्यू मोड.

मटेरियल बनाते समय, उनकी लागत का पता लगाने के लिए Unreal की Material Stats सुविधा का इस्तेमाल भी किया जा सकता है.

Unreal एडिटर में मटीरियल के आंकड़े दिखते हैं
सातवीं इमेज. मटेरियल के आंकड़े, Unreal एडिटर में दिखते हैं.

वर्टेक्स शेडर में कैलकुलेट करना

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

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

ज़्यादा जटिल गणितीय ऑपरेशनों से बचें

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

  • जोड़ना
  • घटाना
  • गुणा

ज़्यादा खर्च वाले ऑपरेशन में ये शामिल हैं:

  • डिवीज़न
  • ट्रांसेंडेंटल (sin, cos, power, log, tan)

प्रोफ़ाइल की परफ़ॉर्मेंस की जानकारी अक्सर अपडेट होती है

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