आप यादृच्छिक ऊंचाइयों को उत्पन्न करने के लिए शोर कार्यों का उपयोग कर सकते हैं । उनमें से सबसे सरल मूल्य शोर है, जो बिल्कुल आपके विवरण की तरह काम करता है: आप कुछ यादृच्छिक पूर्णांक ऊँचाई उत्पन्न करते हैं, और फिर उनके बीच ऊंचाइयों को प्रक्षेपित करते हैं। सबसे अधिक इस्तेमाल किया जाने वाला प्रक्षेप विधि क्यूबिक एस-कर्व मैपिंग है:
मान लीजिए कि आप 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
) में बदला जा सकता है
हालांकि, जबकि यह सब अच्छा है, इस तकनीक में एक गंभीर सीमा है। एक "ऊंचाई" आधारित दृष्टिकोण के साथ, आप कभी भी इलाके "ओवरहैंग्स" नहीं कर सकते। और मुझे लगता है कि उन्हें "मून बग्गी" जैसे गेम में एक बहुत अच्छी सुविधा है।
अच्छा ओवरहांग जोड़ना एक मुश्किल काम है। एक चीज जो मैं सोच सकता हूं - आप एक भग्न "ऊंचाई" के साथ शुरू कर सकते हैं, और इसे स्प्लीन या बेजियर कर्व्स की एक श्रृंखला में "टेसलेट" कर सकते हैं। तब इलाके लाइन को कई "प्रमुख बिंदुओं" द्वारा परिभाषित किया जाएगा। इन प्रमुख बिंदुओं पर कुछ घबराना लागू करें - इससे इलाके का बेतरतीब विरूपण होगा, शायद कुछ दिलचस्प आकार बनेंगे। हालांकि, इलाके के आत्म-चौराहे इस दृष्टिकोण के साथ एक समस्या बन सकते हैं, खासकर उच्च घबराना मात्रा के साथ।