कैसे परिवर्तित 2 डी स्प्राइट के लिए "रेट्रो" पिक्सेल शेडर बनाने के लिए जो पिक्सेल निष्ठा बनाए रखता है?


10

नीचे दी गई छवि एक पृष्ठभूमि के शीर्ष पर बिंदु नमूने के साथ प्रदान किए गए दो स्प्राइट्स दिखाती है:

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

  • बाईं खोपड़ी में इसके ऊपर कोई घुमाव / स्केलिंग नहीं है, इसलिए प्रत्येक पिक्सेल पृष्ठभूमि के साथ पूरी तरह से मेल खाता है।
  • दाहिनी खोपड़ी को घुमाया / स्केल किया गया है, और इससे बड़े पिक्सेल निकलते हैं जो अब अक्ष संरेखित नहीं हैं

मैं एक पिक्सेल शेडर कैसे विकसित कर सकता हूं जो कि शेष दृश्य के समान आकार के धुरी वाले पिक्सेल के साथ दायीं ओर तब्दील स्प्राइट को प्रस्तुत करेगा?

यह संबंधित हो सकता है कि बंदर द्वीप जैसे पुराने खेलों में स्प्राइट स्केलिंग कैसे लागू किया गया था, क्योंकि यह वह प्रभाव है जिसे मैं प्राप्त करने की कोशिश कर रहा हूं, लेकिन रोटेशन के साथ जोड़ा गया।


संपादित करें

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

पहले मैंने इसे करने की कोशिश की Linear -> Pointऔर नतीजा यह निकला:

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

कोई विकृति नहीं है, लेकिन परिणाम धुंधला दिखता है और यह अधिकांश हाइलाइट रंगों को खो देता है। मेरी राय में यह रेट्रो लुक को तोड़ता है जिसकी मुझे जरूरत थी।

दूसरी बार मैंने कोशिश की Point -> Pointऔर परिणाम यह रहा:

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

विकृति के बावजूद, मुझे लगता है कि यह मेरी जरूरतों के लिए काफी अच्छा हो सकता है, हालांकि यह गति की तुलना में स्थिर छवि के रूप में बेहतर दिखता है।

प्रदर्शन करने के लिए, यहाँ प्रभाव का एक वीडियो है, हालाँकि YouTube ने इसमें से पिक्सेल को फ़िल्टर किया है:

http://youtu.be/hqokk58KFmI

हालाँकि, मैं प्रश्न को कुछ और दिनों के लिए खुला छोड़ दूंगा जब कोई बेहतर नमूनाकरण समाधान के साथ आता है जो चलते समय विकृति की मात्रा को कम करते हुए कुरकुरे रूप को बनाए रखता है।


यह एक खोपड़ी माना जाता है ...?
डेडएमजी

@DeadMG एक बैल की खोपड़ी, मुझे लगता है?
डेविड गौवेया

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

@kaoD लेकिन याद रखें कि मैं दो पास लागू कर रहा हूं। दूसरा पास जो छवि को खराब करता है, फिर भी रेट्रो फील को संरक्षित करने के लिए निकटतम पड़ोसी होगा । लेकिन मुझे लगता है कि पहले पास के लिए अलग-अलग सैंपलिंग तकनीक आज़माने में कुछ फ़ायदा हो सकता है। मैं वर्तमान में Scale2x में देख रहा हूँ!
डेविड गौविया

@kaoD नाह, मैं छोड़ देता हूं। प्रत्येक स्प्राइट कॉल के बीच shader मापदंडों को बदलने से SpriteBatchमुझे तत्काल मोड का उपयोग करने की आवश्यकता होती है, इसलिए यह परेशानी के लायक नहीं है। मैं इसके साथ जाऊँगा :)
डेविड गॉविया

जवाबों:


3

आपको अपने shader के बारे में बताना चाहिए कि आपका स्प्राइट घुमाया गया है।

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

उस रेट्रो लुक को रखने का एकमात्र तरीका जो आप चाहते हैं वह वास्तव में आपके स्प्रिट घुमावों को स्वयं खींचना है। स्केलिंग को कैसे लागू किया गया, इससे कोई लेना-देना नहीं है: संकल्प वास्तव में खराब था, जिसमें से बोलते हुए, आपने बहुत कम प्रस्तावों के साथ प्रयास किया था? यह चाल भी कर सकता है और तब से और अधिक प्राकृतिक दिखाई देगा, ठीक है, यह वास्तव में वह प्रभाव है जिसके कारण आप देख रहे हैं। और यह सस्ता है! बहुत सस्ता! वास्तव में यह आपके पास पहले से मौजूद सस्ता से कम होगा (कम टुकड़ा shader निष्पादन।)

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


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

@DavidGouveia आपके संकल्प को उन्नत करने का अवसर नहीं चूकता। यदि आप वास्तव में मूल प्रभाव प्राप्त करना चाहते हैं तो यह आपका सबसे अच्छा शॉट है। यदि आपको अपने उच्च रिज़ॉल्यूशन की आवश्यकता है (यदि आपका GFX का कोई भाग हाई-रेस है या आप मूल रिज़ॉल्यूशन से मिलान करना चाहते हैं) तो आप अभी भी एक कम-रेज ऑफ़-स्क्रीन बफर को रेंडर कर सकते हैं और फिर इसे पूर्ण रूप में अपने उच्च रिज़ॉल्यूशन फ्रेमबफ़र में पेंट कर सकते हैं छानने के साथ-स्क्रीन क्वाड बंद हो गया। ध्यान रखें कि आयताकार पिक्सेल से बचने के लिए आपको पहलू अनुपात से मेल खाना चाहिए।
kaoD

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