पेर्लिन कीड़े के साथ गुफा पीढ़ी


12

मैं वर्तमान में 3D सिंप्लेक्स शोर के साथ voxel इलाके की तरह एक Minecraft उत्पन्न करने की कोशिश कर रहा हूं और गुफाओं को लागू करना चाहता हूं।

मुझे इस धागे में पेरलिन वर्म्स की विधि मिली , जो वास्तव में अच्छे परिणाम उत्पन्न करता है। हालाँकि, मुझे यह पता नहीं है कि इसे चंक आधार पर कैसे उत्पन्न किया जाए। क्या यह संभव है या ऐसे कोई विकल्प हैं जो चंक आधार पर एक चर्म पर गुफा की तरह समान कीड़ा पैदा करते हैं?

संपादित करें: यह समस्या है जिसे मैं नहीं जानता कि कैसे हल किया जाए।

Edit2: यह एक सिम्पलेक्स शोर ऊंचाई के साथ 2D रिड्ड मल्टीफ्रेक्टल शोर के संयोजन से परिणाम है। अभी भी कुछ ट्विकिंग की जरूरत है, लेकिन यह बहुत ज्यादा परिणाम है जो मुझे चाहिए था। धन्यवाद Byte56


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

1
असल में, यह मेरा सवाल है। मूल भूभाग को केवल दिए गए निर्देशांक के साथ गणना करना आसान है, लेकिन मुझे नहीं पता कि कैसे गणना की जाए, वहां एक गुफा है या नहीं।
user000user

जवाबों:


5

अधिकांश पेर्लिन शोर एल्गोरिदम आपको किसी भी स्थान पर शोर मूल्य को पुनः प्राप्त करने की अनुमति देगा, जैसे कुछ noise(x,y,z)। यह चंक आधार पर एक चंक पर शोर उत्पन्न करने के लिए काफी तुच्छ बनाता है। आपको केवल चंक स्थिति के बजाय वैश्विक स्थिति को पारित करने की आवश्यकता है।

for(int i = 0; i < CHUNKMAX_X; i++)
    for(int j = 0; j < CHUNKMAX_Y; j++)
        for(int k = 0; k < CHUNKMAX_Z; k++)
            if(isSolid(perlinNoise.get(chunkPosition.x + i,
                                         chunkPosition.y + j,
                                         chunkPosition.z + k))
                thisChunk[i,j,k] = new Voxel(solid);
            else
                thisChunk[i,j,k] = new Voxel(air);

तो आप देख सकते हैं, हम ठोड़ी सीमा के ऊपर इलाके पैदा कर रहे हैं, ठुड्डी की सीमा पर पुनरावृत्ति करके, और यह देखने के लिए जाँच कर रहे हैं कि वैश्विक स्थिति ठोस है या नहीं। यह संभवतः वही पद्धति है जिसका उपयोग आप सामान्य रूप से इलाके उत्पन्न करने के लिए कर रहे हैं।

perlinNoise.getएक वैश्विक स्थिति लेता है और अपना घनत्व लौटाता है। जहां isSolidसिर्फ यह देखने के लिए एक साधारण परीक्षा होगी कि क्या ठोस के लिए क्वालीफाई करने के लिए वोक्स "पर्याप्त सघन" है या नहीं।

perlinNoise.getएक साधारण शोर एल्गोरिथ्म की तुलना में अधिक जटिल हो सकता है। आप अपनी दुनिया में स्वर की गहराई के आधार पर जांच कर सकते हैं। उदाहरण के लिए, यदि आपके द्वारा तय किया गया वोक्स नीचे है, "निरपेक्ष बेस ग्राउंड लेवल" तो यह घनत्व वापस करने के लिए पर्लिन वर्म एल्गोरिथ्म का उपयोग कर सकता है, यदि यह निरपेक्ष बेस से ऊपर है, तो यह आपको देने के लिए एक सामान्य घनत्व फ़ंक्शन का उपयोग कर सकता है। अधिक विविध भूभाग। मैं हालांकि दोनों के बीच कुछ सम्मिश्रण करने की सलाह दूंगा।

विभिन्न पेर्लिन शोर कार्यों का संयोजन बस कुछ है जिसे आपको खेलना है और देखना है कि क्या काम करता है। अपने वातावरण को स्थापित करना सबसे अच्छा है ताकि आप अपने खेल को फिर से लोड करने की आवश्यकता के बिना कुछ मूल्यों को बदल सकें और इलाके को गर्म-गर्म कर सकें। खुश प्रयोग।


2
जवाब के लिए धन्यवाद। हालांकि, मुझे नहीं पता कि कृमि जैसी गुफाओं को बनाने के लिए "नियमित" पेर्लिन या सिम्पलेक्स शोर का उपयोग कैसे किया जाए। वे या तो गोलाकार होते हैं, एक दिशा में बड़े होते हैं या बहुत लंबे नहीं होते हैं। और पेरलिन वर्म्स एल्गोरिथ्म के लिए, मुझे नहीं पता कि यह कैसे निर्धारित किया जाए कि वर्तमान स्थिति एक कीड़ा के अंदर है, बिना सिर की स्थिति को जाने।
user000user 16

1
कीड़े का एल्गोरिथ्म "सिर की स्थिति" जानने पर भरोसा नहीं करता है। आप जो कह रहे हैं, उससे यह प्रतीत होता है कि आपकी समस्या किसी आधार पर किसी व्यक्ति द्वारा शोर मचाने से नहीं है। उस प्रश्न पर ट्यूटोरियल हैं जो पेर्लिन कीड़े को लागू करने से जुड़े हैं। कैसे "नियमित" इलाके उत्पन्न करने के लिए यहां पाया जा सकता है
MichaelHouse

3 डी सिंप्लेक्स शोर के साथ बुनियादी इलाके की पीढ़ी ठीक काम करती है, लेकिन मुझे पता नहीं है कि एक चंक के अंदर कीड़े की स्थिति / खंड कैसे निर्धारित किया जाए। मुझे जो समझ में आया, आप कृमि को एक सिर की स्थिति और n खंड देते हैं और शोर फ़ंक्शन के साथ खंडों के बीच के कोण की गणना करते हैं। यहाँ एक छवि है जो बेहतर समझा सकती है, मेरी समस्या क्या है: लिंक
user000user

2
विभिन्न प्रकार के शोर हैं। एक सिर की स्थिति का उपयोग करना और वहाँ से एक विधि है। यदि आप इस पृष्ठ के निचले भाग के पास देखते हैं , तो आपको कुछ शोर मिलेंगे, जो पहले बिना किसी हेड पोजीशन की आवश्यकता के आप जिस तरह का शोर चाहते हैं।
MichaelHouse

उस पर संकेत के लिए धन्यवाद। मैंने 3 डी रिडिग्ड मल्टीफ़्रेक्टल शोर को लागू किया, हालांकि, इसके साथ परिणाम बल्कि असंतोषजनक था। मैं इसे 2 डी हाइटमैप के साथ 2 डी में संयोजित करने का प्रयास करूंगा और फिर रिपोर्ट करूंगा। इससे अधिक कृमि जैसी गुफाएँ बन सकती हैं।
user000user

3

मुझे लगता है कि यह कैसे Minecraft में काम करता है। प्रत्येक कृमि की अधिकतम लंबाई होती है (इसे कहते हैं M)। प्रत्येक कृमि के सिर की गणना चंक स्थिति के आधार पर की जाती है। जब आप प्रत्येक चंक को प्रस्तुत करते हैं, तो आपको सभी Mत्रिज्याओं को एक दायरे में जाँचना होगा , और उनके सभी कृमियों का पालन करना होगा। यह प्रदर्शन के मामले में आदर्श नहीं है, लेकिन यह काम करता है।

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