शेडरटॉय पिक्सेल शेडर्स लिखने का एक साधन है।
पिक्सेल शेडर्स क्या हैं?
यदि आप एक पूर्ण स्क्रीन क्वाड प्रस्तुत करते हैं, जिसका अर्थ है कि चार बिंदुओं में से प्रत्येक को व्यूपोर्ट के चार कोनों में से एक में रखा गया है, तो उस चौकोर के लिए टुकड़े के शेडर को पिक्सेल शेडर कहा जाता है, क्योंकि आप कह सकते हैं कि अब प्रत्येक खंड स्क्रीन के ठीक एक पिक्सेल के अनुरूप है। तो एक पिक्सेल शेडर एक पूर्णस्क्रीन ट्रैक्टर के लिए एक टुकड़ा शेडर है।
तो गुण हमेशा एक ही हैं और इसलिए एक शीर्ष शेडर है:
positions = [ [-1,1], [1,1], [-1,-1], [1,-1] ]
uv = [ [0.0, 0.0], [1.0, 0.0], [0.0, 1.0], [1.0, 1.0] ]
और वह ट्रैक्टर TRIANGLE_STRIP
के रूप में प्रदान की गई है। इसके अलावा, UVs
को स्पष्ट रूप से सेट करने के बजाय, कुछ खंड टुकड़े के अंतर्निर्मित चर gl_FragCoord
का उपयोग करना पसंद करते हैं, जिसे बाद में विभाजित किया जाता है, उदाहरण के लिए, uniform vec2 uScreenResolution
।
वर्टेक्स शेडर:
attribute vec2 aPos;
attribute vec2 aUV;
varying vec2 vUV;
void main() {
gl_Position = vec4(aPos, 0.0, 1.0);
vUV = aUV;
}
और टुकड़ा शेडर तो कुछ इस तरह दिखेगा:
uniform vec2 uScreenResolution;
varying vec2 vUV;
void main() {
// vUV is equal to gl_FragCoord/uScreenResolution
// do some pixel shader related work
gl_FragColor = vec3(someColor);
}
ShaderToy डिफ़ॉल्ट, iResolution
(उर्फ uScreenResolution
), iGlobalTime
पर कुछ वर्दी के साथ आप की आपूर्ति कर सकते, iMouse
, ... जो आप अपने पिक्सेल शेडर में उपयोग कर सकते हैं।
सीधे ज्यामिति को कोडिंग शेडर (उर्फ पिक्सेल शेडर) में कोड करने के लिए, डेवलपर रे-ट्रेसिंग नामक कुछ का उपयोग करता है। यह प्रोग्रामिंग का काफी जटिल क्षेत्र है लेकिन संक्षेप में: आप कुछ गणितीय सूत्रों के माध्यम से अपनी ज्यामिति प्रस्तुत करते हैं, और बाद में पिक्सेल शेडर में, जब आप यह जांचना चाहते हैं कि कुछ पिक्सेल आपकी ज्यामिति का हिस्सा है तो आप उस जानकारी को पुनर्प्राप्त करने के लिए उस सूत्र का उपयोग करते हैं। थोड़ा सा Google आपको कितना और कैसे रेस ट्रैसर बिल्कुल बनाया गया है, इसे पढ़ने के लिए आपको बहुत सारे संसाधन देना चाहिए, और इससे मदद मिल सकती है: How to do ray tracing in modern OpenGL?
आशा है कि इससे मदद मिलती है।
[यह क्यू/ए] देखें (http://stackoverflow.com/questions/9151238/can-anyone-explain-what-this-glsl-fragment-shader-is-doing/9171776#9171776) – gman