2 डी जल सिमुलेशन के लिए विचार


18

मैं 2 डी में पानी के अनुकरण पर किसी भी इनपुट की तलाश कर रहा हूं, बल्कि एक बड़े (अवरुद्ध) कॉल के लिए अवरुद्ध / नहीं अवरुद्ध सरणी (पक्ष से देखा गया)। मैं निम्नलिखित विचारों के साथ आया हूं:

सेल ऑटोमेटा

सेल ऑटोमेटा का उपयोग करते हुए, सीपीयू पर एक बड़े पैमाने पर पैरलल सिमुलेशन करें । नियमों के साथ सरल के रूप में:

  • अगर कोई सेल है तो उसके नीचे से नीचे की ओर जाएँ।
  • बाएं और दाएं कक्षों की जांच करें, दो में से एक यादृच्छिक चुनें और इसे स्थानांतरित करें।

पेशेवरों

  • लागू करने के लिए सरल।
  • मल्टीप्लेयर सिस्टम में अर्थपूर्ण / नियतात्मक।

विपक्ष

  • शायद सच में धीमी।
  • राजी किए जाने वाला नहीं।

GPU पर द्रव गतिशीलता

GPU पर तरल गतिकी के किसी न किसी सन्निकटन का प्रदर्शन निम्न बनावट की तरह करें:

+------+-----+-----+-------+
|R     |G    |B    |A      |
+------+-----+-----+-------+
|vX    |vY   |NULL |Density|
+------+-----+-----+-------+

पेशेवरों

  • शायद सच में तेज।
  • काफी आश्वस्त हो सकता है।
  • एक और पिक्सेल shader सीधे इसे प्रस्तुत कर सकता है।

विपक्ष

  • लागू करना मुश्किल।
  • ट्वीक करना मुश्किल।
  • मैं अपने स्तर पर एक भी बनावट आवंटित नहीं कर सकता।
    • मैं ग्रिड क्षेत्रों को ओवरलैप कर सकता था, लेकिन इससे और जटिलता बढ़ जाएगी।

कण

पानी का अनुकरण करने के लिए कणों का उपयोग करें। Additive सम्मिश्रण का उपयोग करने के दौरान और फिर पानी कुरकुरा किनारों देने के लिए अल्फा चैनल के लिए एक गुणन समारोह लागू करें।

पेशेवरों

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

विपक्ष

  • इंटर-कण प्रभाव शायद धीमा होगा (पड़ोस लुकअप)।
  • ठोस स्थानों के माध्यम से पानी 'लीक' हो सकता है (क्योंकि ठोस स्थान छोटा है, जैसे 1px)।
  • कण आकार के आधार पर पानी में अजीब छेद हो सकता है।
  • उपरोक्त दोनों को कणों को उनके वास्तविक आकार की तुलना में एक साथ बहाव करने की अनुमति देकर कम किया जा सकता है, हालांकि अंतर-कण और कण / परिदृश्य प्रदर्शन के साथ समस्याएं पैदा करेगा।

आगे कोई विचार?

नोट: यह एक अनुमान है, मैं यहां शारीरिक रूप से सही पानी की तलाश नहीं कर रहा हूं - बस कुछ ऐसा है जो 'काफी अच्छा है' (त्वरित और गंदे के लिए बोनस अंक)। खेल मल्टीप्लेयर है, इसलिए दुर्भाग्य से पूरे स्तर को लगातार अनुकरण करने की आवश्यकता है।

जवाबों:


12

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

पेशेवरों:

  • लागू करने में आसान
  • शांत पानी के मामले में यथार्थवादी परिणाम
  • GPU का उपयोग करके तेजी से गणना
  • स्थिर जल स्तर या जल स्रोतों को परिभाषित करना आसान है

विपक्ष:

  • तरंगों का अनुकरण करने में असमर्थ

लहराते पानी के लिए मैं आपके सेल ऑटोमेटा एल्गोरिथ्म के समान किसी तरह का उपयोग करता हूं, लेकिन एक छोटे से बदलाव के साथ जो मुझे वर्तमान स्थिति से अगले चरण की गणना करने के लिए शेड्स का उपयोग करने देगा, यहां एक सुडौल कोड है, फिर से मुझे प्रत्येक में पानी के स्तर का प्रतिनिधित्व करने वाला एक बनावट मिला है पिक्सेल रंग:

foreach (pixel p) in oldTexture
{
    newtexture.pixels[p.x,p.y]    += p.color / 5;
    newtexture.pixels[p.x+1,p.y]  += p.color / 5;
    newtexture.pixels[p.x-1,p.y]  += p.color / 5;
    newtexture.pixels[p.x,p.y+1]  += p.color / 5;
    newtexture.pixels[p.x,p.y-1]  += p.color / 5;
}

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

अंत में आपको एक बनावट मिली है जो आपको प्रत्येक स्थिति के लिए पानी का स्तर बताती है, अगले चरण में आपको किसी तरह परिणाम निकालना है, सबसे आसान तरीका है कि आप जल स्तर डेटा के आधार पर एक जाल उत्पन्न करें।


धन्यवाद, यह एक शानदार जवाब है। मैं प्रश्न को थोड़ी देर खुला छोड़ दूँगा; लेकिन ऐसा लगता है कि मेरे पास यहाँ एक उत्तर प्रश्न पूछने के लिए एक आदत है :)।
जोनाथन डिकिंसन

बेहतर परिणाम पाने के लिए आप इन एल्गोरिदम को भी मिला सकते हैं।
अली

स्क्रीनशॉट के बारे में कैसे?
ashes999

@ ashes999 मुझे कोई स्क्रीनशॉट नहीं मिला है, लेकिन यहाँ उसी एल्गोरिदम को लागू किया गया है! youtube.com/watch?v=avJPrL9UJ28
Ali1S232
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.