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 (ফ্র্যাগমেন্ট বা পিক্সেল শেডার) হল গ্রাফিক্স পাইপলাইনের একটি প্রোগ্রামেবল স্তর যা ছবির প্রতিটি ফ্র্যাগমেন্টের চূড়ান্ত রঙ গণনা করে। ফ্র্যাগমেন্ট হল একটি সম্ভাব্য পিক্সেল যা গভীরতা এবং স্টেনসিল পরীক্ষা পাস করার পরে স্ক্রিনে দৃশ্যমান পিক্সেলে পরিণত হয়।

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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

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

আরও পড়ুন