2 ডি গেমের জন্য মসৃণ ভূখণ্ড উত্পন্ন করার সহজ পদ্ধতি কোনটি?


23

"মুন বগি" বা "রুট 960" এর মতো 2 ডি গেমের জন্য মসৃণ ভূখণ্ড উত্পন্ন করার সহজ পদ্ধতিটি কী?

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

উত্তর:


13

একটি উপায় আপনি নিম্নলিখিতটি অর্জন করতে পারেন:

  • এলোমেলো উচ্চতা সহ পর্দার মাঝখানে একটি পয়েন্ট তৈরি করুন; আপনার এখন দুটি বিভাগ রয়েছে, এই বিন্দুর প্রতিটি পাশে একটি
  • প্রতিটি বিভাগের জন্য, এই বিভাগের মাঝখানে একটি বিন্দু রেখে দুটি ভাগে বিভক্ত করুন, এর দুটি প্রতিবেশীর মধ্যে এলোমেলো উচ্চতা (রেঞ্জ) সহ
  • পুনরাবৃত্তি n বার।

দৃশ্যের বিবরণে যা ঘটে তা প্রতিটি পুনরাবৃত্তির সাথে সূক্ষ্ম হয়।

বাউন্ডারি কেসগুলি আপনি কীভাবে পরিচালনা করবেন তা আপনার নিজস্ব: আপনি উদাহরণস্বরূপ (0, উচ্চতা / 2) এবং (প্রস্থ, উচ্চতা / 2) এ পয়েন্ট ধরে নিতে পারেন।

আশাকরি এটা সাহায্য করবে!

সম্পাদনা: উদাহরণের জন্য আমি এখানে তৈরি একটি চিত্র:

terraingen

এই একই ধারণা!


12

ধরে নিই যে আপনি একটি সত্যিকারের মসৃণ অঞ্চল চান, আমি কোলাহল-ভিত্তিক উত্তরগুলি থেকে ফিরে আসার এবং সেগুলি কোথা থেকে এসেছে তা বোঝার পরামর্শ দেব। একটি 'গোলমাল' সংকেত মূলত র্যান্ডম amplitudes এর অসীম অনেক sinusoids একটি সমষ্টি, পৌনঃপুনিকতা একটি ফাংশন কর্তৃক প্রদত্ত একটি প্রদত্ত ফ্রিকোয়েন্সিতে 'গড়' প্রশস্ততা সাথে আছেন । আপনি বেশিরভাগ সাধারণ 'শব্দ' সংজ্ঞা এইভাবে পেতে পারেন। উদাহরণস্বরূপ, ব্রাউনিয়ান গতিতে 1 / f ^ 2 রয়েছেফ্রিকোয়েন্সি প্রতিক্রিয়া (যা, প্রদত্ত ফ্রিকোয়েনির গড় প্রশস্ততা ফ্রিকোয়েন্সি বর্গের বিপরীতভাবে সমানুপাতিক): এর অর্থ হ'ল কাছের পয়েন্টগুলির একে অপরের সাথে পারস্পরিক সম্পর্ক রয়েছে, যেহেতু সংকেতের উচ্চ-ফ্রিকোয়েন্সি উপাদানগুলি ভারীভাবে হয় damped। বিপরীতে, ক্লাসিক ফ্র্যাক্টাল গোলমাল (মিডপয়েন্ট ডিসপ্লেসমেন্টেশন, পার্লিন শব্দ, ইত্যাদি) এর 1 / f ফ্রিকোয়েন্সি প্রতিক্রিয়া রয়েছে; কাছাকাছি পয়েন্টগুলির মধ্যে আরও বৈচিত্র রয়েছে, তবে এখনও বেশ কিছুটা পারস্পরিক সম্পর্ক। আরও এক ধাপ এগিয়ে, সাদা গোলমালের একটি ধ্রুবক ফ্রিকোয়েন্সি প্রতিক্রিয়া থাকে - কোনও পয়েন্টের মধ্যে কোনও মিল নেই।

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

  1. পরিসরে [1..10] এ এলোমেলোভাবে 4 (আসল) নম্বর চয়ন করুন - এগুলি আপনার সাইন ওয়েভগুলির ফ্রিকোয়েন্সি হবে। আমি এলোমেলো.আরজে 'পাশা ঘূর্ণিত' করেছি এবং পেয়েছি: f 0 = 1.75, f 1 = 2.96, f 2 = 6.23, এবং f 3 = 8.07। 4 নম্বর সম্পর্কে যাদুকর কিছুই নেই (আপনি আরও ব্যবহার করতে পারেন তবে কোনও কম ব্যবহার করে পৃথক সাইন ওয়েভগুলি আরও সুস্পষ্ট করে তুলতে শুরু করবে) বা এখানে 1 থেকে 10 ব্যাপ্তি রয়েছে (এটি নিশ্চিত করার এক উপায় যা আপনার সর্বোচ্চ এবং সর্বনিম্ন ফ্রিকোয়েন্সি খুব বেশি দূরে নয়)। [২.২] এবং অন্যান্য পরিসীমাটির মধ্যে একটি ফ্রিকোয়েন্সি বেছে নেওয়া আপনার বুদ্ধিমান হতে পারে যাতে আপনার পরিচিত 'প্রভাবশালী' সাইনোসয়েড থাকে।
  2. এই চারটি (অথবা যদিও বহু) ফ্রিকোয়েন্সি প্রত্যেকের জন্য আমি , যার বিস্তৃতি চয়ন একটি আমি মধ্যে সীমার মধ্যে কোথাও চ -C / আমি এবং সি / এফ আমি কিছু ধ্রুবক জন্য সি । আপনি যে মানটি এখানে চয়ন করেছেন তা আপনার তরঙ্গের সামগ্রিক প্রশস্ততা নিয়ন্ত্রণ করে - সুবিধার্থে আমি সি = 1 বাছাই করে নিই তবে আমার বিস্তৃত র্যান্ডম সংখ্যার প্রয়োজন [-1 / 1.75 (= -0.571) .. 1 / 1.75 (= 0.571) ], এবং একইভাবে [-0.338 .. 0.338], [-0.161 .. 0.161], এবং [-0.124 .. 0.124]। চারবার আবার পাশা ঘূর্ণায়মান, আমি একটি 0 = -0.143, একটি 1 = -0.180, একটি 2 = -0.012 পেয়েছি এবংএকটি 3 = 0.088। (দ্রষ্টব্য যে এটি সম্ভবত এই পদক্ষেপটি করার সবচেয়ে ভাল উপায় নয় - যেহেতু ফাংশনের সর্বাধিক সম্ভাব্য মান হ'ল এমপ্লিটিউডস অ্যাবস ( একটি 0 ) + অ্যাবস ( একটি 1 ) + অ্যাবস ( একটি 2 ) + অ্যাবস ( একটি 3 ), এটি আপনার চার প্রতিটি বিভক্ত করা আরও জানার জন্য হতে পারে একটি আমি এই সমষ্টি দ্বারা মান একবার আপনি তাদের উত্পন্ন করে থাকেন, এবং তারপর সংখ্যাবৃদ্ধি দ্বারা প্রতিটি এক সি যাতে আপনি নিশ্চিত সুনির্দিষ্ট সর্বাধিক ফাংশন সিদ্ধিলাভ করতে পারেন হতে পারেন যে সি ।)
  3. চার 'অফসেট' চয়ন করুন আমি সীমার মধ্যে, প্রতিটি [0..2π] (0..6.28) - এগুলো কি তোমার তরঙ্গ শুরু পয়েন্ট খামচি হবে যাতে তারা সব 0 এ শুরু করো না আমি পেয়েছিলাম 0 = 1.73, 1 = 4.98, 2 = 3.17, এবং 3 = 4.63।
  4. 'প্লট' ফাংশন f (x) = a 0 sin ( f 0 (kx + o 0 ) ) + a 1 sin ( f 0 (kx + o 1 ) ) + a 2 sin ( f 0 (kx + o 0 ) ) + একটি 3 পাপ ( f 0 (কেএক্স + ও 0 ) ) - এখানে কে অন্য ধ্রুবক, এটি আপনার ফাংশনের অনুভূমিক 'প্রসারিত' নিয়ন্ত্রণ করে। আপনার নিজের প্রয়োগের জন্য এটি কী তা নির্ধারণ করতে হবে; সুবিধার্থে আমি কেবল কে= 1, এবং তাই আমার সামগ্রিক ফাংশন f (x) = -0.143 পাপ (1.75 ( x + 1.73)) - 0.180 পাপ (2.96 ( x +4.98)) - 0.012 পাপ (6.23 ( x +3.17)) + 0.088 পাপ (8.07 ( x +4.63))।

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

সাধারণ র্যান্ডম সাইনোসয়েড


10

মিডপয়েন্ট স্থানচ্যুতি অ্যালগরিদম সুন্দর 2D ভূখণ্ড তৈরি করতে পারেন।

ভূখণ্ড উদাহরণ

মিডপয়েন্ট ডিসপ্লেসমেন্ট এবং @ টাইমাল যা বোঝায় তার মধ্যে সূক্ষ্ম ভিন্ন different টাইকেলের অ্যালগরিদম দিগন্তকে বিভক্ত করে একটি নতুন উচ্চতা তুলে ধরে। এটি এমন অঞ্চল তৈরি করে যেখানে শৃঙ্গগুলি সমানভাবে ব্যবধানে থাকে। মানুষ নিয়মিততা বাছাইতে দুর্দান্ত, তাই উত্পন্ন অঞ্চলটি প্রাকৃতিক নয়, উত্পন্ন বলে মনে হবে।

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

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


7

এলোমেলো উচ্চতা উত্পন্ন করতে আপনি শব্দ শব্দ ব্যবহার করতে পারেন । এর মধ্যে সরলতম হ'ল মান শব্দ, যা আপনার বর্ণনার ঠিক মতো কাজ করে: আপনি কিছু এলোমেলো পূর্ণসংখ্যার উচ্চতা তৈরি করেন এবং তারপরে তাদের মধ্যবর্তী উচ্চতাগুলি ইন্টারপোলেট করুন। সর্বাধিক ব্যবহৃত ইন্টারপোলেশন পদ্ধতিটি কিউবিক এস-কার্ভ ম্যাপিং:

ধরুন আপনার h0পয়েন্টে x0উচ্চতা h1এবং পয়েন্টে উচ্চতা রয়েছে x1। তারপরে যে কোনও সময়ে উচ্চতা অর্জন করতে x( x0<=x<=x1), আপনি ব্যবহার করুন

t = (x-x0)/(x1-x0); // map to [0,1] range
t = t*t*(3 - 2*t); // map to cubic S-shaped curve
h = h0+t*h1;

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

fbm(x)=h(x) + 0.5*h(2*x) + 0.25*h(4*x) + 0.125*h(8*x);

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

এটি একটি শক্তিশালী কৌশল। আপনি বিভিন্ন ফ্রিকোয়েন্সি ওজন সহ ফ্রিকোয়েন্সি গুণক সঙ্গে খেলতে পারেন বা শব্দ বিকৃতিতে কিছু ফাংশন যুক্ত করতে পারেন। উদাহরণস্বরূপ, আরও "বিস্মৃত" অনুভূতি পেতে, h(x)পরিবর্তন করা যেতে পারে 1-abs(h(x))(ধরে নেওয়া -1<=h(x)<=1)

যাইহোক, যদিও এই সমস্ত সুন্দর, এই কৌশলটির মারাত্মক সীমাবদ্ধতা রয়েছে। "হাইটলাইন" ভিত্তিক পদ্ধতির সাহায্যে আপনি কখনই ভূখণ্ড "ওভারহ্যাঙ্গস" রাখতে পারবেন না। এবং আমি তাদের "মুন বগি" -র মতো খেলায় খেলতে খুব সুন্দর বৈশিষ্ট্য বলে মনে করেছি।

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


4

ভূখণ্ডের উচ্চতার মানচিত্র তৈরির জন্য দুটি জনপ্রিয় পদ্ধতি রয়েছে।

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


ওপি 2 ডি, মারিও-স্টাইলের ল্যান্ডস্কেপ সম্পর্কে কথা বলছে, তবে এখনও এগুলি ভাল লিঙ্কগুলি।
দশ

1

আমার ধারণাটি হ'ল ধীরে ধীরে শোনার ফাংশন তৈরি করা হবে। প্রথমে এমন একটি পদ্ধতি সহনোইজ (ইনট) যা একটি "এলোমেলো" অন্তর্ভুক্ত করে তবে ইনপুটটির উপর নির্ভর করে। আপনি যদি একই ইনপুট দু'বার ব্যবহার করেন তবে ফলাফলটি একই হবে।

তারপরে একটি ফ্ল্যাটনয়েস (ফ্লোট) তৈরি করতে একটি স্মুথিং পদ্ধতি ব্যবহার করুন যা এলোমেলো মান তৈরি করতে ইনপুটটির চারপাশে দুটি পূর্ণসংখ্যা ব্যবহার করে।

তারপরে এক্স অবস্থান এবং ইনপুট হিসাবে Y ব্যবহার করুন। ফলাফলটি একটি স্মুথযুক্ত বক্ররেখা হবে তবে এলোমেলো উচ্চতার সাথে।

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