कैसे गुफाओं को उत्पन्न करने के लिए जो Minecraft के समान हैं?


34

मैं थोड़ी देर के लिए एक 3D प्रक्रियात्मक दुनिया पर काम कर रहा हूं और गुफा प्रणाली को जोड़ना शुरू करना चाहता हूं। मैं वर्तमान में चिकनी इलाके के लिए मार्चिंग क्यूब्स के साथ संयोजन में इलाके पीढ़ी के लिए 2 डी / 3 डी पेर्लिन शोर का उपयोग कर रहा हूं। जब मैं लंबे समय तक परस्पर जुड़ने वाली गुफाओं की बात करता हूं तो मैं स्तब्ध हो जाता हूं।

मैं Minecraft की गुफा प्रणालियों की तरह कुछ और प्राप्त करने की उम्मीद कर रहा हूं। वे बहुत जुड़े हुए लगते हैं, लगभग किसी भी दिशा में बेतरतीब ढंग से शाखा, और गुफा में लगभग किसी भी बिंदु पर एक समान रूप से बराबर त्रिज्या के साथ एक गोलाकार रूप होगा (सबसे अच्छा शब्द नहीं है, लेकिन यह सुनिश्चित नहीं है कि इसे कैसे रखा जाए) ।

गुफाओं को उत्पन्न करने के लिए सबसे बड़ी चुनौती यह है कि मैं चाहता हूं कि मैं मक्खी पर दुनिया उत्पन्न करना चाहता हूं। वर्तमान में दुनिया को चंक द्वारा उत्पन्न किया गया है, जहां खिलाड़ी है और यह वहां से बाहर की ओर उत्पन्न होता है। मैं दुनिया में से किसी को भी उत्पन्न नहीं करना चाहता और फिर भटकते हुए पैटर्न, सेलुलर ऑटोमेटा, आदि का उपयोग करके गुफाओं को खोद सकता हूं।

क्या कोई प्रसिद्ध एल्गोरिदम है जो इसके लिए इस्तेमाल किया जा सकता है? यदि हां, तो क्या कोई साझा करना चाहता है कि वे कुछ इसी तरह कैसे करते हैं? मैं किसी भी मदद की बहुत सराहना करता हूँ।

एक अच्छा उदाहरण: यहाँ छवि विवरण दर्ज करें


5
एक नजर डालें यहाँ , और नीचे स्क्रॉल।
विलियम मैरीजर

पिछले 24 महीनों के भीतर गेम डेवलपर पत्रिका का मुद्दा है कि आप क्या करने की कोशिश कर रहे हैं, इस पर गहन चर्चा की गई है। मैं उनकी साइट पर मारूंगा।
जोए ग्रीन

@JoeyGreen पत्रिका का नाम क्या है? या क्या आपके पास उनकी साइट का लिंक है?
जंपनेट

1
इसे गेम डेवलपर पत्रिका कहा जाता है। gdmag.com । आप सदस्यता प्राप्त कर सकते हैं और पिछले 10+ वर्षों के लिए पत्रिका के पीडीएफ संस्करण प्राप्त कर सकते हैं। यदि आप साइन अप करते हैं, तो पिछले मुद्दों के माध्यम से खोज करने और उस मुद्दे को खोजने का एक तरीका है जो आप चाहते हैं।
जॉय ग्रीन

जवाबों:


30

Minecraft की गुफाएं "पेर्लिन वर्म्स" विधि द्वारा उत्पन्न होती हैं। जनरेटर इलाके के माध्यम से सांपों और एक सुरंग से बाहर गुफाओं। Minecraft गुफा पीढ़ी के लिए 3 डी पेर्लिन शोर का उपयोग नहीं करता है , क्योंकि यह इलाके में असंबद्ध जेब को छोड़ने के लिए जाता है। बहुत कम अल्फा संस्करणों के बाद से 3 डी पेर्लिन शोर के माध्यम से Minecraft गुफाओं को उत्पन्न नहीं किया गया है।

यहाँ "पेर्लिन कीड़ा" विधि से उत्पन्न ग्नोमेस्सरोल में गुफाएँ हैं।

Gnomescroll गुफा प्रणाली प्रथम व्यक्ति देखें 1

Gnomescroll गुफा प्रणाली पहले व्यक्ति 2 देखें

Gnomescroll गुफा प्रणाली तीसरा व्यक्ति दृश्य 2

ये कामेच्छा के ट्यूटोरियल से "पेरलिन वर्म्स" हैं। तकनीक Minecraft में उत्पन्न गुफाओं को बारीकी से पुन: पेश करती है।

लिनोइस ट्यूटोरियल पेरलिन कीड़े

स्नैकिंग पैरामीटर गुफा प्रणाली की गुणवत्ता को प्रभावित करता है और यह निर्धारित करता है कि गुफाएं कितनी ऊर्ध्वाधर हैं और वे कितनी तेजी से दिशा बदलते हैं। मिनीक्राफ्ट शाखा में गुफाएं और गुफा सुरंग की त्रिज्या गुफाओं की लंबाई से अधिक है।

माइनक्राफ्ट गुफ़ाओं को चंक आधार पर उत्पन्न करता है। आवश्यक दृष्टिकोण जटिल है और सर्वर मोडर्स द्वारा रुचि के बावजूद अभी तक किसी ने भी Minecraft के गुफा जनरेटर को पूरी तरह से रिवर्स नहीं किया है।

सबसे अधिक संभावना दृष्टिकोण, स्नैकिंग गुफाओं को चंक द्वारा उत्पन्न करता है क्योंकि अनंत नक्शा उत्पन्न होता है और बाहर की ओर फैलता है। वर्तमान चंक पर गुफाएं कुछ एन के लिए निकटतम एन चंक्स पर गुफा के बीजों के कार्य हैं। एक यादृच्छिक संख्या जनरेटर का उपयोग करना जो चंक समन्वय का एक कार्य है गुफाओं को सीड करना यह संभव है कि वर्तमान के लिए गुफाओं पर गुफाओं की गणना करें। अनंत नक्शा केवल परिमित चंक त्रिज्या के भीतर विखंडू का मूल्यांकन करते समय।


3
क्या आप इस "पेर्लिन वर्म्स" चीज़ के बारे में जानने के लिए कुछ जानकारी या संसाधन जोड़ सकते हैं?
डेविड गॉविया

1
यह "पेर्लिन वर्म्स" libnoise.sourceforge.net/examples/worms/index.html
HaltingState

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

3
ठीक ठीक। प्रत्येक कृमि का एक प्रारंभिक बिंदु होता है और इसे समाप्त कर दिया जाता है, अगर यह कुछ विशेष दायरे से बाहर भटकता है। एक यादृच्छिक संख्या जनरेटर है जो नियतात्मक रूप से एक छद्म यादृच्छिक संख्या अनुक्रम उत्पन्न करता है जो चंक निर्देशांक का एक कार्य है। ये यादृच्छिक संख्याएँ निर्धारित करती हैं कि उस नोड में कहाँ और कितने कीड़े उत्पन्न होते हैं। कीड़े भी शाखा कर सकते हैं। कम्प्यूटेशनल बोझ कम हो जाता है अगर कीड़े अधिक "स्थानीय" होते हैं और एक छोटे से chunk त्रिज्या से अधिक उद्यम नहीं कर सकते।
HaltingState

शायद वैसा नहीं, जैसा मैं सुनना चाहता था, लेकिन मैं क्या उम्मीद कर रहा था। धन्यवाद फिर से HaltingState। :)
मिथक

7

मैं उन क्षेत्रों के अंदर बिंदुओं का एक बादल उत्पन्न करूंगा जहां इलाके ठोस हैं - आप विभिन्न घनत्वों के साथ प्रयोग कर सकते हैं। फिर मैं सभी बिंदुओं को जोड़ने के लिए एक न्यूनतम फैले हुए पेड़ की तरह एक एल्गोरिथ्म का उपयोग करूंगा - यह सुनिश्चित करेगा कि प्रत्येक क्षेत्र पहुंच योग्य है। फिर बस बड़े खोखले (वायु से बना) क्षेत्रों को नोड से नोड (यानी voxels की एक मोटी रेखा) आकर्षित करें।


मैं शायद यह समझ नहीं पा रहा हूं कि आप इससे क्या मतलब रखते हैं, लेकिन मैं दुनिया को उत्पन्न करने के साथ-साथ चंक द्वारा फ्लाई चंक पर ऐसा कैसे करूंगा?
मिथक

एक संभव तरीका यह है कि प्रत्येक कबाड़ के भीतर न्यूनतम फैले हुए पेड़ को अलग से उत्पन्न किया जाए, फिर प्रत्येक चूजों के बीच निकटतम दो गांठों को खोजकर प्रत्येक ठोड़ी को जोड़ दें। अपने डिफ़ॉल्ट इलाके एल्गोरिथ्म के साथ एक ठोड़ी भर जाने के बाद, आप इसे न्यूनतम फैले हुए पेड़ के चारों ओर खोखला कर सकते हैं।
गवन वूलरी

1
एक और (आसान) समाधान, हालांकि कम कुशल और शायद "नॉइज़ियर", एक पथ को बनाने के लिए ब्राउनियन गति का उपयोग करना है (बेतरतीब ढंग से चींटी खुदाई की तरह)।
गवन वूलेरी

2

गेम डेवलपर मैगज़ीन के अप्रैल 2011 के अंक में इस पर विस्तार से बात की गई है। पेरलिन नॉइज़ फ़ंक्शंस - पेज 21 पर शुरू होने वाले संसारों के निर्माता को देखें।


वे प्रत्येक चरण (समारोह) और दिखाने के रूपांतरों के लिए स्क्रीनशॉट दिखाने
quantumpotato

1

यह निर्धारित करने के लिए कि क्या सुरंगें हैं या नहीं और फिर गुफाओं को रखने के लिए उनका उपयोग करने के लिए प्रत्येक चंक के लिए मान असाइन करने के लिए शोर फ़ंक्शन का उपयोग करें। यदि आप सुरंग चाहते हैं, तो बस अधिक शोर कार्यों (विभिन्न बीजों के साथ) का उपयोग करें और निर्धारित करने के लिए उनके मान का उपयोग करें कि क्या सुरंग हैं। उसके बाद, सुरंगों को बनाने के लिए साधारण "ड्राइंग" फ़ंक्शन का उपयोग करें। सब कुछ अधिक यथार्थवादी बनाने के लिए, उक्त गुफाओं / सुरंगों के मूल बिंदुओं के लिए यादृच्छिक विस्थापन करने के लिए अधिक शोर का उपयोग करें।

यदि आप कई शोर कार्यों का उपयोग नहीं करना चाहते हैं, तो आप बड़ी दूरी पर जांच कर सकते हैं - उदाहरण के लिए, शोर 3 डी (2,2,2) पर करने के बजाय (2,2,2) शोर 3 डी (2,2) पर करें। 16) और एक मूल्य के लिए (2,2,16) का उपयोग करें, (2,2,17) दूसरे मूल्य के लिए, आदि .... फिर बस अपनी आवृत्ति को ट्यून करें या तो सभी मूल्यों को स्वतंत्र बनाने के लिए या छोटे पैमाने पर सहसंबद्ध।

गुफा के घनत्व को पूरी तरह से अलग-अलग करने के लिए, एक और, कम आवृत्ति फ़ंक्शन का उपयोग करें, जो कहा मूल्यों को प्रभावित करेगा।

यदि यह गन्दी गुफाओं में परिणत होता है, तो बस उक्त परस्पर बिंदुओं की दूरी बढ़ाएँ अन्यथा एल्गोरिथ्म को ट्यून करें।

मुझे यकीन नहीं है कि अगर Minecraft इस तरह की गुफाएं करता है (हालांकि मुझे लगता है कि यह करता है), लेकिन इस समाधान को संतोषजनक परिणाम प्राप्त करना चाहिए।


-5

यहाँ है

हालांकि अधिकांश गुफाएं जैसे कि ऊपर वाले पेरलिन कृमि का उपयोग करते हैं , कुछ लोग इसे मैन्युअल रूप से करते हैं। इस तरह वे इसे उस तरह से बना सकते हैं जैसे वे चाहते हैं कि यह ब्लॉक के लिए बिल्कुल ब्लॉक हो। पेर्लिन कीड़ा का उपयोग करके बनाई गई एक गुफा गलत हो सकती है और केवल गुफा को 5 फुट ऊंचा और 6 फुट चौड़ा बना सकती है, यह गलत हो सकता है क्योंकि आप इसे 10 फुट ऊंचा और 15 फुट चौड़ा चाहते हो।

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