Fragment Shader — nedir, görevleri ve çalışma prensibi

Yazar: IT Sectr Yayınlanma: 2026-06-11 Okuma süresi: 10 dk

Fragment Shader, bir görüntünün her parçasının (piksel) nihai rengini belirleyen, grafik hattının programlanabilir bir aşamasıdır. Khronos Group, 2025'e göre, parça gölgelendirici Vertex Shader'dan enterpolasyonlu veriler alır ve aydınlatma hesaplamaları, doku oluşturma ve renk efektleri gerçekleştirir. Fragment Shader her piksel için çağrılır ve bu da onu grafik hattının en kaynak yoğun aşaması yapar.

Önemli Noktalar

  • Fragment Shader — ekrandaki her pikselin rengini belirleyen, GPU'nun programlanabilir bir aşaması.
  • Çağrı sayısı ekran çözünürlüğüne eşittir ve bu onu oluşturmanın ana hesaplama yükü haline getirir.
  • Doku oluşturma ve Phong aydınlatması, parça gölgelendiricide uygulanan tipik görevlerdir.
  • GLSL ve Metal Shading Language, Fragment Shader yazmak için standart araçlar sağlar.
  • Performans mobil uygulamalarda 60 FPS'ye ulaşmak için kritiktir.

Fragment Shader Nedir?

Fragment Shader (parça veya piksel gölgelendirici), görüntünün her parçasının nihai rengini hesaplayan, grafik hattının programlanabilir bir aşamasıdır. Parça, derinlik ve şablon testlerini geçtikten sonra ekranda görünür piksel haline gelen potansiyel bir pikseldir.

Fragment Shader, 3D ilkellerin (üçgenler) zaten bir parça kümesine dönüştürüldüğü rasterleştirmeden sonra çalıştırılır. Gölgelendirici, Vertex Shader'da üçgen köşeleri için hesaplanan ve üçgenin içindeki her piksel için doğrusal olarak enterpole edilen enterpolasyonlu nitelikleri (doku koordinatları, normaller, renkler) alır.

Fragment Shader'ın Evrim Tarihi

Programlanabilir gölgelendiricilerin ortaya çıkmasından önce (DirectX 8 / OpenGL 2.0 öncesi), piksel rengi hesaplaması sınırlı işlem setine sahip sabit bir hat tarafından gerçekleştiriliyordu. Programlanabilir Fragment Shader 2001 yılında ortaya çıktı ve grafik yeteneklerini kökten genişletti: geliştiriciler her pikselin rengi üzerinde tam kontrol elde ederek fotogerçekçi aydınlatma, karmaşık malzemeler ve sonradan efektler uygulayabildi.

Fragment Shader Nasıl Çalışır?

Fragment Shader, rasterleştirici tarafından oluşturulan her parça için GPU tarafından başlatılır. Her gölgelendirici çağrısı bir parçayı işler, giriş verilerini okur, kullanıcı kodunu çalıştırır ve çıkış değerini — RGBA formatında parçanın rengini — yazar.

Giriş ve çıkış verileri

Fragment Shader giriş verileri, Vertex Shader'dan enterpolasyonlu nitelikler (doku koordinatları, normaller, renkler), uniform değişkenler (ışık kaynakları, matrisler) ve doku örnekleyicilerini içerir. Çıkış verisi, renk tamponuna yazılan renk vektörüdür (OpenGL ES 2.0'da gl_FragColor veya ES 3.0'da kullanıcı tanımlı değişken).

glsl
#version 300 es
precision mediump float;

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

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

Fragment Shader'ın Temel Görevleri

Fragment Shader görüntünün görsel kalitesinden sorumludur. Kullanıcının ekranda gördüğü tüm efektler — renk, gölgeler, yansımalar, şeffaflık — grafik hattının bu aşamasında hesaplanır.

Doku oluşturma

En sık yapılan işlem, enterpolasyonlu UV koordinatlarını kullanarak bir dokudan renk örneklemektir. Sampler2D ve texture() işlevi, bir doku atlasından piksel rengi almayı sağlar. Filtreleme (bilinear, trilinear, anisotropic) örnekleyici parametreleri aracılığıyla kontrol edilir ve farklı görüş açılarında görüntü keskinliğini etkiler.

Phong aydınlatması

Phong gölgeleme modeli, Fragment Shader'da piksel başına hesaplanır ve köşe aydınlatmasından (Gouraud gölgeleme) daha yumuşak parlamalar sağlar. Phong aydınlatması üç bileşen içerir: ortam (ambient), dağınık (diffuse) ve speküler (specular) yansıma.

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);
}

Sonradan efektler ve harmanlama

Fragment Shader, sonradan işleme uygulamaya izin verir: arama tabloları (LUT) aracılığıyla renk düzeltme, bulanıklaştırma (blur), parlama efekti (bloom) ve HDR oluşturma için ton eşleme. Tüm bu efektler piksel seviyesinde çalışır ve gerçek zamanlı olarak yürütülür.

Fragment Shader Performansı ve Optimizasyonu

Fragment Shader performansı, modern mobil oyunlarda FPS'yi sınırlayan ana faktördür. Gölgelendirici her piksel için çağrıldığından, kod karmaşıklığındaki küçük bir artış bile kare hızında belirgin bir düşüşe neden olabilir.

Ana performans sorunları

  • Overdraw — nesnelerin örtüşmesi nedeniyle aynı pikselin yeniden çizilmesi. Yarı saydam nesneler için özellikle kritiktir.
  • Koşullu dallanmalar — Fragment Shader'daki dallanmalar SIMD yürütme verimliliğini azaltır, çünkü GPU her iki dalı da yürütmek zorundadır.
  • Doku örneklemeleri — her doku örneklemesinin onlarca GPU saat döngüsü gecikmesi vardır. Örnekleyici sayısını en aza indirmek gölgelendiriciyi hızlandırır.

Fragment Shader optimizasyon yöntemleri

Mobil GPU'lar (Qualcomm Adreno, ARM Mali) için önerilir: float değişkenler için mediump precision kullanın, doku örneklemelerini birleştirin, gölgelendirici yürütülmeden önce görünmez parçaları atmak için early-z testleri uygulayın.

YöntemAçıklamaKazanç
Mediump precision32 bit yerine 16 bit hassasiyet2x hıza kadar
Early-ZGölgelendiriciden önce derinlik testiÇağrı azaltma
Texture atlasingBirden fazla yerine tek dokuDaha az geçiş

Fragment Shader vs Vertex Shader: Karşılaştırma

Her iki gölgelendirici türü de geliştirici tarafından programlanabilir, ancak hattın farklı aşamalarında çalışır ve farklı görevleri çözer. Fragment Shader çağrı sayısı nedeniyle önemli ölçüde daha kaynak yoğundur.

ParametreFragment ShaderVertex Shader
Çağrı sayısıMilyonlar (ekran çözünürlüğü)Binler (köşe sayısı)
Giriş verileriEnterpolasyonlu niteliklerKöşe nitelikleri
Ana işlevParça rengi hesaplamaGeometri dönüşümü
Doku erişimiTam (birden çok örnekleyici)Sınırlı
Performans etkisiYüksek (çözünürlüğe bağlı)Orta (geometriye bağlı)

Fragment Shader Kod Örnekleri

Fragment Shader basit (doku örnekleme) veya karmaşık (çok katmanlı aydınlatma) olabilir. İki pratik örneği inceleyelim: temel doku oluşturma ve zaman kullanan bir gradyan efekti.

GLSL'de temel doku oluşturma

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 örneği

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

Sıkça Sorulan Sorular

Basit kelimelerle Fragment Shader nedir?

Fragment Shader, GPU üzerinde her pikselin ekranda hangi renkte olacağını belirleyen küçük bir programdır. Vertex Shader nesnenin şeklini belirlerken, Fragment Shader o nesnenin nasıl göründüğünü — doku, aydınlatma, renk — belirler.

Fragment Shader neden bu kadar kaynak yoğun?

Fragment Shader ekrandaki her piksel için çağrılır. 2532x1170 (iPhone) çözünürlüğüne sahip bir cihazda bu, kare başına neredeyse 3 milyon çağrıdır. 60 FPS'de gölgelendirici saniyede 180 milyon kez çalışır ve bu da büyük hesaplama gücü gerektirir.

Fragment Shader'da hangi efektler yapılabilir?

Fragment Shader'da şunlar uygulanır: doku oluşturma, aydınlatma (Phong, PBR), gölgeler, yansımalar, kırılmalar, bloom, alan derinliği, renk düzeltme, LUT filtreleri ve prosedürel doku üretimi.

Mobil cihazlarda Fragment Shader nasıl optimize edilir?

float için mediump precision kullanın, doku örnekleme sayısını azaltın, early-z culling uygulayın, gölgelendirici işlemlerini birleştirin ve gölgelendirici içinde koşullu dallanmalardan kaçının.

Fragment Shader ve Pixel Shader arasındaki fark nedir?

Aynı şeydir. Fragment Shader terimi OpenGL / Vulkan'da kullanılırken, Pixel Shader Direct3D (Microsoft) terminolojisinde kullanılır. İşlevsel olarak aynıdırlar: her ikisi de her parçanın/pikselin rengini hesaplar.

Özet

  • Fragment Shader — görüntünün her pikselinin rengini hesaplayan, GPU'nun programlanabilir bir aşaması.
  • Çağrı sayısı ekran çözünürlüğüne eşittir ve bu onu en kaynak yoğun oluşturma aşaması yapar.
  • Doku oluşturma, Phong aydınlatması ve sonradan efektler parça gölgelendiricinin ana görevleridir.
  • Performans doğrudan doku örnekleme sayısına ve highp precision kullanımına bağlıdır.
  • Mediump precision ve early-z testleri mobil GPU'lar için ana optimizasyon teknikleridir.
  • OpenGL ES Fragment Shader terimini kullanır, Direct3D Pixel Shader kullanır — anlam aynıdır.
  • GLSL ve Metal Shading Language, mobil geliştirmede Fragment Shader yazmak için ana dillerdir.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun