2 ডি গেমটিতে আমরা কীভাবে বড় ভিডিও মেমরির প্রয়োজনীয়তাগুলি সমাধান করব?
আমরা বিভ্রো সি / সি ++ এ একটি 2 ডি গেম (ফ্যাক্টরিও) বিকাশ করছি এবং গেমের বিষয়বস্তু বৃদ্ধি পাওয়ার সাথে সাথে আমরা ভিডিও মেমরির প্রয়োজনীয়তা বাড়ানোর সমস্যায় পড়ছি।
আমরা বর্তমানে যে চিত্রগুলি প্রথমে ব্যবহার করা হচ্ছে সে সম্পর্কিত সমস্ত তথ্য সংগ্রহ করি, যতগুলি সম্ভব এই সমস্ত চিত্র ছাঁটাই এবং যতটা সম্ভব শক্তভাবে বড় আকারে স্থাপন করুন organize এই অ্যাটলেসগুলি ভিডিও মেমোরিতে সংরক্ষণ করা হয়, যার আকার সিস্টেমের সীমাবদ্ধতার উপর নির্ভর করে; বর্তমানে এটি 8192x8192 অবধি 2 টি চিত্র থাকে, সুতরাং তাদের 256Mb থেকে 512Mb ভিডিও মেমরির প্রয়োজন।
এই সিস্টেমটি আমাদের পক্ষে বেশ ভাল কাজ করে, যেমন কিছু কাস্টম অপ্টিমাইজেশান এবং রেন্ডার এবং আপডেট থ্রেডকে বিভক্ত করে আমরা 60 এফপিএসে স্ক্রিনে কয়েক হাজার চিত্র আঁকতে সক্ষম; আমাদের স্ক্রিনে অনেকগুলি অবজেক্ট রয়েছে এবং একটি বড় জুম-আউটকে মঞ্জুরি দেওয়া একটি জটিল প্রয়োজন। যেহেতু আমরা আরও যোগ করতে চাই, ভিডিও মেমরির প্রয়োজনীয়তার সাথে কিছুটা সমস্যা হতে চলেছে, সুতরাং এই সিস্টেমটি সম্ভবত ধরে রাখতে পারে না।
আমরা যে জিনিসগুলির চেষ্টা করতে চেয়েছিলাম তার মধ্যে একটি হ'ল সর্বাধিক সাধারণ চিত্রগুলির সাথে একটি আটলাস এবং দ্বিতীয়টি ক্যাশে হিসাবে। চাহিদা অনুযায়ী ছবিগুলি মেমরি বিটম্যাপ থেকে সেখানে সরানো হবে। এই পদ্ধতির সাথে দুটি সমস্যা রয়েছে:
- ভিডিও বিটম্যাপ থেকে মেমরি বিটম্যাপ থেকে অঙ্কন বেদনাদায়কভাবে ধীর গতিতে, সংক্ষিপ্ত আকারে।
- মূল থ্রেড ছাড়া, বিট্রোতে ভিডিও বিটম্যাপ নিয়ে কাজ করা সম্ভব নয়, সুতরাং এটি ব্যবহারিকভাবে অকেজো।
আমাদের কিছু অতিরিক্ত প্রয়োজনীয়তা এখানে রয়েছে:
- গেমটি অবশ্যই ডিটারমিস্টিক হতে হবে, সুতরাং পারফরম্যান্স সংক্রান্ত সমস্যা / লোডিংয়ের সময় কখনই গেমের স্থিতি পরিবর্তন করতে পারে না।
- গেমটি আসল সময়, এবং শীঘ্রই মাল্টিপ্লেয়ার হওয়ার জন্য। আমাদের যেকোন মূল্যে এমনকি ক্ষুদ্রতম তোলাও এড়ানো উচিত।
- বেশিরভাগ গেমটি একটি একটানা উন্মুক্ত বিশ্ব।
পরীক্ষায় প্রতিটি কনফিগারেশনের জন্য কয়েকবার 1x1 থেকে 300x300 মাপের জন্য একটি ব্যাচে 10,000 স্প্রাইট আঁকানো থাকে। আমি এনভিডিয়া জিফোর্স জিটিএক্স 760 এ পরীক্ষা করেছিলাম।
- ভিডিও বিটম্যাপ অঙ্কনটিতে ভিডিও বিটম্যাপ অঙ্কিত প্রতি স্প্রাইটে 0.1us লেগেছিল, যখন সোর্স বিটম্যাপটি পৃথক বিটম্যাপের (অ্যাটলাস বৈকল্পিক) মধ্যে পরিবর্তন ঘটেনি; আকার কোন ব্যাপার না
- ভিডিও বিটম্যাপটি ভিডিও বিটম্যাপ অঙ্কনে, সোর্স বিটম্যাপটি অঙ্কনের (অ্যাটলাসবিহীন ভেরিয়েন্ট) মধ্যে পরিবর্তন করা হয়েছিল, স্প্রাইটে প্রতি 0.56us লেগেছে; আকারেও কিছু যায় আসে না।
- ভিডিও বিটম্যাপ অঙ্কনের মেমরি বিটম্যাপটি সত্যিই সন্দেহজনক। 1x1 থেকে 200x200 পর্যন্ত আকারগুলি বিটম্যাপ প্রতি 0.3us নিয়েছিল, তাই ভয়াবহভাবে ধীর হয় না। বৃহত্তর আকারের জন্য, সময়টি খুব নাটকীয়ভাবে বাড়ানো শুরু করেছিল, ২০১২ সালে ২০১৮ এর জন্য 9us এ 291x291 এর জন্য 3116us হয়েছে।
অ্যাটলাস ব্যবহার 5 এর চেয়ে বেশি গুণক দ্বারা কার্যকারিতা বৃদ্ধি করে I যদি আমার কাছে রেন্ডারিংয়ের জন্য 10 মিমি থাকে তবে একটি অ্যাটলাসের সাথে আমি ফ্রেম প্রতি 100 000 স্প্রাইটে সীমাবদ্ধ থাকি এবং এটি ছাড়াই 20 000 স্প্রাইটের সীমা থাকে। এটি সমস্যাযুক্ত হবে।
আমি ছায়ার জন্য বিটম্যাপ সংক্ষেপণ এবং 1bpp বিটম্যাপ ফর্ম্যাটটি পরীক্ষা করার একটি উপায়ও অনুসন্ধান করার চেষ্টা করছিলাম, তবে আমি বিভ্রোতে এটি করার কোনও উপায় খুঁজে পাইনি।