यह शायद अधिक से पूछा गया है और अधिक है, लेकिन मैं कुछ भी तो यहाँ इसे फिर से चला जाता है उपयोगी नहीं मिला ...ज्यामिति प्रवाह के लिए ट्यूनिंग ओपन प्रदर्शन
अपने आवेदन में मैं एक काफी बड़े जाल रेंडर करने के लिए की जरूरत है (एक कुछ मिलियन त्रिकोण या अधिक) और मुझे इसके बारे में सभ्य फ्रेम दर प्राप्त करने में कुछ समस्याएं आ रही हैं। सीपीयू काफी ज्यादा निष्क्रिय है इसलिए मैं निश्चित रूप से जीपीयू-बाध्य हूं। रिज़ॉल्यूशन को बदलने से प्रदर्शन प्रभावित नहीं होता है, इसलिए यह खंड नहीं है- या रास्टर-बाउंड।
जाल गतिशील (लेकिन स्थानीय रूप से स्थैतिक) है इसलिए मैं पूरी चीज़ को वीडियो कार्ड में संग्रहीत नहीं कर सकता और उसे एक कॉल के साथ प्रस्तुत नहीं कर सकता। आवेदन विशिष्ट कारणों से डेटा को पत्थरों में वोक्सल्स के साथ एक ऑक्टेट के रूप में संग्रहीत किया जाता है, इसका मतलब है कि मुझे मूल रूप से मुक्त रूप से निराशा होती है। कशेरुक डेटा में निर्देशांक, मानक और रंग होते हैं - कोई बनावट या शेडर्स का उपयोग नहीं किया जाता है।
मेरा पहला दृष्टिकोण केवल एक बड़े STREAM_DRAW
वीबीओ का उपयोग करके स्मृति से सबकुछ प्रस्तुत करना था, जो बहुत धीमी हो गई। मेरा प्रारंभिक विचार यह था कि मैं शायद बस को ओवरटाक्स कर रहा था (प्रति फ्रेम ~ 150 एमआईबी दबा रहा था), इसलिए मैंने एक कैशिंग योजना लागू की जो हाल ही में ग्राफिक्स कार्ड पर स्थिर वीबीओ में ऑब्जेक्ट प्रस्तुत करने के लिए इस्तेमाल की गई ज्यामिति को स्टोर करता है, प्रत्येक वीबीओ ने कुछ जोड़े कुछ एमआईबी मूल्य के डेटा के लिए 100 कीबी (वीबीओ प्रति अधिक भंडार करने से अधिक कैश थ्रैशिंग मिलती है, इसलिए यहां एक व्यापार बंद है)। नीचे दी गई तस्वीर एक उदाहरण है कि डेटा कैसा दिखता है, जहां सब कुछ रंगीन लाल कैश किए गए वीबीओ से खींचा जाता है।
Example of the rendered data http://gimaker.users.sourceforge.net/0010.png
नीचे दिए गए नंबरों रूप में, मैं नहीं प्रदर्शन में एक शानदार वृद्धि जब कैश का उपयोग कर दिख रहा है। लगभग 1 लाख त्रिकोण के एक पूरी तरह से स्थिर जाल के लिए मैं मिल निम्नलिखित फ्रेम दर:
-
कैशिंग के बिना
- : 1.95 हर्ट्ज
- कैशिंग का उपयोग कर शिखर सरणियों: 2.0 हर्ट्ज (> जाल के 75% कैश्ड है)
- कैशिंग
STATIC_DRAW
VBOs का उपयोग कर: 2.4 हर्ट्ज
तो मेरे सवालों का है कि कैसे मैं इस गति बढ़ाने के हो? आईई .:
- सभ्य प्रदर्शन प्राप्त करने के लिए अनुशंसित वर्टेक्स प्रारूप क्या है? मैं रंगों के लिए
GL_FLOAT
औरGL_UNSIGNED_BYTE
के रूप में स्थितियों और मानदंडों के साथ इंटरलीव्ड स्टोरेज का उपयोग करता हूं, जिसमें एक पैडिंग बाइट 4-बाइट संरेखण (28 बाइट्स/वर्टेक्स कुल) प्राप्त करने के लिए होता है। - चाहे मेरे सभी बक्से के लिए मानक के लिए एक ही बफर का उपयोग करने में सहायता हो सकती है (सभी बक्से धुरी-गठबंधन हैं इसलिए मैं एक सामान्य बफर आवंटित कर सकता हूं, जो कि सबसे बड़ा कैश प्रविष्टि का आकार आवंटित कर सकता है और उन सभी के लिए इसका उपयोग कर सकता है)।
- मुझे कैसे पता चलेगा कि पाइपलाइन का कौन सा हिस्सा बाधा है? मेरे पास एक शानदार वीडियो कार्ड नहीं है (इंटेल जीएम 9 65 ओपन सोर्स लिनक्स ड्राइवरों के साथ) इसलिए यह संभव है कि मैंने इसकी सीमा को मारा। मैं सामान्य हार्डवेयर (2-3 साल पुराने एकीकृत ग्राफिक्स, आधुनिक एकीकृत ग्राफिक्स, आधुनिक असतत ग्राफिक्स) से कितना थ्रूपुट उम्मीद कर सकता हूं?
- आप इस, नुकसान कैसे से निपटने के हैं पर कोई अन्य युक्ति, आदि
मैं LOD सुझाव दे जवाब में कोई दिलचस्पी नहीं हूँ (मैं पहले से ही इस परीक्षण किया), विक्रेता विशिष्ट सुझाव या बाद में कुछ भी से ओपन सुविधाओं का उपयोग 1.5 से अधिक
क्या आपके प्राइमेटिव केवल अक्ष-संरेखित बक्से में होते हैं? – Stringer
@ स्टिंगर बेल: हां (लेकिन विश्व अक्षों के साथ जरूरी नहीं है)। – Staffan
मुझे यकीन नहीं है लेकिन मुझे लगता है कि आपने ग्राफिक्स कार्ड सीमा को मारा है। मैंने थोड़ी सी गड़बड़ी की है और ऐसा लगता है कि इंटेल जीएम 9 65 के खेल के लिए espacially काफी कम प्रदर्शन है। (आपका खेल एक खेल नहीं है लेकिन हालांकि प्रस्तुत करने के लिए काफी "कठिन" लगता है)। एनवीडिया में एक सूची है कि उनके कार्ड कितने त्रिकोण/दूसरे-दूसरे को प्रस्तुत कर सकते हैं-शायद आप "सैद्धांतिक" सीमा को जानने के लिए इस सूची के साथ अपने कार्ड को वर्गीकृत कर सकते हैं। – InsertNickHere