XNA जोड़ना क्रेटर्स (GPU के माध्यम से) एक "बर्न" प्रभाव के साथ


11

मैं वर्तमान में XNA में एक 2D "वर्म्स" क्लोन पर काम कर रहा हूं, और सुविधाओं में से एक "विकृत" इलाक़ा है (जैसे कि जब कोई रॉकेट इलाके से टकराता है, तो एक विस्फोट होता है और इलाके का एक हिस्सा गायब हो जाता है)।

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

मुझे लगता है कि यह ऐसा करने का एक अच्छा तरीका नहीं है, केवल इसलिए नहीं कि मैंने पाइपलाइन स्टालों और इस तरह के बारे में पढ़ा है, बल्कि इसलिए भी कि अगर यह एक ही समय में बहुत सारे क्रेटरों को जोड़ा जा रहा है, तो यह काफी पिछड़ सकता है। मैं रेंडर टारगेट "पिंग-पॉन्गिंग" का उपयोग करने के बजाय GPU पर अपने क्रेटर जेनरेशन को रीमेक करना चाहता हूं और संशोधित करने के लिए बनावट के बीच। यह समस्या नहीं है, मुझे पता है कि कैसे करना है। समस्या यह है कि मैं नहीं जानता कि इस विधि का उपयोग करके अपने जले प्रभाव को कैसे रखा जाए।

यहां बताया गया है कि जलने का प्रभाव अभी कैसा है:

जलने का प्रभाव

क्या किसी को इस बात का अंदाजा है कि मैं एक समान बर्न इफेक्ट कैसे बनाऊंगा (बने हुए गड्ढे के चारों ओर किनारों को काला करना)? मैं शेड्स से पूरी तरह से अपरिचित हूं, लेकिन अगर इसकी आवश्यकता होती है तो मैं वास्तव में शुक्रगुजार रहूंगा अगर कोई मुझे यह करने के लिए कैसे चले। अगर कोई और तरीका है जो बहुत अच्छा होगा।


यह मदद कर सकता है: gamedev.stackexchange.com/q/6721/1163
एडम हर्ट

जवाबों:


7

एक तरह से आप यह कर सकते थे कि आप क्या कर रहे हैं के समान है। एक "नुकसान" बनावट और वास्तविक पृष्ठभूमि बनावट है, लेकिन हर बार डेटा की प्रतिलिपि बनाने के बजाय, बस दो को दो अलग बनावट के रूप में रखें।

जब एक विस्फोट किया जाता है, तो डैमेज बनावट पर एक सर्कल बनाएं जिसमें थोड़ा पारदर्शी किनारा हो। यह "बर्न" क्षेत्र होगा।

जब भी आप इलाके को खींचते हैं, तो जीपीयू को दोनों बनावट दें, और आपके शैडर को बैकग्राउंड पिक्सल के रंग (.rgb) को 1 से गुणा करें - क्षति बनावट का अल्फा मान। पूरी तरह से काले पिक्सेल से छुटकारा पाएं (उन्हें 0 पर अल्फा करें, या आप इसे अल्फा के रूप में अच्छी तरह से (.rgba के बजाय .rgb) के आधार पर गुणा कर सकते हैं यदि आप पारभासी झुलसे क्षेत्रों चाहते हैं) और वॉइला!

मुझे संदेह है कि यह सबसे अच्छा समाधान है, लेकिन यह काफी हद तक आपके द्वारा किए गए कार्य के समान है जिससे स्थानांतरण आसान हो सकता है। आप शायद वेक्टर 3 (x, y, त्रिज्या) की एक सरणी में पास होने के साथ दूर हो सकते हैं और उन विस्फोट बिंदुओं के आधार पर शेडर में कुछ गणित कर रहे हैं लेकिन मैं इस तरह की दक्षता के लिए अनिश्चित हूं।

उम्मीद है की यह मदद करेगा!


धन्यवाद! यह एक अच्छा तरीका है, इसे करने का भी, और जैसा मैं अभी कह रहा हूं, वैसा ही। मुझे एचएलएसएल के बारे में कुछ नहीं पता है, लेकिन मैं निश्चित रूप से इस पर गौर करूंगा। एक और तरीका मुझे बताया गया था कि मैं इसे काला कर सकता हूं क्योंकि मैं गड्ढे के किनारे पर पहुंचता हूं, लेकिन मैं इस तरह भी कोशिश करूंगा।
बेनिक्सो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.