GPU पर एक बनावट कितनी मेमोरी लेती है?


9

डिस्क पर एक बड़ा png केवल एक जोड़े मेगाबाइट ले सकता है, लेकिन मुझे लगता है कि gpu पर एक ही png एक असम्पीडित प्रारूप में संग्रहीत होता है जो बहुत अधिक स्थान लेता है। क्या ये सच है? अगर यह सच है, कितना स्थान है?

जवाबों:


16

JPG और PNG फाइलें लगभग हमेशा मेमोरी की तुलना में ऑन-डिस्क में छोटी होंगी; कच्चे आरजीबी डेटा प्राप्त करने के लिए उन्हें उड़ान भरने के लिए विघटित होने की आवश्यकता होती है, इस प्रकार लोडिंग के लिए अधिक प्रोसेसिंग पावर और बाद में अधिक रैम की आवश्यकता होती है। इतने सारे आधुनिक इंजन डिस्क पर एक ही प्रारूप को संग्रहीत करने का विकल्प चुनते हैं जैसा कि वे मेमोरी में करते हैं, जो उन फाइलों की ओर जाता है जो बनावट की मेमोरी आवश्यकताओं के समान आकार (लेकिन यह भी एक पीएनजी या जेपीजी से बड़ा है)। RGB / RGBA और S3TC / DXTn / BCn सबसे व्यापक रूप से उपयोग किए जाने वाले प्रारूप हैं, क्योंकि इन्हें बिना किसी प्रोसेसिंग के सीधे मेमोरी में पढ़ा जाता है (DXT टेक्सचर precompressed हैं)।

तो, ये विभिन्न सामान्य बनावट प्रारूपों के लिए आकार हैं:

  • एल (luminance, उदाहरण के लिए greyscale): चौड़ाई * ऊंचाई * 1 बाइट।
  • ला (प्रकाश और अल्फा, फोंट के लिए आम): चौड़ाई * ऊंचाई * 2 बाइट्स।
  • आरजीबी (रंग, कोई अल्फा): चौड़ाई * ऊंचाई * 3 बाइट्स।
  • RGBA (अल्फा के साथ रंग): चौड़ाई * ऊंचाई * 4 बाइट्स।
  • DXT1 / BC1 (रंग, बाइनरी अल्फा): (चौड़ाई * ऊंचाई * 4 बाइट्स) / 8 (8: 1 संपीड़न अनुपात)।
  • DXT3 / BC2 (रंग, तेज अल्फा) / DXT5 / BC3 (रंग, ढाल अल्फा): (चौड़ाई * ऊंचाई * 4 बाइट्स) / 4 (4: 1 संपीड़न अनुपात)।

यदि आप एक छवि का उपयोग mipmaps के साथ करते हैं , तो बनावट को 4/3 के रूप में अधिक मेमोरी की आवश्यकता होगी। इसके अतिरिक्त, बनावट की चौड़ाई और ऊंचाई को आंतरिक रूप से पुराने या कम सक्षम हार्डवेयर पर दो की शक्ति और कुछ बहुत ही सीमित हार्डवेयर पर भी एक वर्ग होने के लिए मजबूर किया जा सकता है।

DXT पर अधिक जानकारी: यह एक हानिपूर्ण संपीड़न है; इसका मतलब है, बनावट को संपीड़ित करते समय कुछ रंग डेटा खो जाता है। यह आपकी बनावट पर नकारात्मक प्रभाव डालता है, तेज सीमाओं को विकृत करता है और ग्रेडिएंट पर "ब्लॉक" बनाता है; लेकिन लाभ नुकसान से बहुत बेहतर हैं (यदि आपके पास एक बनावट है जो कि डीएक्सटी में बुरी तरह से खराब दिखती है, तो बस इसे असम्पीडित रखें, दूसरे लोग आकार के नुकसान के लिए बनाएंगे)। इसके अलावा, चूंकि पिक्सेल निश्चित आकार के ब्लॉक से संकुचित होते हैं, इसलिए बनावट की चौड़ाई और ऊंचाई चार से अधिक होनी चाहिए।


यह आपके पहले वाक्य को छोड़कर सही है - डिस्क पर बनावट का प्रारूप किसी भी अत्यधिक संपीड़ित प्रारूप हो सकता है, और इसलिए यह डिस्क पर वही स्थान नहीं लेता है जितना वीआरएएम में डिस्क प्रारूप को छोड़कर मेमोरी फॉर्मेट के प्रत्यक्ष क्रमांकन हैं।

बेशक यह हो सकता है, लेकिन अवास्तविक इंजन, स्रोत, आदि के साथ निर्मित खेलों में उपयोग की गई संपत्तियों की जांच करें, वे आमतौर पर डिस्क पर संपीड़ित नहीं होते हैं, क्योंकि आजकल संसाधनों को असम्पीडित छोड़ने के लिए पर्याप्त डिस्क स्थान से अधिक है; और सहेजे गए स्थान को अतिरिक्त रैम और CPU समय के लिए प्रत्येक लोड पर फ़ाइलों को डिकम्प्रेस करने की आवश्यकता नहीं होती है।
r2d2rigo

1
मुझे लगता है कि आप इंजन से इंजन तक भिन्न होंगे। बड़े इंजनों में से कई - विशेष रूप से वे जो कंसोल पर काम करते हैं - एक डिस्क प्रारूप का उपयोग समान या मेमोरी प्रारूप के करीब होगा। लेकिन पीएनजी या जेपीईजी परिसंपत्तियों के साथ पीसी-केवल गेम शिपिंग को ढूंढना बहुत आसान है। यदि आपको किसी लोड के लिए डिस्क पर जाना है जो वैसे भी आपके समय पर हावी होने वाला है। इसके अलावा, माइक ने विशेष रूप से पीएनजी और जेपीईजी का उल्लेख डिस्क प्रारूप के रूप में किया है।

अधिकतर आरजीबी प्रारूपों को छोड़कर ज्यादातर सही रूप से वास्तव में GPU पर मौजूद नहीं होते हैं; देखें: opengl.org/wiki/Common_Mistakes#Texture_upload_and_pixel_reads
मैक्सिमस मिनिमस

9

जाहिर है: यह प्रारूप पर निर्भर करता है।

चलो 256 पिक्सेल 256 बनावट द्वारा 256 लेते हैं। यदि यह एक अल्फा चैनल ( ColorXNA में) के साथ 32-बिट असम्पीडित है, तो यह 256KB ( 256*256*4बाइट्स) लेता है ।

16-बिट प्रारूप (जैसे :)Bgr565 स्पष्ट रूप से आधा आकार होगा - 128KB

तब आप संपीड़ित स्वरूपों पर पहुंच जाते हैं। XNA में आपके पास DXT1, DXT3 और DXT5 ( S3 संपीड़न के रूप में भी जाना जाता है ) है। यह एक हानिपूर्ण संपीड़न प्रारूप है। यह भी एक ब्लॉक आधारित स्वरूप है - जिसका अर्थ है कि आप कर सकते हैं इसे से नमूना (क्योंकि आप जानते हैं जो ब्लॉक एक पिक्सेल में है)। यह तेज़ भी है, क्योंकि आप कम बैंडविड्थ का उपयोग करते हैं।

DXT1 का संपीड़न अनुपात 8: 1 है और DXT3 और DXT5 के लिए 4: 1 है।

तो 256x256 के एक DXT1 छवि है 32 केबी । और DXT3 या DXT5 64KB है

और फिर वहाँ mipmapping है । यदि इसे सक्षम किया जाता है, तो यह ग्राफिक्स मेमोरी में छवियों की एक श्रृंखला बनाता है जो प्रत्येक पिछले आकार का आधा होता है। तो हमारी 256x256 छवि के लिए: 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2, 1x1। मूल मानचित्रण के साथ एक बनावट मूल के आकार का लगभग 133% है।


4

अधिकांश जीपीयू केवल एक बहुत विशिष्ट संपीड़न प्रारूप पढ़ सकते हैं। जैसे। बीसी *, डीएक्सटी *, पीएनजी जैसे प्रारूप नहीं। तो हाँ, यह अधिकांश भाग के लिए सच है कि .png डिस्क की तुलना में वीडियो मेमोरी में अधिक स्थान लेगा।

बनावट को वीडियो मेमोरी और सिस्टम मेमोरी दोनों में संपीड़ित या असम्पीडित रखा जा सकता है।

असम्पीडित बनावट के लिए, अंगूठे का सामान्य नियम यह है कि यह वीडियो मेमोरी में उतना ही स्थान लेगा, जितना कि सिस्टम मेमोरी में असम्पीडित रूप में होता है।

DXT1 संकुचित बनावट के लिए। GPU आपकी बनावट में प्रत्येक 4x4 टाइल के लिए 8 बाइट्स संग्रहीत करता है। असम्पीडित डेटा (8-बिट्स पर आरजीबी चैनल) आमतौर पर 4x4x3 = 48 बाइट्स होगा, इसलिए यह 6: 1 का संपीड़न अनुपात है। DXT3 / DXT5 संपीड़ित बनावट के लिए, GPU आपकी बनावट में प्रत्येक 4x4 टाइल के लिए 16 बाइट्स संग्रहीत करता है। यह 3: 1 का थोड़ा कम संपीड़न अनुपात है।

दोनों असंपीड़ित और संपीड़ित बनावट के साथ कुछ चेतावनी हैं:

  • अधिकांश मेमोरी को एक निश्चित आकार के पन्नों में (जीपीयू के बीच भिन्न होता है) आवंटित किया जाता है। जैसे। 4KB और अक्सर जो उप-आवंटित नहीं होता है और अन्य gpu डेटा के साथ साझा किया जाता है। अर्थात। यदि आपकी बनावट पदचिह्न पृष्ठ आकार से छोटी है, तो vid मेम में पदचिह्न प्रायः पृष्ठ आकार के होंगे।

  • कुछ gpus में बहुत विशिष्ट संरेखण आवश्यकताएँ हैं। अतीत में, कुछ GPU की आवश्यकता थी कि बनावट आकार में 2 की शक्ति हो। बनावट से नमूना लेने के दौरान एक्सेस लोकलिटी को बेहतर बनाने के लिए अक्सर स्वैग्ड प्रतिनिधित्व (मॉर्टन ऑर्डरिंग: http://en.wikipedia.org/wiki/Z-order_(curve ) देखें । इसका मतलब था कि इन आवश्यकताओं को बनाए रखने के लिए विषम आकारों के बनावट को गद्देदार किया जाएगा (आमतौर पर यह पैडिंग ड्राइवर द्वारा नियंत्रित की जाती है)। जबकि मॉर्टन-ऑर्डर आधुनिक gpus में आवश्यक रूप से उपयोग नहीं किया गया है, वहाँ अभी भी gpu की विशिष्ट आवश्यकताओं का समर्थन करने के लिए फूला हुआ हो सकता है।

  • आपकी बनावट के कई प्रतिनिधित्व किसी भी समय स्मृति में मौजूद हो सकते हैं, खासकर यदि आप उन पर ताले का उपयोग कर रहे हैं। यह आपकी मेमोरी के उपयोग को तब तक के लिए ख़राब कर सकता है जब तक कि प्रतिनिधित्व gpu द्वारा उपयोग नहीं किया जाता है (जो कि आमतौर पर CPU रेंडरिंग के पीछे कुछ फ्रेम होते हैं)

  • यदि आप मिपमैपिंग को सक्षम करते हैं, तो अतिरिक्त mips औसतन बेस मिल स्तर के एक तिहाई के आसपास खपत करेंगे। YMMV उपरोक्त कैविटीज़ के आधार पर।


0

AFAIK यह चित्र चौड़ाई * ऊंचाई * BPP, स्वतंत्र है अगर यह PNG, JPG या BMP है। मुझे नहीं पता कि डीडीएस या अन्य कंप्रेसेबल फॉर्मेट कैसे बनाए जाते हैं।

एमआईपी-मैपिंग से वीडियो मेमोरी की आवश्यकता बढ़ जाएगी।

इस विषय में मेरा ज्ञान थोड़ा पुराना हो सकता है। मैंने थोड़ी देर पहले 3D छोड़ दिया है।


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

1
आमतौर पर "पिच" बाइट्स में एक स्कैनलाइन की लंबाई (फ़्रीटाइप और एसडीएल के रूप में) को संदर्भित करता है, और "स्ट्राइड" तत्वों के बीच की जगह को संदर्भित करता है, जो पिक्सेल या स्कैनलाइन (ओपनगेट और पायथन के तीसरे पक्ष के तर्क के रूप में) हो सकता है। छवि प्रसंस्करण करने के लिए दोनों मान आवश्यक हैं, लेकिन "आमतौर पर" पिच = चौड़ाई * बाइट्स_पर_पिक्सल और स्ट्राइड = 0. शब्द अक्सर ढीले और भ्रमित उपयोग किए जाते हैं, इसलिए अपनी पसंद के पुस्तकालय के लिए एपीआई डॉक्स की जांच करना सबसे अच्छा है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.