यह विषय, किसी भी अनुकूलन समस्या के साथ, बहुत अधिक हिट हो जाता है, लेकिन मुझे वह नहीं मिला जो मुझे लगता है (मुझे लगता है)।ओपनजीएल निम्न-स्तरीय प्रदर्शन प्रश्न
बहुत सारे ट्यूटोरियल, और यहां तक कि SO प्रश्नों में समान युक्तियां हैं; आम तौर पर कवर:
- उपयोग जीएल चेहरे को मारने (ओपन समारोह, नहीं दृश्य तर्क)
- केवल 1 GPU (projectionModelView संयोजन) के लिए मैट्रिक्स भेजने के लिए, इसलिए मॉडल प्रति एक बार प्रति शिखर से एमवीपी गणना को कम करने (जैसा कि इसे होना चाहिए)।
- उपयोग interleaved कोने
- के रूप में कई के रूप में संभव जीएल कहता है, बैच को कम से कम जहां उपयुक्त हो
और संभवतः कुछ/कई अन्य। मैं (जिज्ञासा के कारण) कई वर्टेक्स बफर का उपयोग कर अपने आवेदन में 28 मिलियन त्रिकोण प्रस्तुत करता हूं। मैंने उपरोक्त सभी तकनीकों (मेरे ज्ञान के सर्वोत्तम) की कोशिश की है, और लगभग कोई प्रदर्शन परिवर्तन प्राप्त नहीं हुआ है।
जबकि मुझे अपने कार्यान्वयन में लगभग 40 एफपीएस प्राप्त हो रहा है, जो कि किसी भी तरह से समस्याग्रस्त नहीं है, मैं अभी भी उत्सुक हूं कि ये अनुकूलन 'टिप्स' वास्तव में उपयोग में आते हैं?
मेरा सीपीयू प्रतिपादन के दौरान 20-50% के आसपास आ रहा है, इसलिए मान लें मैं प्रदर्शन बढ़ाने के लिए जीपीयू बाध्य हूं।
नोट: मैं, पल
क्रॉस Game Development
बहुत अच्छा! धन्यवाद। –
बहुत अच्छा जवाब। एक प्रश्न हालांकि, 2 बिंदु के प्रति आपकी प्रतिक्रिया में, मैं थोड़ा उलझन में हूं। मैं शेडर के अंदर "मॉडल * प्रोजेक्शन * व्यू" रखने के बीच अंतर की तुलना कर रहा था (वर्दी चर के रूप में, मॉडल मॉडल प्रत्येक बार मॉडल परिवर्तन करता है); बनाम एक वर्दी मैट्रिक्स वैरिएबल (मॉडलव्यूप्रोजेक्शन) प्रति मॉडल अपडेट किया गया है, जिसे प्रति चरम के बजाय सीपीयू द्वारा गणना की जाती है (एक बार)। निश्चित रूप से यह कई गणनाओं को बचाएगा? – dcousens
@ डैनियल: आप आमतौर पर शेडर में एमवीपी मैट्रिक्स की गणना नहीं करते हैं। आप क्या करते हैं पहले गणना modelview_position = एमवी * vertex_position, और फिर clip_position = पी * modelview_position गणना कर रहा है। इसके पीछे तर्क यह है कि कुछ एल्गोरिदम के लिए आपको पूरी तरह से प्रोजेक्शन प्रक्रिया के अंतिम परिणाम न केवल मॉडलव्यू को परिवर्तित वर्टेक्स स्थिति की आवश्यकता होती है। इसके अलावा वर्टेक्स मानक केवल एमवी के व्यस्त हस्तांतरण द्वारा परिवर्तित होते हैं, पूर्ण एमवीपी^टी^-1 नहीं, इसलिए यह एक और कारण है: यदि आप अच्छी रोशनी को लागू करना चाहते हैं तो आपको उन परिवर्तनित मानदंडों की आवश्यकता है। – datenwolf