Fragment Shader — यह क्या है, कार्य और कार्य सिद्धांत

लेखक: IT Sectr प्रकाशित: 2026-06-11 पढ़ने का समय: 10 मिनट

Fragment Shader ग्राफ़िक्स पाइपलाइन का एक प्रोग्रामेबल चरण है जो छवि के प्रत्येक फ़्रैगमेंट (पिक्सेल) का अंतिम रंग निर्धारित करता है। Khronos Group, 2025 के अनुसार, फ़्रैगमेंट शेडर Vertex Shader से इंटरपोलेटेड डेटा प्राप्त करता है और प्रकाश गणना, टेक्सचरिंग और रंग प्रभाव करता है। Fragment Shader प्रत्येक पिक्सेल के लिए कॉल किया जाता है, जो इसे ग्राफ़िक्स पाइपलाइन का सबसे संसाधन-गहन चरण बनाता है।

मुख्य बातें

  • Fragment Shader — GPU का एक प्रोग्रामेबल चरण जो स्क्रीन पर प्रत्येक पिक्सेल का रंग निर्धारित करता है।
  • कॉल की संख्या स्क्रीन रिज़ॉल्यूशन के बराबर होती है, जो इसे रेंडरिंग का मुख्य कम्प्यूटेशनल भार बनाती है।
  • टेक्सचरिंग और Phong प्रकाश — फ़्रैगमेंट शेडर में लागू किए जाने वाले विशिष्ट कार्य।
  • GLSL और Metal Shading Language Fragment Shader लिखने के लिए मानक उपकरण प्रदान करते हैं।
  • प्रदर्शन Fragment Shader का मोबाइल ऐप्लिकेशन में 60 FPS प्राप्त करने के लिए महत्वपूर्ण है।

Fragment Shader क्या है?

Fragment Shader (फ़्रैगमेंट या पिक्सेल शेडर) ग्राफ़िक्स पाइपलाइन का एक प्रोग्रामेबल चरण है जो छवि के प्रत्येक फ़्रैगमेंट का अंतिम रंग गणना करता है। फ़्रैगमेंट एक संभावित पिक्सेल है जो गहराई और स्टेंसिल परीक्षण पास करने के बाद स्क्रीन पर दृश्य पिक्सेल बन जाता है।

Fragment Shader रास्टराइज़ेशन के बाद निष्पादित होता है, जब 3D प्रिमिटिव (त्रिकोण) पहले से ही फ़्रैगमेंट के सेट में परिवर्तित हो चुके होते हैं। शेडर इंटरपोलेटेड विशेषताएँ प्राप्त करता है — टेक्सचर निर्देशांक, नॉर्मल, रंग जो Vertex Shader में त्रिकोण के शीर्षों के लिए गणना किए गए थे और त्रिकोण के अंदर प्रत्येक पिक्सेल के लिए रैखिक रूप से इंटरपोलेट किए गए।

Fragment Shader के विकास का इतिहास

प्रोग्रामेबल शेडर के आगमन से पहले (DirectX 8 / OpenGL 2.0 से पहले), पिक्सेल रंग गणना एक निश्चित पाइपलाइन द्वारा सीमित संचालन के साथ की जाती थी। प्रोग्रामेबल Fragment Shader 2001 में दिखाई दिया और ग्राफ़िक्स क्षमताओं को मौलिक रूप से विस्तारित किया: डेवलपर्स को प्रत्येक पिक्सेल के रंग पर पूर्ण नियंत्रण मिला, जिससे फोटोरियलिस्टिक प्रकाश, जटिल सामग्री और पोस्ट-प्रभाव लागू करना संभव हुआ।

Fragment Shader कैसे काम करता है?

Fragment Shader GPU द्वारा रास्टराइज़र द्वारा उत्पन्न प्रत्येक फ़्रैगमेंट के लिए लॉन्च किया जाता है। प्रत्येक शेडर कॉल एक फ़्रैगमेंट को प्रोसेस करता है, उसके इनपुट डेटा को पढ़ता है, उपयोगकर्ता कोड निष्पादित करता है और आउटपुट मान — RGBA प्रारूप में फ़्रैगमेंट का रंग लिखता है।

इनपुट और आउटपुट डेटा

Fragment Shader के इनपुट डेटा में Vertex Shader से इंटरपोलेटेड विशेषताएँ (टेक्सचर निर्देशांक, नॉर्मल, रंग), यूनिफ़ॉर्म वेरिएबल (प्रकाश स्रोत, मैट्रिक्स) और टेक्सचर सैंपलर शामिल हैं। आउटपुट डेटा रंग वेक्टर (OpenGL ES 2.0 में gl_FragColor या ES 3.0 में उपयोगकर्ता-परिभाषित वेरिएबल) है, जो कलर बफ़र में लिखा जाता है।

glsl
#version 300 es
precision mediump float;

in vec2 vTexCoord;
uniform sampler2D uTexture;
out vec4 fragColor;

void main() {
    fragColor = texture(uTexture, vTexCoord);
}

Fragment Shader के मुख्य कार्य

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

टेक्सचरिंग

सबसे सामान्य संक्रिया इंटरपोलेटेड UV निर्देशांक का उपयोग करके टेक्सचर से रंग का नमूना लेना है। Sampler2D और texture() फ़ंक्शन टेक्सचर एटलस से पिक्सेल रंग प्राप्त करने की अनुमति देते हैं। फ़िल्टरिंग (bilinear, trilinear, anisotropic) सैंपलर पैरामीटर के माध्यम से नियंत्रित की जाती है और विभिन्न देखने के कोणों पर छवि की स्पष्टता को प्रभावित करती है।

Phong प्रकाश

Phong शेडिंग मॉडल प्रति पिक्सेल Fragment Shader में गणना की जाती है, जो वर्टेक्स प्रकाश (Gouraud शेडिंग) की तुलना में चिकनी हाइलाइट देता है। Phong प्रकाश में तीन घटक शामिल हैं: परिवेश (ambient), विसरित (diffuse) और स्पेक्युलर (specular) परावर्तन।

glsl
// Fragment shader with Phong lighting
in vec3 vNormal;
in vec3 vPosition;
uniform vec3 uLightDir;
uniform vec3 uLightColor;

void main() {
    vec3 norm = normalize(vNormal);
    float diff = max(dot(norm, uLightDir), 0.0);
    fragColor = vec4(uLightColor * diff, 1.0);
}

पोस्ट-प्रभाव और ब्लेंडिंग

Fragment Shader पोस्ट-प्रोसेसिंग लागू करने की अनुमति देता है: लुकअप टेबल (LUT) के माध्यम से रंग सुधार, धुंधला (blur), चमक प्रभाव (bloom) और HDR रेंडरिंग के लिए tonemapping। ये सभी प्रभाव पिक्सेल स्तर पर काम करते हैं और रीयल टाइम में निष्पादित होते हैं।

Fragment Shader का प्रदर्शन और अनुकूलन

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

मुख्य प्रदर्शन समस्याएँ

  • Overdraw — वस्तुओं के ओवरलैप के कारण उसी पिक्सेल का पुनः चित्रण। अर्ध-पारदर्शी वस्तुओं के लिए विशेष रूप से महत्वपूर्ण।
  • सशर्त शाखाएँ — Fragment Shader में शाखाएँ SIMD निष्पादन दक्षता को कम करती हैं, क्योंकि GPU को दोनों शाखाएँ निष्पादित करनी पड़ती हैं।
  • टेक्सचर नमूने — प्रत्येक टेक्सचर नमूने में दसियों GPU क्लॉक साइकिल की विलंबता होती है। सैंपलर की संख्या कम करने से शेडर तेज़ होता है।

Fragment Shader अनुकूलन विधियाँ

मोबाइल GPU (Qualcomm Adreno, ARM Mali) के लिए अनुशंसित: float वेरिएबल के लिए mediump precision का उपयोग करें, टेक्सचर नमूनों को संयोजित करें, शेडर निष्पादन से पहले अदृश्य फ़्रैगमेंट को हटाने के लिए early-z परीक्षण लागू करें।

विधिविवरणलाभ
Mediump precision32-बिट के बजाय 16-बिट सटीकता2x गति तक
Early-Zशेडर से पहले गहराई परीक्षणकॉल में कमी
Texture atlasingकई के बजाय एक टेक्सचरकम स्विच

Fragment Shader बनाम Vertex Shader: तुलना

दोनों प्रकार के शेडर डेवलपर द्वारा प्रोग्राम करने योग्य हैं, लेकिन वे पाइपलाइन के विभिन्न चरणों में काम करते हैं और विभिन्न कार्यों को हल करते हैं। Fragment Shader कॉल की संख्या के कारण काफी अधिक संसाधन-गहन है।

पैरामीटरFragment ShaderVertex Shader
कॉल की संख्यालाखों (स्क्रीन रिज़ॉल्यूशन)हज़ारों (शीर्षों की संख्या)
इनपुट डेटाइंटरपोलेटेड विशेषताएँशीर्ष विशेषताएँ
मुख्य कार्यफ़्रैगमेंट रंग गणनाज्यामिति रूपांतरण
टेक्सचर पहुँचपूर्ण (कई सैंपलर)सीमित
प्रदर्शन प्रभावउच्च (रिज़ॉल्यूशन पर निर्भर)मध्यम (ज्यामिति पर निर्भर)

Fragment Shader कोड उदाहरण

Fragment Shader सरल (टेक्सचर नमूना) या जटिल (बहु-स्तरीय प्रकाश) हो सकता है। आइए दो व्यावहारिक उदाहरण देखें: बुनियादी टेक्सचरिंग और समय का उपयोग करके ग्रेडिएंट प्रभाव।

GLSL में बुनियादी टेक्सचरिंग

glsl
#version 300 es
precision mediump float;
in vec2 vTexCoord;
in vec3 vColor;
uniform sampler2D uDiffuseMap;
out vec4 fragColor;

void main() {
    vec4 texColor = texture(uDiffuseMap, vTexCoord);
    fragColor = texColor * vec4(vColor, 1.0);
}

Metal Shading Language में उदाहरण

cpp
#include <metal_stdlib>
using namespace metal;

struct FragmentIn {
    float2 texCoord;
    float3 normal;
};

fragment float4
fragmentMain(FragmentIn in [[stage_in]],
              texture2d<float> tex [[texture(0)]]) {
    constexpr sampler s(filter = linear);
    float4 color = tex.sample(s, in.texCoord);
    return color;
}

अक्सर पूछे जाने वाले प्रश्न

सरल शब्दों में Fragment Shader क्या है?

Fragment Shader GPU पर एक मिनी-प्रोग्राम है जो निर्धारित करता है कि स्क्रीन पर प्रत्येक पिक्सेल किस रंग का होगा। यदि Vertex Shader वस्तु का आकार निर्धारित करता है, तो Fragment Shader यह निर्धारित करता है कि वह वस्तु कैसी दिखती है — टेक्सचर, प्रकाश, रंग।

Fragment Shader इतना संसाधन-गहन क्यों है?

Fragment Shader स्क्रीन पर प्रत्येक पिक्सेल के लिए कॉल किया जाता है। 2532x1170 (iPhone) रिज़ॉल्यूशन वाले डिवाइस पर यह लगभग 3 मिलियन कॉल प्रति फ्रेम है। 60 FPS पर शेडर प्रति सेकंड 180 मिलियन बार निष्पादित होता है, जिसके लिए भारी कम्प्यूटेशनल शक्ति की आवश्यकता होती है।

Fragment Shader में कौन से प्रभाव बनाए जा सकते हैं?

Fragment Shader में लागू किए जाते हैं: टेक्सचरिंग, प्रकाश (Phong, PBR), छाया, प्रतिबिंब, अपवर्तन, bloom, क्षेत्र की गहराई, रंग सुधार, LUT फ़िल्टर और प्रक्रियात्मक टेक्सचर जनरेशन।

मोबाइल उपकरणों पर Fragment Shader को कैसे अनुकूलित करें?

float के लिए mediump precision का उपयोग करें, टेक्सचर नमूनों की संख्या कम करें, early-z कलिंग लागू करें, शेडर संचालन को संयोजित करें और शेडर के अंदर सशर्त शाखाओं से बचें।

Fragment Shader और Pixel Shader में क्या अंतर है?

ये एक ही चीज़ हैं। Fragment Shader शब्द OpenGL / Vulkan में उपयोग किया जाता है, जबकि Pixel Shader Direct3D (Microsoft) शब्दावली में उपयोग किया जाता है। कार्यात्मक रूप से ये समान हैं: दोनों प्रत्येक फ़्रैगमेंट/पिक्सेल के रंग की गणना करते हैं।

सारांश

  • Fragment Shader — GPU का एक प्रोग्रामेबल चरण जो छवि के प्रत्येक पिक्सेल के रंग की गणना करता है।
  • कॉल की संख्या स्क्रीन रिज़ॉल्यूशन के बराबर है, जो इसे सबसे संसाधन-गहन रेंडरिंग चरण बनाती है।
  • टेक्सचरिंग, Phong प्रकाश और पोस्ट-प्रभाव फ़्रैगमेंट शेडर के मुख्य कार्य हैं।
  • प्रदर्शन सीधे टेक्सचर नमूनों की संख्या और highp precision के उपयोग पर निर्भर करता है।
  • Mediump precision और early-z परीक्षण मोबाइल GPU के लिए मुख्य अनुकूलन तकनीकें हैं।
  • OpenGL ES Fragment Shader शब्द का उपयोग करता है, Direct3D Pixel Shader का — अर्थ समान है।
  • GLSL और Metal Shading Language मोबाइल डेवलपमेंट में Fragment Shader लिखने की मुख्य भाषाएँ हैं।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें