मैं ASCII कला में अपने 3D गेम को कैसे प्रस्तुत करूं?


19

मैं यूनिटी 3 डी में एक 3 डी गेम के लिए ईस्टर अंडे बनाने की कोशिश कर रहा हूं। मैं ASCII कला में अपने खेल को पल-पल प्रस्तुत करना चाहता हूं।

मेरा पहला विचार है कि ऐसा करने के लिए एक shader बनाना है, लेकिन मुझे यकीन नहीं है कि यह सही तरीका है।


(libAA या libCACA साथ link1 - link2 resp।)
v.oddou

जवाबों:


20

मैं इसके लिए किसी भी प्लग एंड प्ले सॉल्यूशंस के बारे में नहीं जानता, लेकिन यहाँ एक एल्गोरिथ्म है जो अतिरिक्त संपत्ति के रूप में सिर्फ एक बनावट के साथ पिक्सेल शेडर में काम करता है

आवश्यक संपत्ति एक छोटी सी बनावट है जिसमें कुछ संख्या में टाइलों की एक पंक्ति होती है, जहां बाईं ओर सबसे अंधेरा होता है और दाएं सबसे हल्का होता है।

तब क्या होता है (प्रति फ्रेम):

  • उस बफर को लें जिसे आप ASCII संस्करण बनाना चाहते हैं और इसे टाइल के आकार से नीचे कर दें (इसलिए यदि आपके पास 8x8 टाइल हैं तो दोनों आयामों में छवि 8 से नीचे हो जाएगी)।
  • मूल पूर्ण आकार के बफर का एक नया रेंडर लक्ष्य बनाएं।
  • निम्नलिखित के साथ पिक्सेल shader का उपयोग करें:
    • बफर के लिए एक नमूना इनपुट (निकटतम पड़ोसी के लिए नमूने के साथ), और टाइल्स के लिए एक नमूना इनपुट।
    • टाइल के आकार, टाइल की मात्रा और अंतिम आउटपुट रिज़ॉल्यूशन के लिए वर्दी
  • पिक्सेल shader तो चाहिए:
    • डाउनस्केल्ड बफर से ग्रे स्केल वैल्यू प्राप्त करें ( (col.r+col.g+col.b) / 3.0यह संभवतः पर्याप्त है, भले ही वह आंखें कैसे काम न करें)
    • इस जानकारी का उपयोग करें कि आप किस टाइल से प्रस्तुत करना चाहते हैं ( floor(grayscale * TILE_COUNT))
    • पिक्सेल एक्स / वाई आउटपुट के निर्देशांक की गणना करें और उन मॉड्यूल को टाइल आकार (टाइलएक्स / टाइलवाई) लें।
    • रंग के रूप में वापसी टाइल बफर से नमूना मूल्य पर vec2( whichTile * TILE_WIDTH + tileX, tileY ) / vec2( TILE_WIDTH * TILE_COUNT, TILE_HEIGHT )

लिंक किए गए पृष्ठ उदाहरण के कई चित्रों, एक बात मैं जोड़ने गणना की ग्रेस्केल मूल्य के शोर के एक मामूली सा होगा तो यह में से एक बड़ा ब्लॉक नहीं है पर विचार कर रहे है MMMMMMMMMMMMMMMMरों

अपडेट किया गया: gamedev चैट रूम में @Lokij ने एकता के लिए एक अधिक संपूर्ण ट्यूटोरियल पोस्ट किया: http://pentahelix.github.io/ASCII-Tutorial-Revisited/


सरल समाधान जो बहुत अच्छी तरह से काम कर सकता है (+1)। अब मैं खुद इस आशय को लागू करने के बारे में सोच रहा हूं।
पॉल मंटा

2
@Sata केविन की टिप्पणी के संदर्भ में कि "[यह] काफी आँखें कैसे काम करती हैं", यहाँ एक रंगीन छवि को greyscale में बदलने के कई तरीकों का वर्णन है: johndcook.com/blog/2009/08/24/…
पॉल मंटा

1
आप घनत्व / चमक के अलावा उनके आकार के आधार पर पात्रों का चयन करने के लिए एज डिटेक्शन जैसे अतिरिक्त मापदंडों को शामिल करने के लिए इसका विस्तार कर सकते हैं।
DMGregory

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