পারফরম্যান্স হারানো ছাড়া কীভাবে বামন দুর্গ এতগুলি সত্তার ট্র্যাক রাখে?


79

বামন কেল্লায় আপনি যে কোনও সময়ে শত শত বামন, প্রাণী, গাবলিন ইত্যাদি খেলতে পারবেন, যার প্রতিটি নিজস্ব জটিল এআই এবং পাথফাইন্ডিং রুটিন রয়েছে। আমার প্রশ্ন হ'ল এটি কীভাবে লক্ষণীয় মন্দা তৈরি করে না? প্রতিটি বামন কি তার নিজস্ব থ্রেডে চালাচ্ছে?


6
আকর্ষণীয় প্রশ্ন। যদিও এটি বর্ণিত পদ্ধতিটি আমি পছন্দ করি না, কারণ এই প্রশ্নের উত্তরকে কেবল কথিত হিসাবে দেওয়া অনুমান করা হবে। যাইহোক, আপনি এই নিবন্ধটি টার্ন অ্যাডামসের সাথে কথা বলতে দেখে থাকতে পারেন । যেখানে তারা সংক্ষিপ্তভাবে পথ সন্ধানের বিষয়টি কভার করে।
মাইকেলহাউস

25
আপনার কোনও জটিল টানেল টপোলজি এবং 100+ বামন হয়ে গেলে এটি একেবারে লক্ষণীয় ধীরগতির সৃষ্টি করে।
রাসেল বোরোগোভ

3
হ্যাঁ, আমার অভিজ্ঞতার ডিএফ আপনার বর্ণনার দৃশ্যে অবিশ্বাস্যরকম ধীর।
আরজেন্টেজ

4
একটি প্রাথমিক সিঁড়িটি ধ্বংস করুন এবং এক মুহুর্তের জন্য আপনার ফ্রেমরেট ড্রপটি শিলের মতো দেখুন যখন প্রতিটি বামন হঠাৎ একই সাথে পুনঃস্থাপন করে।
23'12 এ হাঁসকে মোইং করা হচ্ছে

2
আমি ছিমছাম করতে যাচ্ছি এবং সম্মত হচ্ছি যে ডিএফ সেরা উদাহরণ নয়; আসলে ডিএফ পারফরম্যান্সের সমস্যায় ভুগতে সুপরিচিত।
রবার্ট এস

উত্তর:


110

যে কোনও সিস্টেমে এতগুলি অক্ষরের প্রত্যেকটির জন্য একটি থ্রেড ছিল খুব দ্রুত সংস্থান থেকে চলে যাবে। থ্রেডগুলি আপনাকে অতিরিক্ত প্রসেসরের কোরগুলিতে অ্যাক্সেস দিতে পারে তবে তারা অভ্যন্তরীণভাবে আরও দক্ষ করে তোলে না এবং এগুলি ওভারহেড নিয়ে আসে।

সহজ উত্তরটি হ'ল গেমের প্রতিটি সত্তা প্রক্রিয়াজাতকরণ সম্পর্কে দক্ষ।

  • প্রতিটি সত্তা প্রতিটি ফ্রেম প্রক্রিয়া করবেন না।
  • প্রায়শই করার প্রয়োজন এমন স্টাফগুলিতে বিভক্ত প্রক্রিয়াকরণ এবং প্রায়শই প্রয়োজন হয় না এমন স্টাফ।
  • দীর্ঘস্থায়ী অ্যালগরিদমগুলি একাধিক ফ্রেম জুড়ে ছড়িয়ে দিন যাতে তারা অন্য সিস্টেমে প্রসেসিংয়ে বাধা না দেয়।
  • দক্ষ অ্যালগরিদম এবং ডেটা স্ট্রাকচার ব্যবহার করা হয়েছে তা নিশ্চিত করুন।
  • ব্যয়বহুল গণনার ফলাফলগুলি ক্যাশে করুন যদি তারা আবার ব্যবহারের সম্ভাবনা থাকে।

2
আমার জন্য গ্রাফিক্স সম্পর্কে ঝাঁকুনির পরিবর্তে আসলে কী হচ্ছে তা ব্যাখ্যা করার জন্য এটির জন্য +1। :)
ম্যাট কেম্প

4
সত্যি কথা বলতে, আমি আপনাকেও +1 দিয়েছিলাম কারণ আমি সেই দিকটি ভুলে গিয়েছিলাম এবং এটি খুব সত্য - সমীকরণ থেকে gfx নিন এবং এটি কম্পিউটারগুলিকে তাত্ক্ষণিকভাবে 2x বা 3x তৈরি করার মতো।
কাইলোটন

আমি শুনেছি যে ডিএফ এখন মাল্টিথ্রেডেড, তবে কমপক্ষে সম্প্রতি অবধি, এটি সবই একটি থ্রেডে সম্পন্ন হয়েছিল। (এটি এখনও নিশ্চিত, নিশ্চিত নয়)
23'12 এ হাঁসকে মোইং করা হচ্ছে

পছন্দ করেছেন
থারউইন

63

বামন ফোর্ট্রেস ওপেন সোর্স নয় এবং প্রচুর অনুমান এবং বিপরীত প্রকৌশল রয়েছে যা সমস্তরকম কীভাবে কাজ করতে পারে তা দেখতে, আমি পরিবর্তে একটি থ্রিডি (থ্রিডি গ্রাফিক্স নয়, থ্রিডি ওয়ার্ল্ড নয়) রগুইলাইকটির অনুকূলকরণের জন্য কিছু প্রাথমিক কৌশলগুলিতে মনোনিবেশ করব একই রকম.

সমস্ত ভিডিও গেমের ক্ষেত্রে যেমন প্রচুর ধোঁয়াশা এবং আয়না রয়েছে যা সাধারণ নিয়ম এবং সিস্টেমগুলি থেকে জটিলতার মায়া তৈরি করছে। লক্ষ্যহীন আন্দোলনের জন্য সরল এলোমেলো সংখ্যার ব্যবহার থেকে শুরু করে পাথ ফাইন্ডিংয়ের জন্য নোডের একটি উচ্চ-স্তরের জাল প্রাক-বেকিং করা পর্যন্ত।

আন্দোলন

প্যাথফাইন্ডিংয়ের কথা বলতে গেলে, প্রায়শই বড় জায়গার জন্য এটি সমাধান করা খুব কঠিন সমস্যা হতে পারে যেমন কোনও ডিএফ মানচিত্র হতে পারে (যতটা 768x768x64 আইআইআরসি হতে পারে) তবে সমস্যাটি সহজতর করা যায় এবং এই উপায়ে এড়াতে পারেন:

  • প্রি-বেকড নোড নেটওয়ার্ক: মানচিত্রটি তৈরি হয়ে গেলে বিশ্বের খণ্ডগুলিকে টুকরো টুকরো করা যেতে পারে এবং প্রতিটি খণ্ডে এর প্রস্থান এবং প্রবেশদ্বার ম্যাপ করা যেতে পারে। যখন কোনও অংশ আপডেট করা হয়, যেমন কোনও প্রাচীর তৈরি করা হয় তখন কেবল সেই অংশটির নেটওয়ার্ক আপডেট করা দরকার।
  • স্টেজড পাথফাইন্ডিং: পুরো মানচিত্রের উপরে একটি কক্ষের জন্য সেল চালিয়ে যাওয়ার জন্য অনেক সময় সময় লাগবে, পরিবর্তে আপনি বৃহত্তর অংশের নেটওয়ার্কের উপরে পাথফাইন্ড করতে পারবেন, যা খণ্ডগুলির মধ্যে সমস্ত সংযোগের মানচিত্র রাখে এবং তারপরে কেবল তখন একটি আন্তঃখণ্ড পাথ চালিত হয় খণ্ড থেকে খণ্ডে সরানো এটি আপনার জন্য 2 টি কাজ করে। এটি অনেকগুলি ছোট ছোট টুকরো টুকরো টুকরো করে পাথ ফাইন্ডিংকে গতি দেয় এবং একটি খণ্ড আপডেট হওয়ার সাথে সাথে ইউনিটটিকে পথের সাথে দিকের অংশটি পরিবর্তন করতে সক্ষম করে। এটি কোনও নোডের ক্রস আপডেটের প্রয়োজন হলে এটি বড় নেটওয়ার্ক জুড়ে পুনরায় পাথ করবে।
  • এলোমেলো স্টিয়ারিং: যখন কোনও লক্ষ্যে না সরানো হয়, ইউনিটের কেবল লক্ষ্যহীনভাবে চলতে হবে। অনেক রগুইলাইক কেবল একটি ইউনিটটিকে এলোমেলো পথে চালিত করে যা অপ্রাকৃত মনে হয়। বিভিন্ন স্টিয়ারিং কৌশল ব্যবহার করা যেতে পারে, সাধারণগুলি সরলরেখায় সরানোর পক্ষে হয় এবং পিছনে বিস্তৃত দিকগুলি সরিয়ে যাওয়ার কম এবং কম সুযোগ থাকে, যার সম্ভাবনা প্রায় 1% থাকে। সুতরাং ইউনিটটি কখনও কখনও পুরোপুরি পুরোপুরি বিপরীত হয় তবে খুব কমই।

আমি প্যাথফাইন্ডিংয়ের বেসিকগুলি কভার করব না। বেশিরভাগ রোগুলিকরা এ * ব্যবহার করে তবে বিড়ালের চামড়ার অন্যান্য পদ্ধতিও রয়েছে। এমএমএম বিড়ালের চামড়া ..

ব্যক্তিগত কাজ

ডিএফ ইউনিটগুলিকে পপ এবং জীবিত বোধ করে এমন একটি প্রধান জিনিস হ'ল তাদের ব্যক্তিগত লক্ষ্য তালিকা। সত্যিকার অর্থে অনেক রগুয়ালাইক গেম এটি একটি বেসিক স্তরে থাকে। মূলত প্রতিটি ইউনিটের একটি ইচ্ছার তালিকা রয়েছে (এবং আপনার ডারফগুলির জন্য, তারা যে কাজগুলি করতে বলেছে তা বেছে নিতে পারে) এবং তারা তাদের ব্যক্তিত্বের ভিত্তিতে সেগুলি বেছে নেবে (পরিসংখ্যান।)

কিছু কাজের প্রয়োজনীয়তা রয়েছে। চামড়ার স্কার্ট তৈরির জন্য ডরফটি এমন আইটেমের এমন একটি দোকানে থাকতে হবে যাতে এক্স আইটেম রয়েছে। সুতরাং এগুলি সমস্ত চেক করা হয় এবং তাদের তালিকার কাজ হিসাবে যুক্ত করা হয়। যে হিসাবে সহজ।

যেহেতু বেশিরভাগ সময় ইউনিট ট্রানজিটে থাকবে, ইউনিট কী করছে তা যাচাই করা খুব দ্রুত হতে পারে, কেবলমাত্র কয়েকটি ইউনিট কোনও নির্দিষ্ট মুহুর্তে একটি পছন্দ করে নিবে, এবং সামগ্রিকভাবে এমনকি কয়েকশো বা এমনকি কোনও ধীরগতিও নেই হাজার ইউনিট এবং মনে রাখবেন, ডিএফ-তে মৌমাছি থেকে শুরু করে ট্রোগলোডিট পর্যন্ত গাছগুলি সবই একক।


কিছু অতিরিক্ত গবেষণা করার ক্ষেত্রে এটি স্পষ্ট যে, হাসিখুশিভাবে, ডিএফ সাধারণভাবে পাথ ফাইন্ডিংয়ের একটি ভয়ানক কাজ করছে। এটি মানচিত্রটিকে খণ্ডগুলিতে বিভক্ত করছে না, এটি মানচিত্রটিকে সেগমেন্টগুলি বা সংযুক্ত অঞ্চলে বিভক্ত করছে (যা নিশ্চিতরূপে কিছুই না বলে ভাল) সুতরাং আমার উপরের মূল্যায়নটি কীভাবে ভাবার চেয়ে ডিএফ কীভাবে কাজ করে তার উদাহরণ তার চেয়েও কম উদাহরণ। :) যা বলা যায় না যে লক্ষ লক্ষ অন্যান্য কারণে ডিএফ আশ্চর্য্যের চেয়ে কম কিছু নয়।

এটি দেখায় যে একটি গেমের মধ্যে গুরুত্বপূর্ণ যা গেম প্লে game গ্রাফিক্স নয়, দুর্দান্ত প্রোগ্রামিং নয়, দুর্দান্ত রচনা নয়, দুর্দান্ত সংগীত নয়, এমনকি ইন্টারফেসও নয়; আর কিছুই কিছুই গেমের মতোই গুরুত্বপূর্ণ নয়।


1
1024X1024X32? উল্লম্বটি 128 বা 256 আমি বিশ্বাস করি। এটি 32
লকটন

@ লাওটন আমি বিশ্বাস করি যে আমি সর্বোচ্চ আকার সম্পর্কে ভুল, তবে উচ্চতাটিও এটি ভুল নয়। আমি এটি সংশোধন করছি। আমি গেমটি লোড করেছি এবং যে সূচনাটি আমি করছি সেগুলি প্রায় 45 স্তরের উচ্চ। আরও 'সিমুলেটেড' হতে পারে তবে খনন বা বিল্ডিংয়ের জন্য তাদের কাছে আমার অ্যাক্সেস নেই।
ড্যাম্প এস 8 এন

@ ড্যাম্প এস ৮ এন আমি সবেমাত্র একটি অপরিবর্তিত, মাঝারি মানচিত্রটি লোড করেছি এবং +১ to থেকে -১66 পর্যন্ত দেখতে পেরেছি, প্রায় 180 টি স্তর। 40 স্তরের মানচিত্র ব্যতিক্রম, নিয়ম নয়। এমনকি যদি আপনি জলজ বা লাভা দ্বারা আটকে থাকার কারণে কেবলমাত্র তাদের 40 টি খনন করতে সক্ষম হন তবে এটি প্রাসঙ্গিক নয় কারণ নীচের অঞ্চলটি এখনও সিমুলেটেড মজাদার দ্বারা জনবহুল।
লোটন

@ লাওটন, আমার মানচিত্র আমাকে কেবল ৪৫ টি স্তরের পৃষ্ঠাগুলিতে অনুমতি দেয়। এগুলি একেবারে পরিবর্তনশীল তবে প্রতিটি মানচিত্রে কতগুলি অ্যাক্সেসযোগ্য রয়েছে তার সংখ্যা আমি সহজেই খুঁজে পাচ্ছিলাম না। এটি আমরা গেমটির কোন সংস্করণ ব্যবহার করছি তার উপরও নির্ভর করে। শেষ পর্যন্ত আমার উত্তরের জন্য এটি এত গুরুত্বপূর্ণ নয়।
দাম্পে এস 8 এন

এটি একটি পুরাতন পোস্ট তবে বামন দুর্গের গভীরতা পাললিক স্তরের উপর নির্ভর করে। পৃথিবীর ভূত্বকের মতো কিছু জায়গায় ঘন হয়। ডিএফ পুরোপুরি ভূতাত্ত্বিক সঠিক নয় তবে মানুষ তারা এটি প্রো-এর মতো অধ্যয়ন করে: ডি।
ম্যাডমিনিও

50

এই পৃষ্ঠা থেকে :

ওয়েল [পথচলা] আমার শেষ থেকে আশ্চর্যজনক দেখাচ্ছে, যেহেতু একটি মেট্রিক টন অক্ষর সমস্ত এটি একবারে করছে।

টিএ: বামনেরা নিজেরাই বেশিরভাগ নিয়মিত পুরানো রাস্তার-দূরত্বের heuristic সহ এ * নিয়ে ঘুরে বেড়ায়। জটিল অংশটি হ'ল এটি সত্যিই একটি * কল করতে পারে না যদি তারা না জানে যে তারা আগেই সেখানে যেতে পারে, বা এটি মানচিত্রে প্লাবিত হয়ে প্রসেসরটিকে হত্যা করবে।

আমি জানি না এটি কীভাবে তিনি "মানচিত্রে বন্যার" প্রতিরোধ করেছিলেন? , তবে গেমগুলিতে এটি করার স্বাভাবিক উপায় হায়ারার্কিকালিক পাথ-ফাইন্ডিং এ * , বা এইচপিএ * নামক একটি * এর পরিবর্তন ব্যবহার করে । ধারণাটি হ'ল গ্রিডটি অনেক কম তবে বৃহত্তর অংশে বিভক্ত করা উচিত, তারপরে প্রতিটি খণ্ড থেকে তার প্রতিবেশী অংশগুলিতে সেরা পথ খুঁজতে A * ব্যবহার করুন। আপনি প্রতিটি ইউনিট ওভারের জন্য এ * চালানোর জন্য আরও অনেক ছোট গ্রাফ তৈরি করতে এটি ব্যবহার করতে পারেন।

শ্রেণিবদ্ধ পথচলা

আপনি এই খণ্ডগুলিকে আরও বৃহত্তর অংশগুলিতেও গোষ্ঠী করতে পারেন, যা এখান থেকে "শ্রেণিবদ্ধ" আসে।

এই অ্যালগরিদমটি কেবল নিকট-অনুকূল পাথগুলি সন্ধান করে তবে বামন-ফোর্ট্রেসের মতো গেমগুলির জন্য যা সাধারণত ঠিক। এটি উপস্থিত থাকলে কোনও পথ খুঁজে পাওয়ার নিশ্চয়তা রয়েছে; এবং যখন কোনও পথ নেই, তখন এটি কেবলমাত্র ছোট গ্রাফকে বন্যায় পূর্ণ করবে, ফলে প্রচুর পরিমাণে সময় সাশ্রয় হবে।

এইচপিএ * এর একটি বিমূর্ততাও রয়েছে যা ইউনিটগুলির সাথে কাজ করে যা কিছু অঞ্চলে যেতে পারে তবে অন্য নয় (যেমন ক্লিফস, যা এয়ার ইউনিটগুলি পেরিয়ে যেতে পারে তবে গ্রাউন্ড-ইউনিটগুলি পারে না) । একে HAA * বলা হয় এবং এটির ব্যাখ্যা করার একটি খুব অ্যাক্সেসযোগ্য নিবন্ধ রয়েছে এখানে

আপনি এখানে বিভিন্ন প্যাথফাইন্ডিং অ্যালগরিদম সম্পর্কে আরও পড়তে পারেন ।


3
আমি এই ভিডিওটি রিম ওয়ার্ল্ড বিকাশকারী থেকে খুব জ্ঞানদায়ক পেয়েছি। এটি একটি অনুরূপ খেলা, যখন কেবল 2 ডি তে। তিনি পাথ ফাইন্ডিংয়ের পিছনের মূল বিষয়গুলি এবং মানচিত্রকে অঞ্চলগুলিতে পৃথক করার সুবিধা সম্পর্কে ব্যাখ্যা করেছেন। youtube.com/watch?v=RMBQn_sg7DA
সায়ার

18

যদি কিছু হয় তবে এটি বিপরীত - পুরো জিনিসটি একটি থ্রেডে চলে এবং এটি এখন সেই পয়েন্টটিকে আঘাত করছে যেখানে এটি ব্লকিং ফ্যাক্টর হয়ে উঠছে (গতবার আমি যাচাই করেছিলাম!)

এটির দ্রুত কারণ হ'ল কোনও অভিনব গ্রাফিক্স নেই। এটি বিভ্রান্তিকর, তবে প্রধান জিনিস যা জিনিসকে ধীর করে দেয় তা হ'ল জিনিসগুলি আঁকা (এএএ শিরোনামগুলির ফ্রেমের দুই তৃতীয়াংশের উপরে ভাবেন)। যেহেতু বামন দুর্গটি বেশ মৌলিক তাই এটি বাকি সময়টি আকর্ষণীয় কাজ করতে ব্যয় করে।


8
এর পক্ষে একটি ডেটা পয়েন্ট হ'ল ওপেনজিএল পুনরায় লেখার কিছুক্ষণ আগে যা আমার মনে আছে একটি বিশাল ফ্রেম রেট বৃদ্ধি পেয়েছে। এমনকি ডিএফ দক্ষতার সাথে একটি প্রভাব ফেলেছে এমন সাধারণ স্প্রাইট গ্রাফিকগুলিও করছেন।
মিলিমুজ

3
+1 স্ট্রিপ গ্রাফিক্স = গেমপ্লে কম্পিউটিংয়ের জন্য অতিরিক্ত পরিমাণের অতিরিক্ত সময়
লরেন্ট কুইভিডু

2
এটি লক্ষণীয় যে ডিএফ এর গ্রাফিকগুলি যে কোনও আধুনিক ইন্ডি 2 ডি গেমের মতোই দাবী করছে। অনেকগুলি টেক্সচার রয়েছে, এমনকি যদি এটি ছোট এবং সাধারণ হয় তবে এগুলি রিয়েল এস্টেটের পুরো এইচডি মনিটরে ছড়িয়ে যায়। কোনও চটকদার কণা প্রভাব বা আপনার কী নেই, তবে কাঁচা "এই সমস্ত পিক্সেলগুলি আঁকুন" কাজটি এখনও বিদ্যমান এবং ক্ষুদ্র টাইলের আকারগুলির জন্য প্রয়োজনীয় কলগুলির সংখ্যাটির কারণে পারফরম্যান্ট করা বেশ বড় চ্যালেঞ্জ।
ড্যাম্প এস

এটি প্রথমে মূর্খ উত্তরের মতো দেখতে পারে তবে এটি সঠিক, কল্পনা করুন 4-12 গিগাবাইট গ্রাম এবং 4-12 টিফ্লপ্লস জিপিইউ শক্তি দিয়ে কী করা যেতে পারে যদি আপনার জটিল আদিম, আনপ্রেপস, টেক্সচার, 3 ডি ভেক্টরগুলিকে রূপান্তর করতে না হয় পিক্সেল, শেডার ইত্যাদির 2 ডি অ্যারে
ফেলিপ

10

আমি জানি না কীভাবে ডিএফ কোড করা হয় তবে এআই এর পরিমাণ আমাকে সত্যই প্রভাবিত করে না কারণ লোকেরা প্রায়শই এটির তত্ত্বাবধান করে যে এআই এর যথাযথতার প্রয়োজন নেই । শুধুমাত্র প্রতি কয়েক সেকেন্ডে বেশিরভাগ স্টাফ করা পুরোপুরি কার্যকর। এটি অনর্থক গণনা ব্যবহার করাও কার্যকর। অসম্পূর্ণতা অনেক কর্মক্ষমতা সংরক্ষণ করে । আপনি প্রতি 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...]
}

এআই যত বেশি আছে কম এবং কম প্রতিক্রিয়াশীল হয়ে উঠবে, তবে প্লেয়ার সম্ভবত চরম ক্ষেত্রে এটি লক্ষ্য করবে।


ফ্রেম-লেভেল সুনির্দিষ্ট নয় এমন কাজগুলির স্ট্যাকের মধ্য দিয়ে পদক্ষেপ নেওয়ার জন্য অনেক কিছু বলা যায়। এএএ গেমস প্রায়শই প্রতিটি বিভাগের ফ্রেমের শতকরা বিভাগগুলিতে স্পষ্টভাবে টাইম-বক্স করে তোলে যাতে একটি বিভাগ অন্যান্য বিভাগের পায়ের আঙ্গুলের উপর পা রাখতে না পারে। যদি বাতাসের গতি এবং দিকনির্দেশের ভিত্তিতে গাছের দমনকে অ্যানিমেট করার পদ্ধতিটি ধীর হয় তবে অন্যান্য দলের বাজেট না খেয়ে কম গাছ প্রক্রিয়াকরণ করা হবে।
ড্যাম্প এস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.