এক্সএনএ-তে বিপুল পরিমাণ অঞ্চল সরবরাহের কার্যকর পদ্ধতি


10

আমি একটি এক্সএনএ গেম তৈরি করছি যা খেলোয়াড়দের জন্য বিশাল জায়গা প্রয়োজন। বর্তমানে, আমি যে পরীক্ষার উচ্চতা ম্যাপটি ব্যবহার করছি তা 4096x4096 এবং 4-বিট বিএমপি হিসাবে সংরক্ষণ করা হয়েছে।

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

আর একটি সমস্যা যার মধ্যে আমি চলে এসেছি তা হ'ল এক্সএনএ-তে একটি হার্ড-সীমা নির্ধারণের কারণে আমি অঞ্চলটিকে সমস্ত এক আদিতে রেন্ডার করতে পারি না।

এই বলে যে, আমি বেশ কয়েকটি সমাধান নিয়ে এসেছি, যার সবগুলি আমি নীচে তালিকাভুক্ত করেছি:

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

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

তাই মূলত আমি এক্সএনএতে অত্যন্ত দক্ষতার সাথে একটি সহজ, সোজা উপায়ের জন্য জিজ্ঞাসা করছি।

আমি সাধারণভাবে গেমের বিকাশে নতুন, তবে এটি আশ্বাসজনক মনে হলে আমি গবেষণা করতে আগ্রহী।

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


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

উত্তর:


5

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

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

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

সম্পাদনা করুন: এখানে জিওক্লিপম্যাপিং এবং হতাশাগ্রহণ উভয়ের একটি শালীন বর্ণনা রয়েছে description

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


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

3

যে কোনও পদ্ধতির জন্য আপনাকে জিপিইউতে ডেটা লোড করতে প্রতি ফ্রেম কাজ করতে হবে তা ত্রুটিযুক্ত হতে চলেছে।

এখানে একটি পদ্ধতির মোটামুটি রূপরেখা যা ভাল সম্পাদন করা উচিত:

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

4096x4096 ভূখণ্ডের জন্য আপনি একবারে জিপিইউতে লোড করা স্বাচ্ছন্দ্যবোধের সীমার বাইরে কিছুটা হলেও - সম্ভবত এটি কয়েকशे এমবি ভার্টেক্স ডেটা (যদিও আপনি এটি নিচে ~ 64 এমবিতে নামতে পারতেন তবে আপনি চালাক)। সুতরাং আপনাকে পটভূমিতে জিপিইউ থেকে ভার্টেক্স বাফারগুলি লোড এবং আনলোড করতে হতে পারে।

(আপনি যদি খণ্ডগুলির পটভূমি লোডিং বাস্তবায়ন করেন তবে এটি অত্যন্ত স্কেলযোগ্য হওয়া উচিত!)

আপনার জিপিইউতে ভারটিেক্স ডেটা থাকার পরে প্রতি-অংশ ভিত্তিতে দৃশ্যমানতা কুলিং করার উপযুক্ত সময় । খণ্ড রেন্ডার করতে কমান্ডটি প্রেরণের দরকার নেই, যদি আপনি জানেন তবে এটি ক্যামেরার পিছনে রয়েছে।

আপনার প্রায় কখনও সিপিইউতে প্রতি-ত্রিভুজ কুলিং করা উচিত নয় !

জিপিইউ আপনার স্ক্রিনের তুলনায় অনেক দ্রুত গতিযুক্ত ত্রিভুজগুলিকে মুছে ফেলবে ।

কর্মক্ষমতা সম্পর্কে আরও তথ্যের জন্য, গেম ডেভ সাইটের উপরে এই উত্তরটি একবার দেখুন ।


0

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


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