"स्प्राइट बैचिंग?" की तकनीकी परिभाषा क्या है?


17

प्लेटफ़ॉर्म और भाषा अज्ञेय, स्प्राइट बैचिंग को कैसे परिभाषित किया गया है? ऐसा लगता है जैसे कि ड्राइंग करते समय काम की मात्रा को कम करने के लिए कई अलग-अलग तकनीकें हैं, और यह कि उन्हें अक्सर "बैचिंग" से लुभाया जाता है। यह मेरे लिए होता है कि कोई वास्तविक उत्तर नहीं हो सकता है, लेकिन शायद यहां किसी ने कुछ ऐसा पाया है जो मैंने नहीं किया है।

जवाबों:


14

तकनीकी रूप से, "बैचिंग" कई क्रियाकलापों और उनके डेटा को एक डेटा संरचना में डाल रहा है ताकि यह सभी अलग-अलग की बजाय एक ही बार में निष्पादित हो सके।

आधुनिक जीपीयू की सबसे बड़ी अड़चन उनकी कार्य शक्ति नहीं है, बल्कि सीपीयू और जीपीयू पर चल रहे आपके खेल के बीच संचार है। GPU में भेजे गए डेटा के प्रत्येक पैकेज में एक ओवरहेड होता है, लेकिन एक छोटे पैकेज का ओवरहेड एक बड़े पैकेज जितना बड़ा होता है, इसलिए यह एक बड़ा लाभ होता है जब आप एक बड़ा पैकेज भेजते हैं बल्कि सौ छोटे होते हैं। और यही तो बैचिंग है; उन सभी छोटे लोगों में से एक बड़ा पैकेज बनाना।

विशेष रूप से स्प्राइट प्रति डेटा की हास्यास्पद छोटी मात्रा के कारण बैचिंग स्प्राइट्स के लिए विशेष रूप से उपयोगी है; चार कोने और चार टेक्स कोर्ड्स। तो छोटे पैकेज का ओवरहेड आनुपातिक रूप से बड़ा है।


1
विलंबता समस्या का उल्लेख करने के लिए +1; यह वही सिद्धांत है जो नेटवर्क ट्रैफ़िक और डिस्क I / O पर भी लागू होता है - सामान्य मामले में, बहुत कम बड़े बैच बहुत सारे छोटे बैचों को रौंद देते हैं।
मैक्सिमस मिनिमस

9

स्प्राइट बैचिंग एकल ड्रा कॉल के साथ कई स्प्राइट्स को जीपीयू में जमा करने की विधि है।

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

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

यदि आप स्प्राइट एटलस का उपयोग करते हैं और फिर अपने सभी स्प्राइट क्वाड्स में एक एकल वीबीओ बनाते हैं, तो उस डेटा के साथ एक सिंगल ड्रा अनुरोध करें, आपको गारंटी दी जाती है कि हार्डवेयर पूरी तरह से उपयोग किया गया है और आपके सभी स्प्राइट समानांतर में रेंडर किए गए हैं।

स्प्राइट बैचिंग तब बहुत काम कर रही है: एक सिंगल वीबीओ में सिंगल स्प्रैड्स का उपयोग करके अपने बहुत से स्प्राइट्स को डालना जो कि एक सिंगल ड्रॉ कॉल के साथ जीपीयू में सबमिट किए जाते हैं, जीपीयू का अधिकतम उपयोग करते हैं।

बैचिंग करने के अन्य तरीके हैं (जैसे हार्डवेयर इंस्ट्रूमेंटिंग, ज्योमेट्री शेड्स का उपयोग करना, आदि), और ऐसा करने के लिए अन्य लाभ, लेकिन इसका सार यह है कि बैचिंग का अर्थ है प्रति ड्रा कॉल में कई ऑब्जेक्ट्स को ड्रॉ करना।


-1: राज्य के बदलावों को कम करना बैचिंग का "बिंदु" नहीं है। यह सिर्फ एक आवश्यकता है जिस तरह से OpenGL संरचित है। (यह बुनावट एटलायस का बिंदु है, लेकिन उन लोगों के लिए नहीं पूछा गया था।) प्रश्न "प्लेटफ़ॉर्म और भाषा के लिए agnostically" परिभाषा को निर्दिष्ट करता है।
एपीआई-जानवर

तो एक बैकबफ़र के लिए सब कुछ ड्राइंग करने की विधि पहले इस समस्या को हल करती है कैसे? क्या स्मृति में एकल छवि के लिए डेटा को अभी भी एक में हेरफेर नहीं किया जा रहा है, और फिर सामने बफर पर धकेल दिया गया है? मुझे लगता है कि मेरी समझ थोड़ी त्रुटिपूर्ण होनी चाहिए।
15

4
मिस्टर बीस्ट: इसका ओपनगैल या किसी भी प्लेटफॉर्म या भाषा से कोई लेना-देना नहीं है। यह है कि किसी भी भाषा का उपयोग करने वाले सभी प्लेटफार्मों और सभी ग्राफिक्स एपीआई पर वास्तव में बहुत ही हार्डवेयर कैसे काम करता है।
सीन मिडलिचच जूल 26'12

6

यह एक कसकर परिभाषित तकनीकी शब्द नहीं है। बैचिंग मूल रूप से कोई भी प्रणाली है जहां आप व्यक्तिगत रूप से एक सेट के रूप में कई ऑपरेशन करते हैं, और अक्सर ऐसा किया जाता है क्योंकि ऐसा करना अधिक कुशल होता है। दक्षता लाभ आमतौर पर ऑपरेशन के लिए आवश्यक संदर्भ के कुछ या सभी को फिर से उपयोग करने में सक्षम होता है।

तो, स्प्राइट बैचिंग सिर्फ एक प्रणाली है जो आपको एक साथ कई स्प्राइट्स खींचने देती है और उम्मीद है कि इससे कुछ दक्षता हासिल होगी। आमतौर पर लाभ यह है कि आपका स्प्राइट बैच सभी एक ही बनावट का उपयोग कर रहा है, इसलिए आप बिना बनावट बदले ही बैच के सभी स्प्राइट्स को आकर्षित कर सकते हैं, जो एक अपेक्षाकृत धीमा ऑपरेशन है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.