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 لکھنے کے لیے معیاری اوزار فراہم کرتے ہیں۔
  • کارکردگی موبائل ایپلیکیشنز میں 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 رینڈرنگ کے لیے ٹون میپنگ۔ یہ تمام اثرات پکسل سطح پر کام کرتے ہیں اور ریئل ٹائم میں عمل میں آتے ہیں۔

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 فلٹرز اور Procedural ٹیکسچر جنریشن۔

موبائل آلات پر Fragment Shader کو کیسے بہتر بنایا جائے؟

float کے لیے mediump precision استعمال کریں، ٹیکسچر کے نمونوں کی تعداد کم کریں، early-z culling لگائیں، شیڈر آپریشنز کو یکجا کریں اور شیڈر کے اندر مشروط شاخوں سے بچیں۔

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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں