Vertex Shader گرافکس پائپ لائن کا ایک پروگرام قابل مرحلہ ہے جو 3D ماڈل کے ہر ورٹیکس کو آزادانہ طور پر پروسیس کرتا ہے۔ Khronos Group، 2025 کے مطابق، ورٹیکس شیڈر ان پٹ کے طور پر ورٹیکس کی خصوصیات — کوآرڈینیٹ، نارملز، رنگ اور ٹیکسچر کوآرڈینیٹ — وصول کرتا ہے اور انہیں طے شدہ منطق کے مطابق تبدیل کرتا ہے۔ Vertex Shader ہر ورٹیکس کے لیے آزادانہ طور پر عملدرآمد کرتا ہے، جس سے GPU کے ہزاروں کوروں پر حسابات کو مؤثر طریقے سے متوازی کیا جا سکتا ہے۔
خلاصہ
Vertex Shader گرافکس پائپ لائن کا ایک پروگرام قابل مرحلہ ہے جو 3D ماڈل کے ہر ورٹیکس کو انفرادی طور پر پروسیس کرتا ہے۔ ورٹیکس تین جہتی خلا میں ایک نقطہ ہے جس میں خصوصیات ہوتی ہیں: xyz کوآرڈینیٹ، نارملز، رنگ اور UV ٹیکسچر کوآرڈینیٹ۔
فکسڈ فنکشن پائپ لائن کے برعکس جہاں تبدیلیاں ایک سخت الگورتھم کے مطابق کی جاتی تھیں، Vertex Shader ڈیولپر کو ورٹیکس تبدیلی پر مکمل کنٹرول دیتا ہے۔ یہ GPU کی جانب پروسڈیورل اینیمیشن، ماڈل کی اخترتی، کنکال skinning اور کسی بھی ریاضیاتی تبدیلی کو لاگو کرنے کی اجازت دیتا ہے۔
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 مختلف گرافکس APIs میں ایک جیسی منطق رکھتا ہے لیکن مختلف نحو اور نام رکھنے کے اصول رکھتا ہے۔ آئیے 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں