यूपीएस और एफपीएस - मुझे क्या करना चाहिए और क्यों सीमित करना चाहिए?


11

मैं वर्तमान में C ++ और SDL2 का उपयोग करके एक गेम लिख रहा हूं और एक चीज है जिसके बारे में मैं सोच रहा हूं - क्या यह मेरे फ्रेम प्रति सेकंड (एफपीएस) और / या मेरे अपडेट प्रति सेकंड (यूपीएस) को सीमित करने के लिए समझ में आता है?

मुझे यह विचार है कि यदि आप यूपीएस को सीमित करते हैं, तो आप अनिवार्य रूप से खेल की गति को नियंत्रित करते हैं - यदि खिलाड़ी प्रति अपडेट 1px चलता है और आप इसे हमेशा प्रति सेकंड 30 बार अपडेट करते हैं, तो वह 30px / s की गति से आगे बढ़ेगा और आप शायद सीपीयू से राहत मिलेगी क्योंकि गणना की मात्रा प्रति सेकंड घट जाती है। यदि आप एफपीएस को सीमित करते हैं, तो प्रति सेकंड ड्रॉक्लेस की मात्रा घट जाती है, इसलिए आप अपने जीपीयू को राहत देते हैं। मुझे आशा है कि मैं उस सब को सही ढंग से समझ पाया हूँ, यदि नहीं, तो मुझे ठीक करने के लिए स्वतंत्र महसूस करें।

मेरा सवाल है - मुझे अपने खेल में क्या सीमित करना चाहिए? एफपीएस? यूपीएस? दोनों? न तो? क्या इससे बेहतर कोई दूसरा तरीका है? अधिकांश खेलों में यह कैसे किया जाता है और क्यों?

जवाब बहुत सराहना की है!


2
वास्तव में एक उत्तर नहीं है, लेकिन आपको यह उपयोगी लग सकता है: gafferongames.com/game-physics/fix-your-timestep
Cypher

जवाबों:


10

हाँ, यह समझ में आता है।

जैसा कि आपने कहा था कि यह सिस्टम पर कम लोड करेगा, जो थर्मल और अन्य अनुप्रयोगों के लिए अच्छा है।

हालाँकि .... आपके खेल तर्क को प्रति सेकंड अपडेट पर निर्भर नहीं होना चाहिए। इसलिए मैं आपको deltatime पर एक नज़र डालने की सलाह देता हूं, जो आपके खेल को प्रति सेकंड अपडेट से स्वतंत्र कर देगा।

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

आशा है कि यह मदद की!


तो क्या मुझे दोनों या उनमें से केवल एक को सीमित करना चाहिए?
डॉककॉक

दोनों, लेकिन समायोजित करने के लिए सेटिंग्स में एक विकल्प जोड़ें।
करेज

5
सावधानी का एक शब्द: यदि आप एक भौतिकी इंजन का उपयोग करते हैं, तो डेल्टा समय / चर अद्यतन फ्रेम पर भरोसा करें क्योंकि ये शायद ही कभी समर्थित हैं; उन्हें निश्चित फ्रेम दृष्टिकोण की आवश्यकता होती है। और यदि आपका फ्रेम बहुत अधिक उतार-चढ़ाव करता है, तो इसका मतलब हो सकता है कि आपके पास आपके सॉफ़्टवेयर के साथ समस्याएँ हों और आश्चर्य होना चाहिए कि ऐसा क्यों होता है। इन्हें देखते हुए, आप डीटी दृष्टिकोण का उपयोग करके फिर से विचार कर सकते हैं।
Vaillancourt

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

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

6

सबसे अच्छा जवाब है: यह निर्भर करता है

आपको न तो किसी को सीमित करना होगा

अपडेट : यदि आपके अपडेट ऊपरी सीमा से बंधे नहीं हैं, तो गेम लॉजिक को एक डेल्टा समय राशि पर निर्भर होना चाहिए , जहां मशीन को चलाने के आधार पर गेम को तेज या धीमा चलाने से बचें। यह कई खेलों द्वारा उपयोग किया जाने वाला एक बहुत ही सामान्य तरीका है, लेकिन यह केवल एक ही नहीं है।

प्रतिपादन : यदि प्रतिपादन एक ऊपरी सीमा तक बाध्य नहीं है, तो फ्रेमबफ़र को अपूर्ण या गलत स्थिति में प्रस्तुत किया जा सकता है, जिससे कलाकृतियों को फाड़ दिया जा सकता है । यही कारण है कि कई खेल वर्टिकल सिंक्रोनाइज़ेशन (वी-सिंक) को नियोजित करते हैं

आप दोनों को सीमित कर सकते हैं

अपडेट : कुछ गेम कुछ या सभी गेमप्ले सिस्टम के लिए निश्चित टाइमस्टेप का उपयोग करते हैं। यह तरीका ठीक वैसे ही काम करता है जैसा आपने बताया है। अद्यतन प्रति सेकंड की संख्या ऊपरी सीमा तक सीमित है ताकि यह सुनिश्चित हो सके कि चीजें शीर्ष पायदान मशीन पर बहुत तेजी से नहीं चलती हैं। यह डेल्टा टाइमिंग की आवश्यकता को हटा देता है। कुछ एप्लिकेशन फिक्स्ड टाइमस्टेप्स के साथ बेहतर हैं, कुछ डेल्टा टाइमिंग के साथ। कौन सा दृष्टिकोण चुनना पूरी तरह से इस बात पर निर्भर करेगा कि आप वास्तव में क्या हासिल करना चाहते हैं। ऑनलाइन पुस्तक GameProgrammingPatterns में गेम लूप्स को समर्पित एक अध्याय है जो दोनों आर्किटेक्चर पर छूता है।

रेंडरिंग : फ़्रेम्स प्रति सेकंड फ़ॉर्वर्डिंग फाड़ की समस्या से बचने के लिए एक ऊपरी सीमा पर सेट किया जाना चाहिए, हालांकि, आपके एप्लिकेशन को मैन्युअल रूप से कुछ सीपीयू लॉक के साथ ऐसा करने का प्रयास नहीं करना चाहिए । इसके बजाय, वी-सिंक को सक्षम करें और अंडरलेइंग हार्डवेयर को मॉनिटर की ताज़ा दर के साथ सिंक्रनाइज़ करें। ऐसा करने से, आपका गेम भविष्य के मॉनिटर के साथ संगत होगा जो कि बहुत अधिक आवृत्ति पर काम कर सकता है जो वर्तमान में आम तौर पर 60Hz है। यह भी ध्यान देने योग्य है कि कई गेमर्स, विशेष रूप से बेंचमार्किंग में, उच्चतम उच्चतम फ्रेम दर की अनुमति देने के लिए अभी भी वी-सिंक के बिना चलना पसंद करते हैं। इसलिए रनटाइम के दौरान सुविधा को सक्षम या अक्षम करने की अनुमति देना समझदारी है।

आपको क्या सीमित नहीं करना चाहिए

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


हालांकि VSync सक्षम होने पर भी मेरे अपडेट अपने आप सीमित हो जाते हैं। इसलिए, मुझे स्पष्ट रूप से फाड़-समस्या और अद्यतन-मतदान-समस्या के बीच फैसला करना है, सही?
डोकोकॉक

@DocCoock, यदि आपका रेंडरर और गेम लॉजिक एक ही धागे पर चलता है, हाँ, v- सिंक को सक्षम करने से भी अपडेट फ़्रीक्वेंसी ठीक हो जाती है। यही कारण है कि कुछ खेल अलग-अलग धागों को प्रतिपादन और खेल-तर्क को अलग करते हैं।
ग्लैमर्ट

1

दो पोस्ट हैं जिन पर आप एक नज़र डाल सकते हैं:

अपने टाइमस्टेप को ठीक करें

प्रक्षेपित भौतिकी प्रतिपादन

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

आशा है ये मदद करेगा।

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