Vertex Shader: এটি কী, কাজ এবং কার্যনীতি

লেখক: IT Sectr প্রকাশিত: 2026-06-11 পড়ার সময়: 10 মিনিট

Vertex Shader হল গ্রাফিক্স পাইপলাইনের একটি প্রোগ্রামেবল পর্যায় যা একটি 3D মডেলের প্রতিটি ভার্টেক্সকে স্বাধীনভাবে প্রক্রিয়া করে। Khronos Group, 2025 অনুসারে, ভার্টেক্স শেডার ইনপুট হিসেবে ভার্টেক্স অ্যাট্রিবিউট গ্রহণ করে — স্থানাঙ্ক, নর্মাল, রঙ এবং টেক্সচার স্থানাঙ্ক — এবং নির্ধারিত লজিক অনুযায়ী সেগুলো রূপান্তর করে। Vertex Shader প্রতিটি ভার্টেক্সের জন্য স্বাধীনভাবে নির্বাহিত হয়, যা GPU-এর হাজার হাজার কোর jুড়ে গণনাগুলোকে দক্ষতার সাথে সমান্তরাল করতে দেয়।

মুখ্য বিষয়

  • Vertex Shader — GPU-এর একটি প্রোগ্রামেবল পর্যায় যা একটি 3D মডেলের প্রতিটি ভার্টেক্সকে স্বাধীনভাবে প্রক্রিয়া করে।
  • স্থানাঙ্ক রূপান্তর অবজেক্ট স্পেস থেকে স্ক্রিন স্পেসে — ভার্টেক্স শেডারের প্রধান কাজ।
  • OpenGL ES 3.0 এবং Metal Shading Language ভার্টেক্স শেডার লেখার জন্য মানক API প্রদান করে।
  • কর্মক্ষমতা Vertex Shader ভার্টেক্সের সংখ্যা এবং শেডার কোডের জটিলতার উপর নির্ভর করে।
  • Skinning এবং ভার্টেক্স মরফিং — GPU-তে ভার্টেক্স শেডারে বাস্তবায়িত সাধারণ কাজ।

Vertex Shader কী?

Vertex Shader হল গ্রাফিক্স পাইপলাইনের একটি প্রোগ্রামেবল পর্যায় যা একটি 3D মডেলের প্রতিটি ভার্টেক্সকে পৃথকভাবে প্রক্রিয়া করে। ভার্টেক্স হল ত্রিমাত্রিক স্থানের একটি বিন্দু যাতে অ্যাট্রিবিউট থাকে: xyz স্থানাঙ্ক, নর্মাল, রঙ এবং UV টেক্সচার স্থানাঙ্ক।

ফিক্সড-ফাংশন পাইপলাইনের বিপরীতে, যেখানে রূপান্তরগুলি একটি কঠোর অ্যালগরিদম অনুযায়ী সম্পাদিত হতো, Vertex Shader ডেভেলপারকে ভার্টেক্স রূপান্তরের উপর সম্পূর্ণ নিয়ন্ত্রণ দেয়। এটি GPU-র পক্ষে প্রোসিজারাল অ্যানিমেশন, মডেল বিকৃতি, কঙ্কাল স্কিনিং এবং যেকোনো গাণিতিক রূপান্তর বাস্তবায়নের অনুমতি দেয়।

গ্রাফিক্স পাইপলাইনে Vertex Shader-এর অবস্থান

OpenGL ES গ্রাফিক্স পাইপলাইনে ইনপুট ডেটা থেকে চূড়ান্ত চিত্র পর্যন্ত পর্যায়গুলির একটি ক্রম অন্তর্ভুক্ত। Vertex Shader ভার্টেক্স অ্যাসেম্বলি পর্যায়ের পরে এবং রাস্টারাইজেশন পর্যায়ের আগে অবস্থিত। CPU থেকে ভার্টেক্স বাফারের মাধ্যমে পাঠানো প্রতিটি ভার্টেক্স Vertex Shader-এর মধ্য দিয়ে ঠিক একবার যায় এবং ফলাফলটি প্রিমিটিভ অ্যাসেম্বলির জন্য পরবর্তী পর্যায়ে পাঠানো হয়।

পাইপলাইন পর্যায়উদ্দেশ্য
Vertex SpecificationVBO থেকে ভার্টেক্স ডেটা এবং অ্যাট্রিবিউট স্থানান্তর
Vertex Shaderপ্রতিটি ভার্টেক্স প্রক্রিয়াকরণ, স্থানাঙ্ক রূপান্তর
Tessellationউপ-প্রিমিটিভে জ্যামিতির ঐচ্ছিক উপবিভাজন
Geometry Shaderপ্রিমিটিভের ঐচ্ছিক তৈরি বা অপসারণ
Rasterizationভরাটের জন্য প্রিমিটিভকে ফ্র্যাগমেন্টে রূপান্তর

Vertex Shader কীভাবে কাজ করে?

Vertex Shader CPU কোডে কনফিগার করা ভার্টেক্স অ্যাট্রিবিউট পয়েন্টারের মাধ্যমে ভার্টেক্স বাফার (VBO) থেকে ভার্টেক্স অ্যাট্রিবিউট গ্রহণ করে। ডেভেলপার GLSL (OpenGL Shading Language) বা সমতুল্য ভাষায় শেডার কোড লেখে, যা GPU ড্রাইভার নির্দিষ্ট চিপের জন্য মেশিন নির্দেশে কম্পাইল করে।

ভার্টেক্স প্রক্রিয়াকরণ প্রবাহ

প্রতিটি ভার্টেক্সের জন্য, Vertex Shader ক্রমিকভাবে তিনটি অপারেশন করে: ইনপুট অ্যাট্রিবিউট পড়া — ডেভেলপার দ্বারা নির্ধারিত রূপান্তর প্রয়োগ — আউটপুট ভেরিয়েবলে ফলাফল লেখা। ন্যূনতম প্রয়োজনীয় আউটপুট হল ক্লিপ স্পেসে ভার্টেক্স অবস্থান (gl_Position)। অন্যান্য সমস্ত আউটপুট ডেটা (রঙ, নর্মাল, টেক্সচার স্থানাঙ্ক) ইন্টারপোলেট হয় এবং পরবর্তী পর্যায়ে — Fragment Shader-এ পাঠানো হয়।

glsl
#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-এর প্রধান কাজ

Vertex Shader জ্যামিতি রূপান্তর সম্পর্কিত গ্রাফিক্স পাইপলাইন কাজের একটি বিস্তৃত পরিসর সমাধান করে। প্রতিটি কাজ ভেক্টর এবং ম্যাট্রিক্সের উপর গাণিতিক ক্রিয়াকলাপের মাধ্যমে বাস্তবায়িত হয়, যা হাজার হাজার ভার্টেক্সের জন্য সমান্তরালভাবে নির্বাহিত হয়।

MVP-এর মাধ্যমে স্থানাঙ্ক রূপান্তর

মৌলিক এবং সবচেয়ে সাধারণ কাজ হল ভার্টেক্স স্থানাঙ্ককে model, view এবং projection (MVP) ম্যাট্রিক্স দ্বারা গুণ করা। MVP ম্যাট্রিক্স ভার্টেক্সকে স্থানীয় মডেল স্পেস থেকে ক্লিপ স্পেসে রূপান্তর করে, যা পরে পাইপলাইনের স্বয়ংক্রিয় পর্যায়ে স্বাভাবিকীকৃত এবং স্ক্রিন স্থানাঙ্কে রূপান্তরিত হয়।

কঙ্কাল অ্যানিমেশন (Skinning)

অ্যানিমেটেড চরিত্রের জন্য, Vertex Shader কঙ্কাল অ্যানিমেশন (skinning) বাস্তবায়ন করে। প্রতিটি ভার্টেক্স নির্দিষ্ট ওজন সহ একাধিক হাড়ের সাথে আবদ্ধ থাকে। Vertex blending — আবদ্ধ হাড় থেকে রূপান্তরের ওজনযুক্ত সমষ্টি — কঙ্কাল নড়াচড়া করলে চরিত্রের ত্বককে মসৃণভাবে বিকৃত করতে দেয়।

প্রোসিজারাল জ্যামিতি বিকৃতি

Vertex Shader CPU-র অংশগ্রহণ ছাড়াই সময় বা অন্যান্য uniform প্যারামিটারের উপর ভিত্তি করে জ্যামিতি পরিবর্তন করতে পারে। Wave deformation, পার্লিন নয়েজ স্থানান্তর এবং জলের ঢেউ প্রভাব — এই সমস্ত প্রভাব RAM থেকে জ্যামিতি পুনরায় লোড না করেই ভার্টেক্স শেডারে বাস্তবায়িত হয়।

Vertex Shader বনাম Fragment Shader: পার্থক্য

যদিও উভয় প্রকার শেডারই গ্রাফিক্স পাইপলাইনের প্রোগ্রামেবল পর্যায়, Vertex Shader এবং Fragment Shader মৌলিকভাবে ভিন্ন কাজ সমাধান করে এবং চিত্র প্রক্রিয়াকরণের বিভিন্ন পর্যায়ে কাজ করে।

বৈশিষ্ট্যVertex ShaderFragment Shader
ইনপুট ডেটাVBO থেকে ভার্টেক্স অ্যাট্রিবিউটVS থেকে ইন্টারপোলেটেড ডেটা
কলের সংখ্যাভার্টেক্সের সংখ্যাফ্র্যাগমেন্টের সংখ্যা
প্রধান কাজজ্যামিতি রূপান্তরপিক্সেল রঙ গণনা
গণনামূলক ভারজ্যামিতি জটিলতাস্ক্রিন রেজোলিউশন
টেক্সচার অ্যাক্সেসসীমিত (texture lookup-এর মাধ্যমে)সম্পূর্ণ অ্যাক্সেস

মূল পার্থক্য হল কল ফ্রিকোয়েন্সি। Vertex Shader প্রতি ভার্টেক্সে একবার কল করা হয়, যেখানে Fragment Shader প্রতিটি ফ্র্যাগমেন্টের (পিক্সেল) জন্য কল করা হয়। উচ্চ-রেজোলিউশন দৃশ্যে, Fragment Shader কলের সংখ্যা Vertex Shader কলের চেয়ে হাজার গুণ বেশি, যা পিক্সেল শেডার অপ্টিমাইজেশনকে আরও গুরুত্বপূর্ণ করে তোলে।

Vertex Shader-এর কর্মক্ষমতা এবং অপ্টিমাইজেশন

Vertex Shader-এর কর্মক্ষমতা রিয়েল-টাইম অ্যাপ্লিকেশনের জন্য অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে সীমিত বিদ্যুৎ খরচ সহ মোবাইল ডেভেলপমেন্টে। প্রধান কর্মক্ষমতা বিষয়গুলি হল ভার্টেক্সের সংখ্যা, শেডার কোডের জটিলতা এবং GPU মেমরি ব্যান্ডউইথ।

কর্মক্ষমতাকে প্রভাবিতকারী বিষয়গুলি

  • ভার্টেক্স সংখ্যা — প্রতি ফ্রেমে GPU-তে পাঠানো ভার্টেক্সের সংখ্যা। লক্ষ লক্ষ পলিগন বিশিষ্ট মডেল ভার্টেক্স শেডারে উচ্চ চাপ সৃষ্টি করে।
  • শেডার জটিলতা — শেডারে নির্দেশের সংখ্যা। নেস্টেড লুপ এবং শর্তসাপেক্ষ শাখা (divergence) SIMD ইউনিটের সমান্তরাল কর্মক্ষমতা হ্রাস করে।
  • ব্যান্ডউইথ — ভিডিও মেমরি থেকে ভার্টেক্স ডেটা পড়ার গতি। অ্যাট্রিবিউটের বিন্যাস (float32, float16, সাধারণীকৃত পূর্ণসংখ্যা) সরাসরি থ্রুপুটকে প্রভাবিত করে।

ভার্টেক্স শেডার অপ্টিমাইজেশন পদ্ধতি

Vertex Shader-এর উপর চাপ কমানোর জন্য নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করা হয়। Level of Detail (LOD) — ক্যামেরা বস্তু থেকে দূরে সরে গেলে মডেলের সরলীকৃত সংস্করণে সুইচ করা। Instancing — একটি ড্র কলের মধ্যে বিভিন্ন রূপান্তর ম্যাট্রিক্স সহ একই জ্যামিতি একাধিকবার অঙ্কন করা।

glsl
// 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 কোড উদাহরণ

Vertex Shader বিভিন্ন গ্রাফিক্স API-তে একই রকম লজিক রাখে, কিন্তু ভিন্ন সিনট্যাক্স এবং নামকরণের নিয়ম রাখে। আসুন OpenGL ES 3.0-এর জন্য GLSL-এ এবং iOS ও macOS-এর জন্য Metal Shading Language-এ মৌলিক ভার্টেক্স শেডারের বাস্তবায়ন দেখি।

OpenGL ES 3.0-এর জন্য GLSL উদাহরণ

glsl
#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;
}

Metal Shading Language উদাহরণ

cpp
#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 কী?

Vertex Shader হল GPU-তে একটি প্রোগ্রাম যা একটি 3D মডেলের প্রতিটি ভার্টেক্স প্রক্রিয়া করে এবং এর স্থানাঙ্ককে স্ক্রিন স্থানাঙ্ক এ রূপান্তর করে। মডেলটিকে বিন্দুর জাল হিসেবে কল্পনা করুন; ভার্টেক্স শেডার নির্ধারিত গাণিতিক নিয়ম অনুযায়ী এই বিন্দুগুলিকে স্থানান্তরিত করে।

Vertex Shader Fragment Shader থেকে কীভাবে আলাদা?

Vertex Shader ভার্টেক্স প্রক্রিয়া করে এবং জ্যামিতির জন্য দায়ী, যেখানে Fragment Shader প্রতিটি পিক্সেলের রঙ নির্ধারণ করে। প্রথমটি প্রতি ভার্টেক্সে (হাজার হাজার) কল করা হয়, দ্বিতীয়টি প্রতি পিক্সেলে (লক্ষ লক্ষ)।

Vertex Shader কোন ভাষায় লেখা হয়?

Vertex Shader গ্রাফিক্স API-র অনুরূপ ভাষায় লেখা হয়: OpenGL ES-এর জন্য GLSL, iOS/macOS-এ Metal API-র জন্য Metal Shading Language, Direct3D-এর জন্য HLSL। ধারণাগতভাবে, এগুলি সবই ভার্টেক্সের উপর একই ক্রিয়াকলাপ সম্পাদন করে।

Vertex Shader কীভাবে কর্মক্ষমতাকে প্রভাবিত করে?

ভার্টেক্স শেডারের জটিলতা সরাসরি FPS-কে প্রভাবিত করে: প্রতি ভার্টেক্সে বেশি নির্দেশ = বেশি প্রক্রিয়াকরণ সময়। অপ্টিমাইজেশন LOD-এর মাধ্যমে ভার্টেক্সের সংখ্যা হ্রাস, instancing ব্যবহার এবং শেডার কোডে শর্তসাপেক্ষ শাখা হ্রাস অন্তর্ভুক্ত করে।

গেমগুলিতে Vertex Shader কী কী কাজ সমাধান করে?

প্রধান গেমিং কাজ: MVP ম্যাট্রিক্সের মাধ্যমে স্থানাঙ্ক রূপান্তর, অ্যানিমেটেড চরিত্রের skinning, পোশাক এবং চুলের প্রোসিজারাল বিকৃতি, মুখের অভিব্যক্তির মধ্যে মরফিং এবং GPU অ্যানিমেশন সহ কণা প্রভাব।

সারসংক্ষেপ

  • Vertex Shader — গ্রাফিক্স পাইপলাইনের একটি প্রোগ্রামেবল পর্যায় যা একটি 3D মডেলের প্রতিটি ভার্টেক্সকে স্বাধীনভাবে প্রক্রিয়া করে।
  • প্রধান কাজ — MVP ম্যাট্রিক্সের মাধ্যমে ভার্টেক্স স্থানাঙ্কের স্থানীয় স্পেস থেকে স্ক্রিন স্পেসে রূপান্তর।
  • Vertex Shader একাধিক GPU কোর জুড়ে সমান্তরালভাবে নির্বাহিত হয়, লক্ষ লক্ষ ভার্টেক্সের সাথে উচ্চ কর্মক্ষমতা প্রদান করে।
  • Skinning, মরফিং এবং প্রোসিজারাল অ্যানিমেশন CPU অংশগ্রহণ ছাড়াই ভার্টেক্স শেডারে বাস্তবায়িত হয়।
  • Vertex Shader-এর কলের সংখ্যা ভার্টেক্সের সংখ্যার সমান — Fragment Shader কলের তুলনায় উল্লেখযোগ্যভাবে কম।
  • অপ্টিমাইজেশন LOD মডেল, instancing এবং শেডার কোডে শাখা হ্রাস অন্তর্ভুক্ত করে।
  • GLSL এবং Metal Shading Language মোবাইল ডেভেলপমেন্টে ভার্টেক্স শেডারের জন্য প্রধান ভাষা।

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন