ग्राफिक्स प्रोग्रामिंग गेट के अंदर क्रोनो ट्रिगर से संक्रमण की नकल करते हुए


9

मैंने इस खेल को पहली बार खेलना शुरू किया और इसने वास्तव में मेरी रुचि को बढ़ा दिया

आप ~ 12: 08 से शुरू होने वाली गति में संक्रमण देख सकते हैं

वहाँ कुछ दिलचस्प गणित लग रहे हैं। ऐसा प्रतीत होता है कि एक साथ दो अलग-अलग विचार हैं। नीले रंग की तरंगों को पहले पृष्ठभूमि में गाया जाता है और फिर बैंगनी दोलन तरंगों को किसी प्रकार के छद्म 3 डी प्रक्षेपण पर प्रस्तुत किया जाता है।

वास्तव में वे इस परिणाम पर कैसे आए लेकिन मुझसे परे है और जिज्ञासा मुझे बेहतर हुई है।

मुझे उम्मीद नहीं है कि बहुत से लोगों को पता होगा कि यह विशेष रूप से कैसे किया जाता है लेकिन अगर किसी ने कुछ व्यापक ग्राफिक्स प्रोग्रामिंग की है, तो शायद वे मुझे बता सकते हैं।


2
3 विमानों की तरह दिखता है, एक ऊपर, एक नीचे और एक कैमरा के सामने।
MichaelHouse

ऊपर / नीचे के विमानों को भी गहराई का भ्रम देने के लिए गैर समान रूप से बढ़ाया जाता है। कोई "कैमरा" नहीं है, बस कुछ स्केलिंग सामान है या नहीं। "कैमरे का सामना करना" एक शायद सिर्फ एक एनीमेशन या कुछ है, या एक एनीमेशन के कुछ चतुर टाइलिंग है।
रैंडीगुल

1
इस विकिपीडिया लेख को देखें: en.wikipedia.org/wiki/Mode_7
Neverender

जवाबों:


11

मैंने shader का उपयोग करके प्रभाव को डुप्लिकेट करने का प्रयास किया।

Shader00 Center: https://www.shadertoy.com/view/XsXSz2

Shader01 पक्षों: https://www.shadertoy.com/view/4sXSz2

:) आप कर सकते हैं, जैसा कि बाइट 56 ने कहा, तीन विमानों की स्थापना। एक विमान का सामना करने वाला कैमरा सीधे Shader00 के साथ आगे, और फिर Shader01 के साथ दो विमान, शायद रैंडीगौल के रूप में, ऊपर / नीचे गैर समान रूप से गहराई का भ्रम देने के लिए बढ़ाया गया।

मुझे विश्वास करना चाहिए कि वे आश्वस्त होने के लिए पर्याप्त 3 डी लुक देते हैं।

दोनों दो शेड्स बिल्कुल आपके youtube लिंक की तरह नहीं हैं (साथ ही वे रफ ड्राफ्ट से अधिक हैं)। हालांकि मेरा मानना ​​है कि ये शेड्स, उम्मीद कर सकते हैं, आपको अपना खुद का संस्करण बनाने की जगह दे सकते हैं।

ट्यूटोरियल: एक साधारण स्ट्राइप पैटर्न कैसे बनाया जाए।

विमान के प्रत्येक बिंदु का समन्वय है। एक shader प्रभाव बनाने का प्रयास मूल रूप से विमान पर 2D गणित की कल्पना कर रहा है। यहाँ मैं एक सरल उदाहरण पेश करता हूँ।

//This shader will visualize coordinates 
vec2 uv = gl_FragCoord.xy / iResolution.xy;
gl_FragColor = vec4(uv.x,uv.y,0,1);

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

रंग लाल x निर्देशांक का प्रतिनिधित्व करेगा और हरा रंग y समन्वय का प्रतिनिधित्व करेगा। अभी के लिए, हम सबसे सरल shader प्रभाव बनाना चाहते हैं; एक पट्टी। हमें इस ट्यूटोरियल के लिए uv.y मान की आवश्यकता नहीं होगी।

vec2 uv = gl_FragCoord.xy / iResolution.xy;
gl_FragColor = vec4(uv.x,0,0,1);

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

आप देख सकते हैं कि लाल रंग तीव्र हो जाता है क्योंकि यह दाईं ओर जाता है। ऐसा इसलिए है क्योंकि जब आप दाईं ओर जाते हैं तो समन्वय का x मान अधिक हो जाता है; बायाँ छोर x निर्देशांक 0 से शुरू होता है और दाएँ अंत x समन्वय 1 होता है।

चूँकि हमारे पास यह बुनियादी समझ है आइए कुछ "सहज" कोशिश करें

vec2 uv = gl_FragCoord.xy / iResolution.xy;
float color = 0.0;
if(uv.x < .5 ) color= 1.0 ;
gl_FragColor = vec4(color,0,0,1);

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

वहां आपके पास स्ट्राइप पैटर्न है। रुकिए ... यह बिल्कुल सही नहीं लगता। हां यह सिर्फ लाल और काला है। स्ट्राइप पैटर्न केवल दो रंग वर्गों से अधिक से मिलकर बनता है। वहाँ...!

vec2 uv = gl_FragCoord.xy / iResolution.xy;
float color = 0.0;
if(uv.x < .2 ||(uv.x >.4 && uv.x < .6) || (uv.x > .8 && uv.x <1.0 )) color= 1.0 ;
gl_FragColor = vec4(color,0,0,1);

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

लेकिन क्या होगा अगर हम एन नंबर की पट्टी बनाना चाहते हैं?

मैं जो प्रदर्शित करने का प्रयास कर रहा हूं वह यह है कि यदि आप पारंपरिक प्रोग्रामिंग "लॉजिक" के साथ shader प्रोग्रामिंग को देखने का प्रयास करते हैं तो आप असफल होने की संभावना है। जब यह shader की बात आती है, तो यह गणित के बारे में है।

गणित की बात करें तो, ऐसा कौन सा पैटर्न है जो "स्ट्राइप" पैटर्न जैसा दिखता है? दूसरे शब्दों में, धारियों की तरह दिखने वाला समीकरण क्या है? हाँ। य = पाप (एक्स)। हालाँकि हमारा X मान 0.0 ~ 1.0 से है यदि हम Y = sin (X) का उपयोग करना चाहते हैं, तो हम चाहते हैं कि हमारा x मान 0.0 ~ 6.28 (जो लगभग 2 PI है) से लेकर

vec2 uv = gl_FragCoord.xy / iResolution.xy;
float x = uv.x * 2.0 *PI; 
float y = sin(x);
gl_FragColor = vec4(y,0,0,1);

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

अब हमारे पास एक समीकरण द्वारा उत्पन्न पैटर्न के संदर्भ में "धारी" है। हमें यह दृष्टिकोण क्यों लेना चाहिए? न केवल यह तेजी से हो सकता है, बल्कि यह "अगर" स्थितियों में एन की संख्या को स्ट्रिप करने के लिए "बदसूरत" लिखने की आवश्यकता को समाप्त करता है। यदि हम एक से अधिक स्ट्रिप चाहते थे, तो हम अधिकतम एक्स वैल्यू को और बढ़ाकर पैटर्न को बढ़ा सकते हैं।

vec2 uv = gl_FragCoord.xy / iResolution.xy;
float x = uv.x * (2.0 *PI * 10.0); //ta dan!
float y = sin(x);
gl_FragColor = vec4(y,0,0,1);

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

आप कह सकते हैं कि यह shader प्रारंभिक shader की तरह एकदम सही पट्टी का उत्पादन नहीं करता है, लेकिन वास्तव में, आपको बस इतना करना होगा कि आप अधिक उपयुक्त समीकरण लिख सकें!

vec2 uv = gl_FragCoord.xy / iResolution.xy;
float x = uv.x * (2.0 *PI * 10.0);
float y = sin(x) / abs(sin(x) );
gl_FragColor = vec4(y,0,0,1);

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

अगला: लहराती पट्टी पैटर्न कैसे बनाएं।


1
क्रोनो ट्रिगर मूल रूप से SNES के लिए जारी किया गया था, जिसमें विमान नहीं थे, लेकिन इसमें मोड 7 था । एक ही अवधारणा, बस एक तकनीकी विवरण।
डिफ डिफेंस

2
शायद आप इस उत्तर को जोड़कर बता सकते हैं कि शेड कैसे बनाए जाते हैं? अन्यथा, यदि लिंक कभी मर जाते हैं, तो यह उत्तर अधिकतर बेकार होगा।
MichaelHouse

बाइट 56 के साथ सहमत, कोई व्यक्ति इन जैसे glsl shaders बनाने के लिए ज्ञान कैसे सीख सकता है और इसे लिखते समय आपकी विचार प्रक्रिया क्या है?
ऑक्सीसॉफ्ट

1
@oxysoft इस प्रकार के शेड्स पारंपरिक लाइट इफ़ेक्ट शेड्स से भिन्न होते हैं। वे जितने विशिष्ट हैं, उतने संसाधन नहीं हैं जो "उन्हें कैसे बनाया जाए" को कवर करते हैं। हालांकि इसका मतलब यह नहीं है कि आप उदाहरण नहीं खोज सकते। Shadertoy.com और अन्य "मज़ेदार shader" वेबसाइटों का उपयोग करके देखें कि आप shader के साथ क्या कर सकते हैं। सबसे अच्छी विधि, आपको उन्हें बनाने का तरीका जानने के लिए, (मुझे लगता है) सिर्फ सामान्य shader प्रथाओं को सीखना है और उन "मज़ेदार shader" उदाहरणों का अध्ययन करना है जो इंटरनेट पर पाए जाते हैं।
Tofu_Craving_Riki_BlueDragon 16:27 पर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.