बिना प्रदर्शन खोए बौना किला इतने सारे संस्थानों पर नज़र कैसे रखता है?


79

बौने किले में आप एक ही समय में सैकड़ों बौने, जानवर, गोबलिन आदि रख सकते हैं, प्रत्येक अपने स्वयं के जटिल एआई और पाथफाइंडिंग रूटीन के साथ। मेरा सवाल यह है कि यह ध्यान देने योग्य मंदी का उत्पादन कैसे नहीं करता है? क्या प्रत्येक बौना अपने ही धागे में चलता है?


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

25
आपके पास एक जटिल सुरंग टोपोलॉजी और 100+ बौने होने के बाद यह बिल्कुल ध्यान देने योग्य मंदी पैदा करता है।
रसेल बोरोगोव

3
हां, मेरे अनुभव में डीएफ आपके द्वारा वर्णित परिदृश्य में अविश्वसनीय रूप से धीमा है।

4
एक प्राथमिक सीढ़ी को नष्ट करें और एक क्षण के लिए चट्टान की तरह अपनी भयावह बूंद को देखें जबकि हर बौना अचानक एक ही समय में पुनरावृत्ति करता है।
मिंग डक

2
मैं झंकार कर रहा हूं और सहमत हूं कि डीएफ सबसे अच्छा उदाहरण नहीं है; वास्तव में DF प्रदर्शन के मुद्दों को भुगतने के लिए जाना जाता है।
रॉबर्ट एस।

जवाबों:


110

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

सरल उत्तर बस खेल में प्रत्येक इकाई को संसाधित करने के बारे में कुशल होना है।

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

2
इसके लिए +1, वास्तव में यह समझाने के लिए कि मेरे जैसे ग्राफिक्स के बारे में बताने के बजाय क्या चल रहा है। :)
मैट केम्प

4
निष्पक्ष होने के लिए, मैंने आपको +1 भी दिया क्योंकि मैं उस पहलू के बारे में भूल गया था, और यह बहुत सही है - समीकरण से gfx ले लो और यह कंप्यूटर को 2x या 3x तुरंत तेज बनाने जैसा है।
काइलोटन

मैंने सुना है कि डीएफ अब बहुआयामी है, लेकिन कम से कम हाल तक, यह सब एक ही धागे में किया गया था। (यह अभी भी हो सकता है, निश्चित नहीं है)
Mooing Duck

@MooDDuck यह अभी भी नहीं है।
थर्वेन

63

बौना किला खुला स्रोत नहीं है, और जबकि बहुत अधिक अनुमान और रिवर्स इंजीनियरिंग है जो इस बात पर ध्यान दे सकता है कि सभी कैसे काम करते हैं, मैं इसके बजाय एक 3 डी (3 डी ग्राफिक्स, 3 डी दुनिया) के roguelike के अनुकूलन के लिए कुछ बुनियादी तकनीकों पर ध्यान केंद्रित करूंगा। इसी प्रकार का।

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

आंदोलन

पाथफाइंडिंग की बात करें, तो यह अक्सर एक बड़ी समस्या को हल करने के लिए एक बहुत ही कठिन समस्या हो सकती है जैसे कि DF मानचित्र (768x768x64 IIRC जितना हो सकता है) लेकिन समस्या को सरल और इन तरीकों से दूर किया जा सकता है:

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

मैं pathfinding की मूल बातें कवर नहीं करेंगे। अधिकांश रूग्यूलाइक ए * का उपयोग करते हैं, लेकिन बिल्ली को त्वचा देने के लिए अन्य तरीके हैं। मम्मे बिल्ली का चमड़ा ।।

व्यक्तिगत कार्य

प्रमुख चीजों में से एक है जो DF इकाइयों को लोकप्रिय बनाता है और जीवित महसूस करता है, यह उनकी व्यक्तिगत लक्ष्य सूची है। सच में बहुत सारे रॉगुलाइक गेम्स में यह एक बुनियादी स्तर पर है। अनिवार्य रूप से प्रत्येक इकाई में इच्छाओं की एक सूची होती है (और आपके डॉर्फ के लिए, वे कार्य जो वे उठा सकते हैं जो आप करने के लिए कह रहे हैं) और वे उनके व्यक्तित्व (आंकड़े) के आधार पर उनसे चुनेंगे।

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

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


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

यह दिखाने के लिए जाता है कि एक खेल में महत्वपूर्ण क्या है खेल खेलना। ग्राफिक्स नहीं, महान प्रोग्रामिंग नहीं, महान लेखन नहीं, महान संगीत नहीं, इंटरफ़ेस भी नहीं; और कुछ नहीं खेल के रूप में ही महत्वपूर्ण के रूप में 1% है।


1
1024X1024X32? वर्टिकल 128 या 256 मेरा मानना ​​है। 32 से अधिक बड़ा है।
लॉटन

@Lawton का मानना ​​है कि मैं अधिकतम आकार के बारे में गलत हूं, लेकिन ऊंचाई यह गलत नहीं है। मैं इसे ठीक कर रहा हूं। मैंने गेम लोड किया और मैं जिस एम्बार्क पर हूं, वह लगभग 45 के स्तर का है। अधिक 'नकली' हो सकता है लेकिन मेरे पास खुदाई या इमारत के लिए उनके पास नहीं है।
DampeS8N

@ DampeS8N मैंने केवल एक अनमॉडेड, मध्यम मानचित्र लोड किया और +16 से -156, लगभग 180 स्तरों तक देखने में सक्षम था। 40 स्तर के नक्शे अपवाद हैं, नियम नहीं। यहां तक ​​कि अगर आप केवल एक जलभृत या लावा द्वारा अवरुद्ध होने के कारण उनमें से 40 को खोदने में सक्षम हैं, तो यह प्रासंगिक नहीं है, क्योंकि नीचे का क्षेत्र अभी भी नकली मस्ती से भरा हुआ है।
लॉटन

@Lawton, मेरा नक्शा मुझे केवल 45 स्तरों के माध्यम से पृष्ठ की अनुमति देता है। वे पूरी तरह से परिवर्तनशील हैं, लेकिन मैं आसानी से संख्याओं को खोजने में सक्षम नहीं था कि कितने मानचित्र सुलभ हैं। यह इस बात पर भी निर्भर करता है कि हम किस खेल का उपयोग कर रहे हैं। अंत में यह सब मेरे जवाब के लिए महत्वपूर्ण नहीं है।
DampeS8N

यह एक पुरानी पोस्ट है लेकिन बौने किले में गहराई तलछटी परतों पर निर्भर करती है। जैसे कुछ जगहों पर पृथ्वी की पपड़ी मोटी होती है। डीएफ पूरी तरह से भूगर्भीय सही नहीं है, लेकिन मनुष्य वे इसे प्रो: डी की तरह अध्ययन करते हैं।
मदमेन्यो

50

से यह पेज :

ठीक है [पाथफाइंडिंग] मेरे अंत से आश्चर्यजनक लगता है, क्योंकि सभी वर्णों का एक मीट्रिक टन यह सब एक साथ कर रहा है।

टीए: बौने खुद को ज्यादातर ए * के साथ घूमते हैं, नियमित रूप से पुरानी सड़क-दूरी के अनुमान के साथ। मुश्किल हिस्सा यह है कि यह वास्तव में ए * कॉल नहीं कर सकता है अगर वे नहीं जानते कि वे पहले से वहां पहुंच सकते हैं, या यह मानचित्र को बाढ़ कर और प्रोसेसर को मार देगा।

मुझे नहीं पता कि यह निश्चित रूप से है कि वह "मानचित्र को बाढ़ने" को कैसे रोकता है , लेकिन खेलों में ऐसा करने का सामान्य तरीका A * Hierarchical Path-Find A * , या HPA * नामक परिवर्तन का उपयोग कर रहा है । यह विचार है कि ग्रिड को कई छोटे लेकिन बड़े विखंडों में तोड़ दिया जाए, फिर प्रत्येक कबाड़ से उसके पड़ोसी विखंडों तक सर्वोत्तम मार्ग खोजने के लिए A * का उपयोग करें। आप इसका उपयोग बहुत छोटे ग्राफ बनाने के लिए कर सकते हैं, जिस पर प्रत्येक यूनिट के लिए A * चलाया जा सकता है।

पदानुक्रमित पाथफाइंडिंग

आप उन विखंडू को और भी बड़े विखंडू में समूहित कर सकते हैं, जहाँ से "पदानुक्रमित" आता है।

यह एल्गोरिथ्म केवल निकट-इष्टतम पथ पाता है, लेकिन बौने-किले जैसे खेलों के लिए जो आमतौर पर ठीक है। यदि कोई मौजूद है तो रास्ता खोजने की गारंटी है; और जब कोई रास्ता नहीं होता है, तो यह केवल छोटे ग्राफ को बाढ़ देगा, जिससे भारी मात्रा में बचत होगी।

HPA * का एक अमूर्त हिस्सा भी है जो उन इकाइयों से संबंधित है जो कुछ इलाकों में जा सकते हैं लेकिन अन्य नहीं (जैसे कि चट्टानें, जो वायु-इकाइयाँ आगे बढ़ सकती हैं लेकिन जमीन-इकाइयाँ नहीं कर सकती हैं) । इसे HAA * कहा जाता है , और यहाँ इसे समझाने वाला एक बहुत ही सुलभ लेख है

आप यहां विभिन्न पाथफाइंग एल्गोरिदम के बारे में अधिक पढ़ सकते हैं ।


3
मुझे रिमवर्ल्ड डेवलपर का यह वीडियो बहुत ज्ञानवर्धक लगा। यह एक ऐसा ही खेल है, जबकि केवल 2D में। वह पैथफाइंडिंग के पीछे की मूल बातें और नक्शे को क्षेत्रों में अलग करने के फायदे बताते हैं। youtube.com/watch?v=RMBQn_sg7DA
Sire

18

यदि कुछ भी हो, यह विपरीत है - पूरी चीज एक धागे पर चलती है और यह अब उस बिंदु को मार रहा है, जहां वह अवरुद्ध कारक बन रहा है (पिछली बार जब मैंने जाँच की थी!)

इसका कारण यह है कि कोई फैंसी ग्राफिक्स नहीं है। यह भ्रामक है, लेकिन मुख्य चीज जो सामान को धीमा कर देती है वह चीजों को आकर्षित कर रही है (एएए खिताब में एक फ्रेम के दो तिहाई से ऊपर सोचें)। चूंकि बौना किला काफी बुनियादी है, यह उस समय के बाकी हिस्सों को दिलचस्प चीजें करने के लिए समर्पित करता है।


8
इसके पक्ष में एक डेटा बिंदु कुछ समय पहले से ओपनगेट फिर से लिखना है जो मुझे याद है कि बड़े पैमाने पर फ्रेम दर में वृद्धि हुई है। तो यहां तक ​​कि साधारण स्प्राइट ग्राफिक्स जो डीएफ ने कुशलता से प्रभाव डाला है।
मिली

3
+1 स्ट्रिप ग्राफिक्स = गेमप्ले कंप्यूटिंग के लिए खाली समय की भारी मात्रा
लॉरेंट कौविडो

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

यह पहली बार में एक मूर्खतापूर्ण जवाब की तरह लग सकता है, लेकिन यह सही है, कल्पना कीजिए कि 4-12gb ग्राम और 4-12tflops GPU शक्ति के साथ क्या किया जा सकता है यदि आपको जटिल आदिमता, अलंकार, बनावट को आकर्षित करने की आवश्यकता नहीं है, 3 डी वैक्टर को रूपांतरित करें पिक्सल,
शेड्स

10

मुझे नहीं पता कि डीएफ को कैसे कोडित किया जाता है, लेकिन एआई की मात्रा वास्तव में मुझे प्रभावित नहीं करती है क्योंकि लोग अक्सर इसकी देखरेख करते हैं कि एआई को परिशुद्धता की आवश्यकता नहीं है । यह केवल कुछ ही सेकंड के लिए सबसे अधिक सामान करने के लिए पूरी तरह से व्यवहार्य है। यह imprecise गणनाओं का उपयोग करने के लिए भी व्यवहार्य है। Imperfection बहुत प्रदर्शन बचाता है । आप निर्णय कर सकते हैं कि हर 100 एमएस में 100 यूनिट्स का निर्णय लिया जा सकता है, या आप इसे हर सेकंड 1000 इकाइयों के लिए चला सकते हैं, यह सीपीयू समय की समान राशि लेगा, लेकिन अच्छी तरह से ... आपके पास इकाइयों का 10 गुना है।

यहां एक सरल उदाहरण दिया गया है कि कोई व्यक्ति कितनी इकाइयों को संभाल सकता है:

int curUnit;
Array<Unit> units;
[...]
while([...]) // Game Loop
{
  [...game logic...]
  // process 10 AIs per Frame
  for(int i=0; i++; i<10)
  {
    curUnit++
    if(curUnit == units.length()) curUnit=0;
    if(curUnit < units.length())
      units[curUnit].processAI();
  }

  // Update the position of all units, this should be as optimized as possible
  foreach(Unit& unit in units){ unit.move(); };

  [...graphics...]
}

एआई कम और कम उत्तरदायी हो जाएगा अधिक हैं, लेकिन खिलाड़ी शायद केवल चरम मामलों में इसे नोटिस करेगा।


उन कार्यों के ढेर के माध्यम से कदम रखने के लिए बहुत कुछ कहा जाता है जो फ्रेम-स्तरीय सटीक नहीं हैं। AAA गेम अक्सर प्रत्येक व्यक्ति विभाग को फ्रेम के प्रतिशत में स्पष्ट रूप से टाइम-बॉक्स देते हैं ताकि एक विभाग अन्य विभागों के पैर की उंगलियों पर न चल सके। यदि हवा की गति और दिशा के आधार पर वृक्षारोपण को एनिमेट करने की विधि धीमी है, तो अन्य टीमों के बजट को खाने के बजाय कम पेड़ों को संसाधित किया जाएगा।
19amp में DampeS8N
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.