मैं वर्म्स-स्टाइल इलाके कैसे उत्पन्न कर सकता हूं?


48

मैं एक वर्म-स्टाइल गेम पर काम कर रहा हूं और कुछ इलाके को प्रक्रियात्मक रूप से उत्पन्न करना चाहता हूं। मैंने पहले से पेरेलिन शोर का उपयोग करते हुए बहुत सारे इलाके का निर्माण किया है, और यही मैंने इस खेल के लिए उपयोग करना शुरू किया है। इसके साथ एकमात्र समस्या यह है कि यह बहुत सरल और उबाऊ है, जिससे मुझे कुछ पहाड़ियाँ मिल रही हैं लेकिन मुझे जो जटिलता चाहिए वह नहीं है। मुझे गुफाओं और लटके हुए पहाड़ों जैसी विशेषताएं हैं और मैं तैरते हुए द्वीपों और इस तरह से बुरा नहीं मानता। कुछ इस तरह, लेकिन यहां तक ​​कि crazier ठीक होगा:

यहाँ छवि विवरण दर्ज करें

मैंने पहले क्लासिक पर्लिन शोर का उपयोग करके इलाके को उत्पन्न करने के बारे में सोचा, फिर गुफाओं को बनाने के लिए सिर्फ हिस्सों को हटा दिया और क्या नहीं, लेकिन मुझे उन हिस्सों को हटाने में मार्गदर्शन करने में परेशानी हो रही है। क्या इस तरह के इलाके पैदा करने का कोई विकल्प है?


क्या लाल गुफाओं का प्रतिनिधित्व करता है या क्या यह इलाक़े का हिस्सा है?
रिचर्ड मार्स्केल - Drackir 15

यह इलाके का हिस्सा है। मैं सिर्फ उस छवि को Google करता हूं, जिसे मैं पूरा करना चाहता था। "गुफा" भाग उस छोटे से छेद को दाईं ओर ले जा सकता है, अगर इसे छोड़ दिया गया इलाके के अंदर अधिक जारी रखा गया था।
Xeon06

@ डाकिर, छवि को संपादित किया।
Xeon06

संबंधित: gamedev.stackexchange.com/questions/6721/… (लेकिन यह डुप्लिकेट नहीं है क्योंकि यह पीढ़ी के एल्गोरिदम बनाम कार्यान्वयन पर ध्यान केंद्रित करता है)।
जोश

@JoshPetrie वास्तव में। मैं विनाश के साथ अच्छा हूँ। यह वह पीढ़ी है जिससे मैं परेशान हूं।
Xeon06 16

जवाबों:


51

मेरा सुझाव है कि आप 2 डी पेर्लिन-शोर से शुरू करें। कुछ इस तरह:

पर्लिन शोर

फिर छवि पर एक सीमा लागू करें, ताकि आपको कई अलग-अलग द्वीप मिलें, जैसा कि यहां दिखाया गया है:

दहलीज के साथ पेर्लिन शोर

मैंने 0.04 की दहलीज चुनी, दहलीज के ऊपर का सब कुछ नीले रंग का होगा। बाकी बचा काला। फिर उसके बाद, यह निर्धारित करने का समय है कि कौन से "द्वीप" को रखना है और कौन से फेंकना है।

एक संभव दृष्टिकोण विभिन्न ऊंचाइयों पर बाईं से दाईं ओर छवि के माध्यम से चलना होगा और एक निश्चित संभावना को देखते हुए "द्वीप" का चयन करना होगा। उदाहरण चित्र में, सबसे निचली रेखा में 100% की संभावना है, इसलिए इसे पार करने वाले प्रत्येक द्वीप का चयन किया जाएगा (सफेद भरा हुआ)। दूसरी लाइन में 50% की संभावना है और सबसे ऊपर की लाइन में 10% की संभावना है।

एक बार जब आप अपने द्वीपों को उस तरह चिह्नित कर लेते हैं, तो आप एक रूपात्मक ऑपरेशन ( पतला ) लगाकर बीच में अंतराल को बंद कर सकते हैं

पतला द्वीप

और एक संभावित परिदृश्य है।

शोर की "ग्रैन्युलैरिटी" यह निर्धारित करने वाली है कि आपकी दुनिया में कितने छोटे विवरण होने जा रहे हैं। इसलिए इन मूल्यों के साथ प्रयोग करना शायद सबसे अच्छा है।

यह भी कि आपकी "चयन-रेखाओं" को कहाँ और किन संभावनाओं के साथ पोस्ट किया गया है, परिणाम बहुत भिन्न होने वाला है। यदि आपके पास एक द्वीप का "चयन" करने के लिए उच्च संभावना के साथ छवि के शीर्ष के पास एक रेखा है, तो आप किसी प्रकार के गुफा-परिदृश्य, आदि का निर्माण कर सकते हैं।


महान विस्तृत और सचित्र उत्तर के लिए बहुत बहुत धन्यवाद! यह वही है जो मैं करने जा रहा हूँ।
Xeon06

क्या आपके पास इस तरह के विस्तार और इस तरह के स्तर के साथ इस तरह के दिलेर शोर की पीढ़ी पर कोई सुझाव होगा? मैं पूरी शाम कोशिश कर रहा हूं और कहीं नहीं मिल रहा हूं।
Xeon06

@ Xeon06 मैं सिर्फ फ्लैश द्वारा प्रदत्त पेर्लिन शोर समारोह का उपयोग कर रहा था । मापदंडों थे 24के लिए baseXऔर baseY, 1 सप्तक और मैं उत्पादन ग्रेस्केल शोर और विकलांग "फ़्रैक्टल" के लिए चुना। आप इसे किस भाषा में लागू कर रहे हैं?
बंमज़ैक

मैं इसे जावास्क्रिप्ट लागू कर रहा हूं। मैं वेब को एक अच्छे कार्यान्वयन के लिए तैयार कर रहा हूं जो एक सप्ताह के लिए समान परिणाम देगा लेकिन कुछ भी नहीं पा सकता है।
Xeon06

मैंने एक और सवाल किया है, जो कि पर्लिन नॉइज़ पार्ट gamedev.stackexchange.com/questions/20880/fast-noise-generation
Xeon06

6

मैं ध्यान से फ़िल्टर्ड शोर के साथ शुरू करूँगा। आप फ्लोटिंग आइलैंड्स के साथ प्रश्न से जुड़ी तस्वीर की तरह ही कुछ समाप्त करेंगे। जस्टी ने यहां चर्चा की तरह एक गिनती एल्गोरिथ्म का उपयोग करके बाद में अस्थायी द्वीपों को हटा दें


ओह मुझे लगता है कि मैं इसे अभी प्राप्त करता हूं। मुझे 1 डी नहीं बल्कि 2 डी पर्लिन शोर का उपयोग करने की आवश्यकता है। क्या आप फ़िल्टरिंग के बारे में विस्तार से बता सकते हैं?
Xeon06

2
मैं अभी तस्वीरें पोस्ट नहीं कर सकता, लेकिन मैं सिर्फ एक साधारण सीमा फ़िल्टर ए-ला के बारे में बात कर रहा हूँ अगर (0.3> पिक्सेलवैल्यू> 0.5) कीप इट (); 'ध्यान से' बिट 0.3 और 0.5 सही हो रहा है। आपके पास एक रैखिक (या नहीं) प्रवणता भी हो सकती है, जो शीर्ष पर उच्च अल्फा से शुरू होती है, धीरे-धीरे नीचे 0 पर हो रही है, इसलिए आपके पास एक आकाश के लिए कमरा है, और जमीन ज्यादातर भरी हुई है। उम्मीद है की वो मदद करदे।
रावचोल

@ रवाचोल यदि आप किसी चित्र का लिंक पोस्ट करते हैं, तो अधिक प्रतिनिधि वाला कोई व्यक्ति आपके लिए इसे अपनी पोस्ट में जोड़ सकता है।
रिचर्ड मार्स्केल - ड्रैकिर

"अगर (0.3> पिक्सेलवैल्यू> 0.5)", मुझे लगता है कि यह सिर्फ एक टाइपो है, लेकिन यह आपके पोस्ट में विरोधाभासी चीजें होने से भ्रमित हो सकता है ... क्या आप कृपया इसे संपादित कर सकते हैं?
jcora

मैं एक टिप्पणी संपादित करने के लिए प्रतीत नहीं कर सकता। "अगर (0.3 <पिक्सेलवैल्यू <0.5)" पढ़ें, तो जाहिर है।
रावचोल

4

मैंने वास्तव में बुमज़ैक उत्कृष्ट उत्तर से इस शुरुआत को लागू किया।

यहाँ मैं के साथ समाप्त कदम हैं:

  1. पेरलिन शोर के साथ एक छवि उत्पन्न करें
  2. फ्लडफिल जहां आप कुछ इलाके चाहते हैं
  3. बहुत छोटे हैं कि खोखले को हटाने के लिए Dilation + क्षरण
  4. इलाके के अंदर शेष पृष्ठभूमि क्षेत्रों को हटा दें
  5. विरोधी अलियासिंग

और यह परिणाम का एक उदाहरण है: उत्पन्न इलाके का उदाहरण

मैंने यहां पूरी प्रक्रिया के बारे में एक विस्तृत लेख लिखा है और कोड (जावास्क्रिप्ट) खुला स्रोत है, इसे जांचें कि क्या आप उपयोग करने के लिए तैयार हैं;)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.