प्रति सेकंड तख्ते कैपिंग के क्या लाभ हैं? (यदि कोई)


13

मैं ओपनएलजीएल में एक सरल गेम पर काम कर रहा हूं, प्रदर्शन आरंभीकरण और इनपुट के लिए एसडीएल का उपयोग कर रहा हूं, और यह समय के संदर्भ में प्रकट होता है मेरे पास मेरे लिए दो विकल्प उपलब्ध हैं। नंबर 1 सिर्फ इष्टतम समय के लिए सो रहा है ।PerFrame - theTimeTakenToRender, जब सबसे इष्टतम समय = 1 / -FamerateCap मेंPerFrame। (यदि यह आवश्यक है, तो मुझे पूरी तरह से यकीन नहीं है, क्योंकि यह vsync का उपयोग करने के बराबर है, जो अधिक सटीक हो सकता है। अगर मेरी धारणा सही है, तो कृपया मुझे बताएं wheter या नहीं SDL + OpenGL डिफ़ॉल्ट रूप से vsync है, और यदि नहीं तो कैसे इसे सक्षम करने के लिए।) दूसरा समय मापने के लिए है क्योंकि अंतिम फ्रेम प्रदान किया गया था, और केवल तदनुसार आंदोलन को समायोजित करें। (किसी फ्रेम को रेंडर करने में जितना कम समय लगता है, उस फ्रेम में उतनी ही कम एंटिटी चलती हैं)। प्रदर्शन, और घटती झिलमिलाहट आदि के संदर्भ में, इन दो तरीकों के फायदे और नुकसान क्या हैं?

जवाबों:


15

यदि आपके फ्रेम का समय अप्रत्याशित है (यह आपकी गलती है या नहीं, तो ओएस कभी-कभार संसाधनों का उपयोग कर सकता है, आदि), एक पूर्वानुमानित फ्रेम दर पर कैपिंग करना जो आपके प्राप्य फ्रैमरेट की तुलना में कुछ हद तक कम है , पूर्वानुमानित विलंबता के लिए बहुत कुछ करेगा , जो कर सकता है खेल को काफी बेहतर महसूस करते हैं।

जब आप इनपुट की प्रक्रिया करते हैं और उस इनपुट से संबंधित परिवर्तनों को प्रस्तुत करते हैं, तब तक कितना बुरा लग सकता है - भले ही आप दोनों के बीच कम विलंबता प्राप्त कर रहे हों , लेकिन "घबराना" मनुष्यों के लिए ध्यान देने योग्य हो सकता है (होशपूर्वक या अनजाने में)।

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

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


1
(वैसे, मैं अत्यधिक "नींद" के माध्यम से कैपिंग नहीं करने की सलाह देता हूं; यह पता लगाएं कि आपके प्लेटफॉर्म पर आपकी vsync स्थिति क्या है और आपको ड्राइव करने के लिए vsync का उपयोग करें। यह बहुत अधिक अनुमानित है और आमतौर पर कम संसाधनों का उपयोग करता है।)
leander

धन्यवाद, मैं निश्चित रूप से फ्रैमर्ट कैप करने की कोशिश करूंगा। क्या आप जानते हैं कि SDL का उपयोग करके vsync को कैसे सक्षम किया जाए?
w4etwetewtwet

1
SDL 2.0 में, आप SDL_RENDERER_PRESENTVSYNC को SDL_CreateRenderer फ्लैग पास करके vsync को सक्षम कर सकते हैं, जैसेSDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
TJS

12

आप बहुत कम सीपीयू (मल्टी टास्कर्स आपको धन्यवाद देंगे) का उपयोग करके समाप्त हो जाएंगे और मोबाइल उपकरणों पर लोग इसे भी सराहेंगे।


4
कम बिजली के उपयोग (मोबाइल उपकरणों / लैपटॉप के लिए महत्वपूर्ण), और कम गर्मी पीढ़ी का उल्लेख नहीं करना चाहिए।
zeel

यह मुझे कुछ गेम इश्यू की याद दिलाता है, जब मेनू में एफपीएस असीमित और अत्यधिक उच्च था, समान रूप से 900fps, और यह वास्तव में सीपीयू / जीपीयू -> उच्च अस्थायी -> अधिक शोर पर जोर दिया।
क्रॉस्टर

10

आपको कभी भी, कभी भी, कभी भी, कभी भी, फ्रैमरेट को नियंत्रित करने के लिए नींद का उपयोग करना चाहिए

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

मैं यह नहीं कह रहा हूं कि यदि आप कुछ नहीं कर रहे हैं तो सीपीयू की पैदावार करना एक बुरी बात है; इससे दूर। लेकिन यह फ्रैमरेट को नियंत्रित करने के समान नहीं है और नींद एक ऐसा समाधान है जो पूर्व के लिए उपयुक्त है, लेकिन बाद के लिए नहीं।

इसके बजाय समय बीतने की जाँच करें, और यदि यह एक फ्रेम चलाने का समय है, तो ऐसा करें, अन्यथा - और यदि आप कुछ सीपीयू का उत्पादन करना चाहते हैं - नंगे न्यूनतम समय के लिए सोएं - 1 मिलीसेकंड। यह भी सुनिश्चित करें कि आपके स्लीप टाइमर को आपके प्लेटफ़ॉर्म के लिए उचित रूप से सेट किया गया है ताकि आपको अच्छा रिज़ॉल्यूशन दिया जा सके; यानी कि जब आप यह कहते हैं कि "स्लीप (1)" कॉल आपको वास्तव में 1 मिलीसेकंड के लिए वास्तव में स्लीपिंग का मौका देता है, बजाय 15, 20 या 30 जैसी चीज़ के (जो कि अन्यथा होगा)। मुझे विश्वास है कि एसडीएल आपके लिए यह स्वचालित रूप से करेगा।

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

यह देखने में ऐसा लगता है कि स्लीप (1) कॉल का एक पूरा गुच्छा कभी-कभार फ्रेम के साथ मिला है, और यह ठीक है। जब आपको इसकी आवश्यकता नहीं है, तब भी आप सीपीयू छोड़ रहे हैं, लेकिन आपके फ्रेम अभी भी समय पर चलने में सक्षम होंगे।


1

संभवतः कैपिंग फ्रेम दर का सबसे महत्वपूर्ण लाभ यह है कि यह मशीन को शाब्दिक शारीरिक क्षति को रोकने में मदद कर सकता है। वे Starcraft II पर ऐसा करना भूल गए, जो कुछ उपयोगकर्ताओं के लिए बहुत समस्याग्रस्त (और महंगा) निकला जब तक कि उन्होंने इसे पैच नहीं किया।


0

जैसा कि पहले उल्लेख किया गया था, यह CPU उपयोग को कम करता है। फ़्लिपसाइड पर, और तेजी से महत्वपूर्ण, वह भी बैटरी जीवन को नालती है। एक अच्छे उदाहरण के रूप में, FTL मेरे MBA पर लगभग 100% CPU पर चलता है। नतीजतन, यह बैटरी को 2 घंटे में निष्क्रिय कर देता है और बहुत गर्म चलता है। (अधिक प्रत्यक्ष परिणाम के रूप में, मैंने अनइंस्टॉल किया और अब इसे नहीं खेलता ...)। एक फ़्रेम कैप ने इसे रोका होगा।

एक अन्य अप्रत्यक्ष लाभ यह है कि अगर इसका मल्टीप्लेयर गेम है, तो आप सभी को समान अनुभव देकर खेल का स्तर भी तय करते हैं।


आपके फ़्रैमरेट और गेम अपडेट लूप को समान गति से नहीं चलना है, इसलिए लोगों को एक ही अनुभव देना अकेले फ्रैमरेट पर निर्भर नहीं करता है।
थॉमस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.