क्या एक विस्तृत बनावट को प्रस्तुत करने में अधिक समय लगता है?


22

मान लीजिए कि मैं एक वर्ग प्रस्तुत करना चाहता हूं; इसकी बनावट "चौकोर है।"

क्या कंप्यूटर के लिए इसे प्रस्तुत करना आसान है अगर बनावट सिर्फ एक सादे रंग है?

और क्या होगा अगर यह पूरी तरह से यादृच्छिक रंगों के साथ एक बहुत शोर बनावट है यहां और वहां?

या क्या होगा अगर वह बनावट इस अर्थ में शोर है कि इसमें प्रत्येक पिक्सेल एक से दूसरे में अलग है, लेकिन केवल एक छोटे से बिट द्वारा?

जवाबों:


39

खेल के विकास में और विशेष रूप से खेल ग्राफिक्स की अधिकांश चीजों की तरह, इसका जवाब "यह निर्भर करता है"

बनावट का आकार

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

Mipmapping के उपयोग से इस के प्रभाव को कम किया जा सकता है। Mipmaps के साथ, हम बनावट के डाउनसाइज़ किए गए संस्करणों की एक श्रृंखला को संग्रहीत करते हैं, जो पहले लगता है जैसे आसपास और भी अधिक स्मृति। लेकिन यह हमें छोटे संस्करणों से पढ़ने की सुविधा देता है जब स्क्रीन पर एक छोटे आकार में बनावट प्रदर्शित की जाती है (परिप्रेक्ष्य में दूर की वस्तु की तरह), इसलिए हमारे नमूने बनावट कैश का बेहतर उपयोग करते हैं, बजाय सभी कूदने के। यह अलियासिंग को भी कम करता है।

बनावट की जानकारी

आपके बनावट की सामग्री का अधिकांश समय दक्षता प्रदान करने पर कोई प्रभाव नहीं पड़ता है।

जहां तक ​​जीपीयू का संबंध है, रंग केवल संख्याओं का एक गुच्छा है, इसलिए यह परवाह नहीं करता है कि वे संख्याएं क्या हैं, यह सिर्फ अपने गणित के माध्यम से उन्हें उसी तरह से फ़नल करता है। यह कुछ भी कल्पना नहीं करता है जैसे "ओह, मैंने पहले इस हरे रंग में एक पिक्सेल देखा है, मैं उसी आउटपुट को फिर से उपयोग करूँगा जो मैंने पिछली बार इस इनपुट को देखा था" तो क्या आपकी बनावट सभी एक रंग की है या यादृच्छिक स्पार्कल्स, आपका GPU समान कार्य कर रहा है।

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

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

शेडर ब्रांचिंग और इनडायरेक्शन

यहां स्थिति में सबसे बड़ा तारांकन है: आप एक if()शाखा की तरह, निर्णय लेने के लिए इस बनावट के रंग इनपुट का उपयोग कर सकते हैं । यहाँ, विस्तार गति के लिए मायने रखता है।

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

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

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


तो, कुल मिलाकर: नहीं, बनावट की सामग्री को गति प्रदान करने पर बहुत अधिक प्रभाव नहीं पड़ता है, सिवाय इसके मामलों के लिए। ;)


कम-रेस्चर्स के बारे में सोचें (Minecraft) कैश में आसन्न पिक्सल के लिए टेक्सल्स को लोड करने की अधिक संभावना होगी जब किसी विशेष टेक्सल को कैश में लोड किया जाता है, है ना?
user253751

6
@ मिनीबिस माइनक्राफ्ट में छोटे बनावट होते हैं। डिफ़ॉल्ट सिर्फ 16x16 है, जो प्रत्येक कोर के बनावट कैश में इतनी आसानी से फिट बैठता है कि यह भी मज़ेदार नहीं है: डी और हाँ, अधिकांश बनावट के नमूने एक ही टेक्सल के होंगे, जब तक कि आप ब्लॉक से बहुत दूर नहीं होते। यह विशेष रूप से सच है अगर आप स्क्रीन उपखंड को ध्यान में रखते हैं - यदि आप यथोचित करीब हैं, तो दिए गए कोर के लिए पूरा बैच एक ही टेक्सल के लिए मैप कर सकता है: डीए सरल जीपीयू शायद इस तरह के कम-परिभाषा बनावट के लिए बेहतर काम करेगा - मुझे संदेह है बहुत सारे प्रयास अनुकूलन पर बर्बाद हो जाते हैं जो Minecraft के लिए कुछ भी मदद नहीं करते हैं।
लुआॅन

1
साइड नोट: "पिक्सेल प्रति बाइट्स की समान संख्या का उपयोग करता है" वास्तव में कुछ गति हैक की कुंजी है जो ग्राफिक्स कोड का उपयोग करता है। यदि आप पीएनजी को आंतरिक रूप से उपयोग करने का प्रयास कर रहे थे, या यूटीएफ -8 जैसा कुछ भी एक चर पिक्सेल आकार के साथ, nवें पिक्सेल पर जाने के लिए, आपको इससे पहले हर एक पिक्सेल से गुजरना होगा। एक निरंतर पिक्सेल बाइट चौड़ाई के साथ, यह बस है start_of_buffer + width * n, जो कि बहुत तेज़ है, विशेष रूप से बड़े के लिए n
निधि मोनिका का मुकदमा

@ Luaan मेरा मतलब है कि जब आप ब्लॉक से बहुत दूर होते हैं, तब भी जब यह एक टेक्सल (जो भी पहले हो) प्राप्त करता है, इसे कुछ आसन्न लोगों को कैश में खींचना चाहिए।
user253751

4
यही वह मामला है जिसके बारे में मैं ऊपर बात करता हूं। हमारे नमूनों को टेक्सटाइल के चारों ओर छोड़ देने से बचने के लिए बड़े अंतरालों को छोड़ कर बिना किसी कैश के पुन: उपयोग के बीच, हम 512x512 संस्करण और 256x256 संस्करण और .... कभी-कभी 1x1 तक सभी तरह से स्टोर करते हैं। इसलिए जब 16x16 में 1024x1024 की बनावट खींचते हैं, तो अधिकांश गेम वास्तव में 16x16 मील से पढ़ रहे होंगे, और यह कैश दक्षता के मामले में 16x16 Minecraft के मामले के समान है। यह स्पार्कली एलियासिंग कलाकृतियों को डाउनसम्पलिंग से भी कम करता है।
DMGregory

1

ऊपर DMGregory के उत्कृष्ट उत्तर के साथ , शायद, एक मामला है जहां "बनावट" की जटिलता प्रतिपादन प्रदर्शन को प्रभावित कर सकती है और वह यह है कि पिछले रेंडर के परिणाम को बाद में एक स्रोत के रूप में उपयोग किया जाता है, जैसे छाया नक्शे / प्रतिबिंब / पर्यावरण मानचित्र।

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

डेटा जितना सरल होगा, यह गहराई या रंग (पूर्णांक या फ्लोटिंग-पॉइंट) होगा, ये योजनाएं बेहतर होंगी। बेशक, मैं बेहतर ढंग से कार्य करने के लिए जानबूझकर आपके रेंडरिंग आउटपुट को सरल बनाने का सुझाव नहीं दूंगा, लेकिन शोर डेटा का उपयोग करने से बचने से कुछ परिस्थितियों में मदद मिल सकती है।

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

आगे आपको ये दो एसई कंप्यूटर ग्राफिक्स सवाल और ब्याज के जवाब मिल सकते हैं:

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