Vertex Shader ग्राफिक्स पाइपलाइन का एक प्रोग्रामेबल चरण है जो 3D मॉडल के प्रत्येक वर्टेक्स को स्वतंत्र रूप से प्रोसेस करता है। Khronos Group, 2025 के अनुसार, वर्टेक्स शेडर इनपुट के रूप में वर्टेक्स विशेषताएँ प्राप्त करता है — निर्देशांक, नॉर्मल, रंग और टेक्सचर निर्देशांक — और उन्हें निर्धारित तर्क के अनुसार रूपांतरित करता है। Vertex Shader प्रत्येक वर्टेक्स के लिए स्वतंत्र रूप से निष्पादित होता है, जिससे GPU के हजारों कोर पर गणनाओं को कुशलतापूर्वक समानांतर किया जा सकता है।
मुख्य बिंदु
Vertex Shader ग्राफिक्स पाइपलाइन का एक प्रोग्रामेबल चरण है जो 3D मॉडल के प्रत्येक वर्टेक्स को व्यक्तिगत रूप से प्रोसेस करता है। वर्टेक्स त्रि-आयामी अंतरिक्ष में एक बिंदु है जिसमें विशेषताएँ होती हैं: xyz निर्देशांक, नॉर्मल, रंग और UV टेक्सचर निर्देशांक।
फिक्स्ड-फंक्शन पाइपलाइन के विपरीत, जहाँ रूपांतरण एक कठोर एल्गोरिदम के अनुसार किए जाते थे, Vertex Shader डेवलपर को वर्टेक्स रूपांतरण पर पूर्ण नियंत्रण देता है। यह प्रोसीजरल एनिमेशन, मॉडल विरूपण, कंकाल स्किनिंग और GPU पक्ष पर किसी भी गणितीय रूपांतरण को लागू करने की अनुमति देता है।
OpenGL ES ग्राफिक्स पाइपलाइन में इनपुट डेटा से अंतिम छवि तक चरणों का एक क्रम शामिल है। Vertex Shader वर्टेक्स असेंबली चरण के बाद और रेस्टराइज़ेशन चरण से पहले स्थित है। CPU से वर्टेक्स बफर के माध्यम से भेजा गया प्रत्येक वर्टेक्स Vertex Shader से ठीक एक बार गुज़रता है, और परिणाम प्रिमिटिव असेंबली के लिए अगले चरण में भेजा जाता है।
| पाइपलाइन चरण | उद्देश्य |
|---|---|
| Vertex Specification | VBO से वर्टेक्स डेटा और विशेषताओं का स्थानांतरण |
| Vertex Shader | प्रत्येक वर्टेक्स का प्रसंस्करण, निर्देशांक रूपांतरण |
| Tessellation | ज्यामिति का उप-प्रिमिटिव में वैकल्पिक उपविभाजन |
| Geometry Shader | प्रिमिटिव का वैकल्पिक निर्माण या हटाना |
| Rasterization | भरने के लिए प्रिमिटिव का फ़्रैगमेंट में रूपांतरण |
Vertex Shader CPU कोड में कॉन्फ़िगर किए गए वर्टेक्स एट्रीब्यूट पॉइंटर्स के माध्यम से वर्टेक्स बफर (VBO) से वर्टेक्स विशेषताएँ प्राप्त करता है। डेवलपर GLSL (OpenGL Shading Language) या समकक्ष भाषा में शेडर कोड लिखता है, जिसे GPU ड्राइवर विशिष्ट चिप के लिए मशीन निर्देशों में संकलित करता है।
प्रत्येक वर्टेक्स के लिए, Vertex Shader क्रमिक रूप से तीन ऑपरेशन करता है: इनपुट विशेषताओं को पढ़ना — डेवलपर द्वारा परिभाषित रूपांतरण लागू करना — आउटपुट वेरिएबल में परिणाम लिखना। न्यूनतम आवश्यक आउटपुट क्लिप स्पेस में वर्टेक्स स्थिति (gl_Position) है। अन्य सभी आउटपुट डेटा (रंग, नॉर्मल, टेक्सचर निर्देशांक) इंटरपोलेट होते हैं और अगले चरण — Fragment Shader को भेजे जाते हैं।
#version 300 es
in vec3 aPosition;
in vec2 aTexCoord;
uniform mat4 uMVP;
out vec2 vTexCoord;
void main() {
gl_Position = uMVP * vec4(aPosition, 1.0);
vTexCoord = aTexCoord;
}
Vertex Shader ज्यामिति रूपांतरण से संबंधित ग्राफिक्स पाइपलाइन कार्यों की एक विस्तृत श्रृंखला को हल करता है। प्रत्येक कार्य वैक्टर और मैट्रिसेस पर गणितीय संक्रियाओं के माध्यम से कार्यान्वित किया जाता है, जो हजारों वर्टेक्स के लिए समानांतर रूप से निष्पादित होता है।
मूल और सबसे सामान्य कार्य वर्टेक्स निर्देशांकों को model, view और projection (MVP) मैट्रिसेस से गुणा करना है। MVP मैट्रिक्स वर्टेक्स को स्थानीय मॉडल स्पेस से क्लिप स्पेस में रूपांतरित करता है, जिसे फिर पाइपलाइन के स्वचालित चरणों में सामान्यीकृत और स्क्रीन निर्देशांक में परिवर्तित किया जाता है।
एनिमेटेड पात्रों के लिए, Vertex Shader कंकाल एनिमेशन (skinning) लागू करता है। प्रत्येक वर्टेक्स विशिष्ट भार के साथ कई हड्डियों से बंधा होता है। Vertex blending — बंधी हड्डियों से रूपांतरणों का भारित योग — कंकाल के चलने पर चरित्र की त्वचा को सुचारू रूप से विकृत करने की अनुमति देता है।
Vertex Shader CPU की भागीदारी के बिना समय या अन्य uniform पैरामीटर के आधार पर ज्यामिति को संशोधित कर सकता है। Wave deformation, पर्लिन नॉइज़ विस्थापन और पानी की लहर प्रभाव — ये सभी प्रभाव RAM से ज्यामिति को पुनः लोड किए बिना वर्टेक्स शेडर में कार्यान्वित किए जाते हैं।
हालाँकि दोनों प्रकार के शेडर ग्राफिक्स पाइपलाइन के प्रोग्रामेबल चरण हैं, Vertex Shader और Fragment Shader मौलिक रूप से भिन्न कार्यों को हल करते हैं और छवि प्रसंस्करण के विभिन्न चरणों में काम करते हैं।
| विशेषता | Vertex Shader | Fragment Shader |
|---|---|---|
| इनपुट डेटा | VBO से वर्टेक्स विशेषताएँ | VS से इंटरपोलेटेड डेटा |
| कॉल की संख्या | वर्टेक्स की संख्या | फ़्रैगमेंट की संख्या |
| मुख्य कार्य | ज्यामिति रूपांतरण | पिक्सेल रंग गणना |
| संगणनात्मक भार | ज्यामिति जटिलता | स्क्रीन रिज़ॉल्यूशन |
| टेक्सचर पहुँच | सीमित (texture lookup के माध्यम से) | पूर्ण पहुँच |
मुख्य अंतर कॉल आवृत्ति है। Vertex Shader प्रति वर्टेक्स एक बार कॉल किया जाता है, जबकि Fragment Shader प्रत्येक फ़्रैगमेंट (पिक्सेल) के लिए कॉल किया जाता है। उच्च-रिज़ॉल्यूशन दृश्य में, Fragment Shader कॉल की संख्या Vertex Shader कॉल से हजारों गुना अधिक होती है, जिससे पिक्सेल शेडर अनुकूलन और भी महत्वपूर्ण हो जाता है।
Vertex Shader का प्रदर्शन रीयल-टाइम अनुप्रयोगों के लिए अत्यंत महत्वपूर्ण है, विशेष रूप से सीमित बिजली खपत वाले मोबाइल डेवलपमेंट में। मुख्य प्रदर्शन कारक वर्टेक्स की संख्या, शेडर कोड जटिलता और GPU मेमोरी बैंडविड्थ हैं।
Vertex Shader पर भार कम करने के लिए निम्नलिखित दृष्टिकोणों का उपयोग किया जाता है। Level of Detail (LOD) — कैमरा वस्तु से दूर जाने पर मॉडल के सरलीकृत संस्करणों पर स्विच करना। Instancing — एक ड्रा कॉल में विभिन्न रूपांतरण मैट्रिसेस के साथ एक ही ज्यामिति को कई बार चित्रित करना।
// instancing समर्थन के साथ Vertex Shader
in vec3 aPosition;
in mat4 aInstanceMatrix;
uniform mat4 uViewProjection;
void main() {
vec4 worldPos = aInstanceMatrix * vec4(aPosition, 1.0);
gl_Position = uViewProjection * worldPos;
}
Vertex Shader विभिन्न ग्राफिक्स API में समान तर्क रखता है, लेकिन भिन्न सिंटैक्स और नामकरण परंपराएँ रखता है। आइए OpenGL ES 3.0 के लिए GLSL में और iOS तथा macOS के लिए Metal Shading Language में बुनियादी वर्टेक्स शेडर के कार्यान्वयन को देखें।
#version 300 es
in vec4 position;
in vec3 normal;
in vec2 texcoord;
uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;
uniform mat3 normalMatrix;
out vec3 vNormal;
out vec2 vTexCoord;
out vec3 vPosition;
void main() {
vec4 mvPosition = modelViewMatrix * position;
vPosition = mvPosition.xyz;
vNormal = normalMatrix * normal;
vTexCoord = texcoord;
gl_Position = projectionMatrix * mvPosition;
}
#include <metal_stdlib>
using namespace metal;
struct VertexIn {
float3 position [[attribute(0)]];
float3 normal [[attribute(1)]];
};
struct VertexOut {
float4 position [[position]];
float3 worldNormal;
};
vertex VertexOut
vertexMain(VertexIn in [[stage_in]],
constant float4x4& mvp [[buffer(1)]]) {
VertexOut out;
out.position = mvp * float4(in.position, 1.0);
out.worldNormal = in.normal;
return out;
}
अक्सर पूछे जाने वाले प्रश्न
Vertex Shader GPU पर एक प्रोग्राम है जो 3D मॉडल के प्रत्येक वर्टेक्स को प्रोसेस करता है और उसके निर्देशांकों को स्क्रीन निर्देशांक में रूपांतरित करता है। मॉडल को बिंदुओं के जाल के रूप में कल्पना करें; वर्टेक्स शेडर इन बिंदुओं को निर्धारित गणितीय नियमों के अनुसार स्थानांतरित करता है।
Vertex Shader वर्टेक्स को प्रोसेस करता है और ज्यामिति के लिए जिम्मेदार है, जबकि Fragment Shader प्रत्येक पिक्सेल का रंग निर्धारित करता है। पहला प्रति वर्टेक्स (हजारों) कॉल किया जाता है, दूसरा प्रति पिक्सेल (लाखों)।
Vertex Shader ग्राफिक्स API के अनुरूप भाषा में लिखा जाता है: OpenGL ES के लिए GLSL, iOS/macOS पर Metal API के लिए Metal Shading Language, Direct3D के लिए HLSL। अवधारणात्मक रूप से, ये सभी वर्टेक्स पर समान संक्रियाएँ करते हैं।
वर्टेक्स शेडर की जटिलता सीधे FPS को प्रभावित करती है: प्रति वर्टेक्स अधिक निर्देश = अधिक प्रसंस्करण समय। अनुकूलन में LOD के माध्यम से वर्टेक्स की संख्या कम करना, instancing का उपयोग और शेडर कोड में सशर्त शाखाओं को कम करना शामिल है।
मुख्य गेमिंग कार्य: MVP मैट्रिसेस के माध्यम से निर्देशांक रूपांतरण, एनिमेटेड पात्रों का skinning, कपड़ों और बालों का प्रोसीजरल विरूपण, चेहरे के भावों के बीच मॉर्फिंग और GPU एनिमेशन के साथ कण प्रभाव।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें