2 ডি গেমটিতে আমরা কীভাবে বড় ভিডিও মেমরির প্রয়োজনীয়তাগুলি সমাধান করব?


40

2 ডি গেমটিতে আমরা কীভাবে বড় ভিডিও মেমরির প্রয়োজনীয়তাগুলি সমাধান করব?


আমরা বিভ্রো সি / সি ++ এ একটি 2 ডি গেম (ফ্যাক্টরিও) বিকাশ করছি এবং গেমের বিষয়বস্তু বৃদ্ধি পাওয়ার সাথে সাথে আমরা ভিডিও মেমরির প্রয়োজনীয়তা বাড়ানোর সমস্যায় পড়ছি।

আমরা বর্তমানে যে চিত্রগুলি প্রথমে ব্যবহার করা হচ্ছে সে সম্পর্কিত সমস্ত তথ্য সংগ্রহ করি, যতগুলি সম্ভব এই সমস্ত চিত্র ছাঁটাই এবং যতটা সম্ভব শক্তভাবে বড় আকারে স্থাপন করুন organize এই অ্যাটলেসগুলি ভিডিও মেমোরিতে সংরক্ষণ করা হয়, যার আকার সিস্টেমের সীমাবদ্ধতার উপর নির্ভর করে; বর্তমানে এটি 8192x8192 অবধি 2 টি চিত্র থাকে, সুতরাং তাদের 256Mb থেকে 512Mb ভিডিও মেমরির প্রয়োজন।

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

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

  1. ভিডিও বিটম্যাপ থেকে মেমরি বিটম্যাপ থেকে অঙ্কন বেদনাদায়কভাবে ধীর গতিতে, সংক্ষিপ্ত আকারে।
  2. মূল থ্রেড ছাড়া, বিট্রোতে ভিডিও বিটম্যাপ নিয়ে কাজ করা সম্ভব নয়, সুতরাং এটি ব্যবহারিকভাবে অকেজো।

আমাদের কিছু অতিরিক্ত প্রয়োজনীয়তা এখানে রয়েছে:

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

পরীক্ষায় প্রতিটি কনফিগারেশনের জন্য কয়েকবার 1x1 থেকে 300x300 মাপের জন্য একটি ব্যাচে 10,000 স্প্রাইট আঁকানো থাকে। আমি এনভিডিয়া জিফোর্স জিটিএক্স 760 এ পরীক্ষা করেছিলাম।

  • ভিডিও বিটম্যাপ অঙ্কনটিতে ভিডিও বিটম্যাপ অঙ্কিত প্রতি স্প্রাইটে 0.1us লেগেছিল, যখন সোর্স বিটম্যাপটি পৃথক বিটম্যাপের (অ্যাটলাস বৈকল্পিক) মধ্যে পরিবর্তন ঘটেনি; আকার কোন ব্যাপার না
  • ভিডিও বিটম্যাপটি ভিডিও বিটম্যাপ অঙ্কনে, সোর্স বিটম্যাপটি অঙ্কনের (অ্যাটলাসবিহীন ভেরিয়েন্ট) মধ্যে পরিবর্তন করা হয়েছিল, স্প্রাইটে প্রতি 0.56us লেগেছে; আকারেও কিছু যায় আসে না।
  • ভিডিও বিটম্যাপ অঙ্কনের মেমরি বিটম্যাপটি সত্যিই সন্দেহজনক। 1x1 থেকে 200x200 পর্যন্ত আকারগুলি বিটম্যাপ প্রতি 0.3us নিয়েছিল, তাই ভয়াবহভাবে ধীর হয় না। বৃহত্তর আকারের জন্য, সময়টি খুব নাটকীয়ভাবে বাড়ানো শুরু করেছিল, ২০১২ সালে ২০১৮ এর জন্য 9us এ 291x291 এর জন্য 3116us হয়েছে।

অ্যাটলাস ব্যবহার 5 এর চেয়ে বেশি গুণক দ্বারা কার্যকারিতা বৃদ্ধি করে I যদি আমার কাছে রেন্ডারিংয়ের জন্য 10 মিমি থাকে তবে একটি অ্যাটলাসের সাথে আমি ফ্রেম প্রতি 100 000 স্প্রাইটে সীমাবদ্ধ থাকি এবং এটি ছাড়াই 20 000 স্প্রাইটের সীমা থাকে। এটি সমস্যাযুক্ত হবে।

আমি ছায়ার জন্য বিটম্যাপ সংক্ষেপণ এবং 1bpp বিটম্যাপ ফর্ম্যাটটি পরীক্ষা করার একটি উপায়ও অনুসন্ধান করার চেষ্টা করছিলাম, তবে আমি বিভ্রোতে এটি করার কোনও উপায় খুঁজে পাইনি।


1
আপনার গেমের বড় অনুরাগী, আমি ইন্ডিগোগো প্রচারকে সমর্থন করেছি। আমি প্রতি কয়েক মাস পরে এটি বেজ করা। এত সুন্দর কাজ! সাইটের "বিষয়বস্তুতে থাকা প্রশ্নগুলি" আমি কী ব্যবহার করব "তা সরিয়েছি। বাকি প্রশ্নগুলি এখনও বেশ বিস্তৃত, যদি আপনার আরও নির্দিষ্ট কিছু থাকে তবে আপনার সুযোগটি সঙ্কীর্ণ করার চেষ্টা করা উচিত।
মাইকেলহাউস

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

"কোন প্রযুক্তিটি ব্যবহার করতে হবে" এর মত প্রশ্ন জিজ্ঞাসার জন্য কিছু জায়গার জন্য এই পৃষ্ঠার নীচের অংশটি দেখুন। আপনার একটি সম্পূর্ণ বৈধ এবং যুক্তিসঙ্গত প্রশ্ন রয়েছে, এটি কেবল এই সাইটে আমরা যে ধরণের প্রশ্নের মুখোমুখি হচ্ছি তা নয়। আপনি যদি কোনও নির্দিষ্ট ইঞ্জিন সন্ধান করেন না, তবুও "এক্স এমন কোনও প্রযুক্তি আছে কি?" এই প্রশ্নের উত্তর দেওয়ার একমাত্র উপায়। কেউ কেবল "হ্যাঁ" এর উত্তর দিতে পারে এবং নির্দিষ্টটির জন্য কোনও সুপারিশ দিতে পারে না, তবে এটি খুব সহায়ক হবে না। শুভকামনা এর সাথে!
MichaelHouse

2
আপনি কি আপনার টেক্সচার সংকোচন করছেন?
গাইআরটি

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

উত্তর:


17

আমাদের আরটিএসের (কেএম রিমেক) ক্ষেত্রেও আমাদের একই রকম ঘটনা রয়েছে। সমস্ত ইউনিট এবং ঘর sprites হয়। আমাদের কাছে ইউনিট এবং ঘর এবং ভূখণ্ডের জন্য 18,000 স্প্রাইট রয়েছে, এবং আরও বেশি team 6 000 টিমের রঙের জন্য (মুখোশ হিসাবে প্রয়োগ)। দীর্ঘ প্রসারিত আমাদের ফন্টগুলিতে কিছু ~ 30 000 অক্ষরও ব্যবহৃত হয়।

সুতরাং আপনি ব্যবহার করছেন আরজিবিএ 32 অ্যাটলাসের বিরুদ্ধে কিছু অপ্টিমাইজেশন রয়েছে:

  • আপনার স্প্রিটস পুলটি প্রথমে অনেকগুলি ছোট অ্যাটলাসে বিভক্ত করুন এবং অন্যান্য উত্তরে কভার হিসাবে চাহিদা অনুযায়ী সেগুলি ব্যবহার করুন। এটি পৃথকভাবে প্রতিটি অ্যাটলাসের জন্য বিভিন্ন অপ্টিমাইজেশান কৌশল ব্যবহার করতে দেয় । আমার সন্দেহ হয় আপনার নষ্ট র‌্যামের কিছুটা কম পরিমাণে থাকতে হবে, এতো বিশাল টেক্সচারে প্যাক করার সময় নীচে সাধারণত অব্যবহৃত অঞ্চল থাকে;

  • প্যালেটযুক্ত টেক্সচার ব্যবহার করার চেষ্টা করুন । আপনি যদি শেডারগুলি ব্যবহার করেন তবে শেডার কোডগুলিতে প্যালেটটি "প্রয়োগ" করতে পারেন;

  • আপনি আরজিবিএ 8 এর পরিবর্তে আরজিবি 5_এ 1 ব্যবহার করার একটি বিকল্প যুক্ত করতে পারেন (উদাহরণস্বরূপ যদি চেকারবোর্ডের ছায়া আপনার গেমের জন্য ঠিক আছে)। সম্ভব হলে 8 বিট আলফা এড়িয়ে চলুন এবং আরজিবি 5_এ 1 বা ছোট যথার্থতার সাথে সমতুল্য বিন্যাসগুলি (যেমন আরজিবিএ 4) ব্যবহার করুন, তারা অর্ধেক স্থান নিয়ে যান;

  • নিশ্চিত হয়ে নিন যে আপনি স্প্রেটসকে অ্যাটলেসে শক্তভাবে প্যাক করছেন (বিন প্যাকিং অ্যালগরিদমগুলি দেখুন), প্রয়োজনে স্প্রিটগুলি ঘোরান এবং দেখুন যে আপনি রম্বস স্প্রাইটের স্বচ্ছ কোণগুলিকে ওভারল্যাপ করতে পারেন কিনা;

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

  • দেখব বিভাজন বড় sprites (অবশ্যই ম্যানুয়ালি না, কিন্তু প্যাকার মানচিত্রাবলী আপনার জমিন মধ্যে) স্ট্যাটিক পটভূমি পরী ও অ্যানিমেটেড অংশের জন্য ছোট sprites মধ্যে।


2
ডিএক্সটি ব্যবহারের জন্য +1, এটি থাকা খুব ভাল জিনিস। দুর্দান্ত সংক্ষেপণ এবং সরাসরি জিপিইউ দ্বারা ব্যবহৃত হয় যাতে ওভারহেডটি ন্যূনতম হয়।

1
আমি dxt এর সাথে একমত আপনি সম্ভবত ডিএক্সটি 7 সমর্থন (ডিএক্স 11 + হার্ডওয়্যার) এর জন্যও জিজ্ঞাসা করতে পারেন, যা ডিএক্সটি 1 এর সমান আকার তবে (আপাতদৃষ্টিতে) উচ্চমানের। তবে আপনার হয় দ্বিগুণ টেক্সচার (একটি DXT7 এবং একটি DXT1), বা লোড করার সময় সংকোচন / ডিকম্প্রেস করা দরকার।
প্রোগ্রামমুদে

5

সবার আগে আপনাকে আরও বেশি, ছোট টেক্সচার অ্যাটলেস ব্যবহার করতে হবে। আপনার যত কম জমিন হবে তত বেশি কঠিন এবং অনমনীয় মেমরি পরিচালনা হবে। আমি 1024 মাপের একটি অ্যাটলাসের আকার প্রস্তাব করব, এক্ষেত্রে আপনার 2 টির পরিবর্তে 128 টেক্সচার হবে বা 2048 এর ক্ষেত্রে আপনার কাছে 32 টেক্সচার থাকবে যা আপনি প্রয়োজন মতো লোড এবং আনলোড করতে পারবেন।

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

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

তবে এখানে একটি সমস্যা রয়েছে, যখন অপ্রত্যাশিত কিছু ঘটেছিল যখন গেমটি প্রত্যাশা করতে সক্ষম হয় নি?

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

আমি বাদ দেওয়া কিছু প্রয়োজনীয়তা যুক্ত করেছি। লোডিং স্ক্রিন, বা কোনও ধরণের লোড সম্ভব নয়। ব্যাকগ্রাউন্ডে বা স্বতন্ত্র টিক্সের (প্রত্যেকের জন্য 15 মিমি কম) অভ্যন্তরে সবকিছুই করা উচিত যখন বেশিরভাগ সময় সাধারণত ইতিমধ্যে রেন্ডার এবং গেম আপডেটের মাধ্যমে রেন্ডার করে ব্যবহৃত হয়। যাইহোক, ছোট অংশগুলিতে বিভক্ত হওয়া স্যুইচিংয়ে কিছুটা নমনীয়তা যুক্ত করতে পারে, এটি নিশ্চিত হওয়ার জন্য এটি দ্রুততর হবে। প্রশ্নটি এটি রেন্ডারিংয়ের সময় পারফরম্যান্সকে কতটা আঘাত করে, যেমন অঙ্কন করার সময় উত্স বিটম্যাপটি স্যুইচ করা রেন্ডারটি কমিয়ে দেয়। আমাকে কতটুকু বলতে হবে তার সঠিক পরিমাপ করতে হবে।
মারউইন

@ মারউইন পারফরম্যান্সের প্রভাবটি হ্যাঁ, তবে আপনি যেহেতু 2 ডি নিয়ে কাজ করছেন তা এটিকে এখনও সমস্যা থেকে দূরে থাকা উচিত। যদি রেন্ডারিংটি বর্তমানে ফ্রেম প্রতি 1 মিমি নিয়ে থাকে এবং ছোট টেক্সচার ব্যবহারের মাধ্যমে হঠাৎ এটি 2 মিমি নেয় তবে এটি এখনও সুসংগত 60 এফপিএসে পৌঁছানোর জন্য যথেষ্ট দ্রুতগতির। (16 মিমি)
এপিআই-বিস্ট

@ মারউইন মাল্টিপ্লেয়ার কৌতুকপূর্ণ বুনস, সর্বদা ছিল, সর্বদা থাকবে। খুব সম্ভবত আপনাকে সেখানে আপস করতে হবে। আপনার তোতলা থাকবে, কেবল কারণ আপনার ইন্টারনেটের মাধ্যমে ডেটা স্থানান্তর করতে হবে, প্যাকেজগুলি হারিয়ে যাবে, পিংস হঠাৎ স্পাইক হতে পারে etc. কখন অপেক্ষা করতে হবে এবং অন্যান্য খেলোয়াড়দের জন্য কীভাবে অপেক্ষা করতে হবে তা জানা।
এপিআই-বিস্ট

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

@ মারউইন এইচএম, 10 কে অবজেক্টগুলি সাধারণত পিসি বা আধুনিক ল্যাপটপের জন্য কোনও সমস্যা হওয়া উচিত নয় যদি আপনি সঠিক ব্যাচিং ব্যবহার করেন, আপনি কি নিজের রেন্ডারিং কোডটি প্রোফাইল করেছেন?
এপিআই-বিস্ট

2

বাহ, এটি আমি অনুমান করি যে 3 ডি মডেলগুলি থেকে উত্পন্ন অ্যানিমেশন স্প্রিটগুলি মোটা পরিমাণে?

আপনার সত্যিই কাঁচা 2 ডি এ গেমটি করা উচিত নয়। যখন আপনি স্থির দৃষ্টিকোণটি নিয়ে একটি মজাদার ঘটনা ঘটে, আপনি নির্বিঘ্নে প্রাক-রেন্ডারযুক্ত স্প্রাইট এবং ব্যাকগ্রাউন্ডকে লাইভ-রেন্ডার করা 3 ডি মডেলের সাথে মিশ্রিত করতে পারেন, যা কিছু গেম দ্বারা ভারী ব্যবহৃত হয়েছে। আপনি যদি এমন সূক্ষ্ম অ্যানিমেশনগুলি চান যা এটি করার সবচেয়ে প্রাকৃতিক উপায় বলে মনে হয়। একটি 3D ইঞ্জিন পান, আইসোমেট্রিক দৃষ্টিভঙ্গি ব্যবহারের জন্য এটি কনফিগার করুন এবং আপনি যে চিত্রগুলির জন্য স্প্রিটগুলিকে ইমেজ সহ সাধারণ সমতল পৃষ্ঠ হিসাবে ব্যবহার করতে অবিরত করেন তা রেন্ডার করুন। এবং আপনি একটি 3 ডি ইঞ্জিনের সাথে টেক্সচার সংক্ষেপণটি ব্যবহার করতে পারেন, এটি একা এক বিশাল পদক্ষেপ।

আমি মনে করি না লোডিং এবং আনলোড আপনার জন্য অনেক কিছু করবে কারণ আপনি একই সাথে পর্দায় বেশ কিছু করতে পারেন।


2

প্রথমে সবচেয়ে কার্যকর টেক্সচার বিন্যাসটি সন্ধান করুন যা আপনি খেলার ভিজ্যুয়ালগুলিতে এখনও খুশি থাকাকালীন এটি আরজিবিএ 4444, বা ডিএক্সটি সংকোচন ইত্যাদি কিনা আপনি যদি ডিএক্সটি আলফা সংকুচিত চিত্রটিতে উত্পন্ন শিল্পকর্মগুলির সাথে সন্তুষ্ট না হন তবে এটি কার্যকর হবে কি? আলফার জন্য 4 বা 8 বিট গ্রেস্কেল মাস্কিং টেক্সচারের সাথে মিলিত রঙের জন্য DXT1 সংক্ষেপণ ব্যবহার করে চিত্রগুলি অপ-স্বচ্ছ করতে? আমি ভাবছি আপনি জিজিআইয়ের জন্য আরজিবিএ ৮৮৮৮ এ ​​থাকবেন।

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

পরবর্তী পদক্ষেপটি হ'ল এই টেক্সচারের মিপম্যাপ সংস্করণ উত্পন্ন করা হবে যেমন উপরে কেউ উল্লেখ করেছেন। আমি এগুলিকে একক ফাইলে সংরক্ষণ না করে পৃথক করে রাখব। সুতরাং আপনি প্রতিটি ফাইলের 1024x1024, 512x512, 256x256 ইত্যাদি সংস্করণ দিয়ে শেষ করবেন এবং আমি কখনই প্রদর্শিত হতে চাই না এমন বিবরণের সর্বনিম্ন স্তরে পৌঁছানো পর্যন্ত আমি এটি করব।

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

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


1

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

আপনি যে বড় জুম-আউট প্রয়োগ করতে সক্ষম হতে চান তার জন্য আপনাকে মাইপম্যাপ ব্যবহার করতে হবে। মাইপম্যাপগুলি আপনার টেক্সচারের নিম্ন-রেজোলিউশন সংস্করণ যা ব্যবহার করা হয় যখন ক্যামেরা থেকে বস্তুগুলি পর্যাপ্ত পরিমাণে থাকে। এর অর্থ হ'ল আপনি আপনার 8192x8192 কে 4096x4096 হিসাবে সংরক্ষণ করতে পারবেন এবং তারপরে আরও একটি 2048x2048 এবং এর মতো আরও কিছু, এবং আপনি স্ক্রিনে স্প্রিট দেখতে যত কম ক্ষুদ্রতর রেজোলিউশনে স্যুইচ করতে পারেন। আপনি উভয় এগুলিকে আলাদা টেক্সচার হিসাবে সংরক্ষণ করতে পারেন বা লোড করার সময় সেগুলি পুনরায় আকার দিতে পারেন (তবে রানটাইমের সময় মিপম্যাপ তৈরি করা আপনার গেমটির লোডিংয়ের সময়কে বাড়িয়ে তুলবে)।

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


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

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

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

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

1
এই ফাইলগুলিতে এমআইপি-ম্যাপযুক্ত টেক্সচারটি প্লেয়ার জুম ইন করার সময় আমাকে সমস্ত অ্যাটলাস পুনরায় লোড করতে বাধ্য করবে the ইঞ্জিনটির পক্ষে বেশিরভাগ জন্য মাত্র কয়েক ইউনিট এমএস রয়েছে, এটি করার উপায় আমি দেখতে পাচ্ছি না।
মার্ভিন 5

0

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.