বিশাল পদ্ধতিগতভাবে উত্পন্ন 'মরুভূমি' জগতগুলি


76

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

যাইহোক, আমি ভাবছিলাম যে আমি কীভাবে এটি আরও বৃহত্তর আকারে প্রয়োগ করতে পারি; মাইনক্রাফ্টের স্কেলটি মনে আসে (এটি কি পৃথিবীর পৃষ্ঠের আকারের মতো 8x নয়?) ছদ্ম-অসীম, আমি মনে করি সেরা শব্দটি হবে।

: ডি

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

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

অন্য চূড়ান্তভাবে, আমি মনে করি না যে আমি সত্যিই পার্লিন শব্দের একটি সুপারম্যাসিভ শিট তৈরি করতে পারি। আমি মনে করি এটি কেবল একটি বড় দ্বীপ হবে।

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


9
"কেবলমাত্র বিপুল পরিমাণ দ্বীপপুঞ্জ তৈরি হবে" - অথবা আপনি কেবল জমি / জলের অদলবদল করে যদি তা হ্রদ সহ জমি উৎপন্ন করে।

3
তবুও, আপনি মোটামুটি স্ট্যান্ডার্ড প্যাটার্নে প্রচুর পরিমাণে হ্রদ পাবেন।
কমিউনিস্ট হাঁস

3
@ কাইলোটান: মিনক্রাফ্টটি আকারে অসীম (এটি আসলেই ভাল নয় তবে এটি সত্যিই বড় ... মোট আয়তন = দীর্ঘ M ম্যাক্সভ্যালু x 128 x দীর্ঘ M ম্যাক্সভ্যালু)। অতএব, এটি সমগ্র বিশ্বকে এক শটে তৈরি করে না বা এটি পুরো মানচিত্রটিকে স্মৃতিতে সঞ্চয় করে না। এটি 16x128x16 ব্লকের অঞ্চলগুলিকে সংযোজনীয়ভাবে উত্পন্ন করে যদি তাদের আগে দেখা না করা হয় অন্যথায় এটি ডিস্ক থেকে এগুলি লোড করে।
zfedoran

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

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

উত্তর:


35

আমি মনে করি আপনি এখন যা জিজ্ঞাসা করছেন তা আমি আরও ভাল করে বুঝতে পারি।

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

উচ্চতর জেনারেশনের জন্য পার্লিন শব্দের পরিবর্তে সাইন ব্যবহার করা এবং বিশ্বের কল্পনাটি এক্স অক্ষে অসীম তবে ওয়াই এবং জেড অক্ষের মধ্যে মাত্র 1 ইউনিট উচ্চারণের একটি সরল উদাহরণ রয়েছে।

সূত্রটি হ'ল: height(x,y) = sin(x/20)

গেমটি শুরু হয় এবং আমরা কাছাকাছি অঞ্চলে, অর্থাৎ উচ্চতা তৈরি করি। (0,0) থেকে (9,0):

[0.0, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.34, 0.39, 0.43]

আমাদের একটি পাহাড় আছে, ডানদিকে উঠে গেছে। আসুন আমরা এর প্রান্তে চলে যাই এবং এখন (10,0 থেকে 19,0) থেকে মানগুলি তৈরি করতে হবে:

[0.48, 0.52, 0.56, 0.61, 0.64, 0.68, 0.72, 0.75, 0.78, 0.81]

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

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

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


আপনি অবশ্যই জিনিস পরিষ্কার করতে সাহায্য করেছেন, ধন্যবাদ। :) তবে শোরগোলের মতো কিছু ক্রমাগত হবে না। এবং আফিক্স, যদি এটি ধারাবাহিকভাবে থাকে তবে আমি কোনও 'এলোমেলো' জগতটি পেতাম না। নাকি আমি এখানে কিছু মিস করছি?
কম্যুনিস্ট হাঁস

দ্বিগুণ মন্তব্যের জন্য দুঃখিত, তবে আমি মনে করি উপরেরটি এটির থেকে পৃথক। আপনি যখন 'পার্লিন শব্দের জন্য বিশ্বের স্থানাঙ্কগুলি ব্যবহার করুন' বলবেন, তখন কি এই একই ধরণের প্রভাবটি 'বিশাল' শব্দের শিট উত্পন্ন করার মতো হবে তবে কিছু অংশে? আমি আজ উত্থাপকে কিছুটা ধীর বোধ করছি।
কম্যুনিস্ট হাঁস

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

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

32

কয়েক বছর আগে আমি লিখেছিলাম এই টিউটোরিয়ালটি আপনাকে যা চাইবে তার মতো কিছু দিতে পারে:

বিকল্প পাঠ

আপনি যদি শেষ ধাপে দ্বীপটি পরিবর্তন করেন তবে মানচিত্রের প্রান্তে পৌঁছে না এমন একক ল্যান্ডমাসের দিকে ঝোঁক।


7
দুর্দান্ত দর্শন!
zfedoran

3
আমার মনে আছে প্রাকৃতিক ঘটনার সিমুলেশন সম্পর্কে আমার মাস্টার্স গবেষণার সময় এই টিউটোরিয়ালটি ব্যবহার করা হয়েছিল। আমি আমার 3 ডি ওয়ার্ল্ড জুড়ে আকাশের গম্বুজ তৈরি করতে "পাহাড়" উদাহরণটি ব্যবহার করেছি। ভূখণ্ড প্রজন্মের ধারণার দুর্দান্ত ভূমিকা।
সিএমসিএটাকনি

1
পাগল, দারুণ! আমি জানি না যে সত্যিই কেউ এটি ব্যবহার করেছেন।
উপুড়হস্ত

1
ঈশ্বর !!! আমি এটিও পূর্ববর্তী প্রকল্পে ব্যবহার করেছি ... ভূখণ্ডটি উত্পন্ন করার সহজতম উপায় যা আমি কখনই পেরিয়ে এসেছি !!!
যুদ্ধ

15

একটি বিশাল দ্বীপ তৈরি করতে আপনার একবারে এটি তৈরি করার দরকার নেই। আপনি অঞ্চলগুলি দেখার সময় আমি অবিচ্ছিন্নভাবে অঞ্চলগুলি তৈরি করব।

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

প্রথম অষ্টক বিস্তারিত

এই নিবন্ধটি সহায়তা করা উচিত: http://freepace.virgin.net/hugo.elias/models/m_perlin.htm

আপনি যদি অসীম 3 ডি বিশ্ব সম্পর্কে এবং বিভিন্ন কৌশল সম্পর্কে শিখতে চান তবে আপনি শব্দটি ইনপুট এবং আউটপুট নিয়ে খেলার মাধ্যমে ভূখণ্ডের চেহারা পরিবর্তন করতে পারেন, এই নিবন্ধটি একবার দেখুন: http://http.developer.nvidia.com /GPUGems3/gpugems3_ch01.html

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


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

আমি মনে করি পার্লিন শব্দটি কীভাবে কাজ করে সে সম্পর্কে আপনি এখনও কিছুটা বিভ্রান্ত হতে পারেন। পার্লিন শব্দের জন্য এক্স এবং ওয়াই সমন্বয় অফসেটগুলি প্রেরণ করে আপনি পৃথক 16x16 ব্লকের অংশ তৈরি করতে পারেন। পার্লিননয়েজ ৩ ডি (ফ্লোট এক্স, ফ্লোট ওয়াই) ফাংশনটি কীভাবে এক্স এবং ওয়াই সমন্বয় করে তা লক্ষ করুন। অন্য কথায় এটি কিছু (x, y) পজিশনের জন্য শব্দ উত্পন্ন করে। এছাড়াও, কম অষ্টাভ উত্পাদন অষ্টকের তরঙ্গদৈর্ঘ্য পরিবর্তনের মত নয়। কম অষ্টভুজ => কম সূক্ষ্ম শস্যের বিশদ। আর তরঙ্গদৈর্ঘ্য => অধিক জুমে থাকার।
zfedoran

এছাড়াও, এখানে কোড সহ একটি নিবন্ধ যা আপনাকে দেখায় যে কীভাবে জুম / দীর্ঘতর তরঙ্গদ্বন্দ্বী
স্পার্লিন-


7

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

গেম প্রোগ্রামিং রত্ন in এর "অ্যাডভান্সড পার্টিকাল ডিপোজিশন" নিবন্ধে আমি দেখেছি এমন দুর্দান্ত সমাধানগুলির একটি বর্ণনা করা হয়েছে 7.. ইন্টারনেটে আরও অনেকগুলি উপলব্ধ রয়েছে যাতে এর থেকে প্রাপ্ত অনেকগুলি সংস্থান রয়েছে (যেমন 1 বা 2 ) ।

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