Vertex Shader: nedir, görevleri ve çalışma prensibi

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

Vertex Shader, grafik hattının (graphics pipeline) her bir 3B model köşesini bağımsız olarak işleyen programlanabilir bir aşamasıdır. Khronos Group, 2025'e göre, vertex shader giriş olarak köşe niteliklerini (koordinatlar, normaller, renk ve doku koordinatları) alır ve bunları tanımlanan mantığa göre dönüştürür. Vertex Shader her köşe için bağımsız olarak çalışır ve hesaplamaların GPU'nun binlerce çekirdeğinde verimli bir şekilde paralelleştirilmesine olanak tanır.

Önemli Noktalar

  • Vertex Shader GPU'nun programlanabilir bir aşamasıdır ve 3B modelin her köşesini bağımsız olarak işler.
  • Koordinat dönüşümü (nesne uzayından ekran uzayına) vertex shader'ın ana görevidir.
  • OpenGL ES 3.0 ve Metal Shading Language, vertex shader yazmak için standartlaştırılmış API'ler sağlar.
  • Performans köşe sayısına ve shader kodunun karmaşıklığına bağlıdır.
  • Skinning ve köşe morfingi, GPU'da vertex shader'da uygulanan tipik görevlerdir.

Vertex Shader Nedir?

Vertex Shader, grafik hattının programlanabilir bir aşamasıdır ve 3B modelin her köşesini ayrı ayrı işler. Köşe (vertex), xyz koordinatları, normaller, renk ve UV doku koordinatları gibi nitelikler içeren üç boyutlu uzayda bir noktadır.

Dönüşümlerin katı bir algoritmaya göre gerçekleştirildiği sabit işlevli hattın (fixed-function pipeline) aksine, Vertex Shader geliştiriciye köşe dönüşümü üzerinde tam kontrol sağlar. Bu, GPU tarafında prosedürel animasyon, model deformasyonu, iskelet skinning ve her türlü matematiksel dönüşümün uygulanmasına olanak tanır.

Vertex Shader'ın Grafik Hattındaki Yeri

OpenGL ES grafik hattı, giriş verilerinden nihai görüntüye kadar bir dizi aşama içerir. Vertex Shader köşe birleştirme (vertex assembly) aşamasından sonra ve rasterleştirme aşamasından önce yer alır. CPU'dan bir köşe arabelleği aracılığıyla gönderilen her köşe, Vertex Shader'dan tam olarak bir kez geçer ve sonuç, ilkel birleştirme için bir sonraki aşamaya iletilir.

Hat AşamasıAmaç
Vertex SpecificationVBO'dan köşe verileri ve niteliklerinin aktarımı
Vertex ShaderHer köşenin işlenmesi, koordinat dönüşümü
TessellationGeometrinin alt ilkellere isteğe bağlı bölünmesi
Geometry Shaderİlkellerin isteğe bağlı oluşturulması veya kaldırılması
RasterizationDoldurma için ilkellerin parçacıklara dönüştürülmesi

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

Vertex Shader, CPU kodunda yapılandırılan köşe nitelik işaretçileri aracılığıyla köşe arabelleğinden (VBO) köşe niteliklerini alır. Geliştirici, GLSL (OpenGL Shading Language) veya eşdeğer bir dilde shader kodu yazar ve GPU sürücüsü bunu belirli çip için makine talimatlarına derler.

Köşe İşleme Akışı

Her köşe için Vertex Shader sırayla üç işlem gerçekleştirir: giriş niteliklerini okuma — geliştirici tarafından tanımlanan dönüşümleri uygulama — sonuçları çıkış değişkenlerine yazma. Gerekli minimum çıkış, kırpma uzayındaki köşe konumudur (gl_Position). Diğer tüm çıkış verileri (renk, normaller, doku koordinatları) enterpole edilir ve bir sonraki aşamaya (Fragment Shader) iletilir.

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'ın Ana Görevleri

Vertex Shader, geometri dönüşümüyle ilgili çok çeşitli grafik hattı görevlerini çözer. Her görev, vektörler ve matrisler üzerinde matematiksel işlemler yoluyla uygulanır ve binlerce köşe için aynı anda paralel olarak yürütülür.

MVP ile Koordinat Dönüşümü

Temel ve en yaygın görev, köşe koordinatlarını model, view ve projection (MVP) matrisleriyle çarpmaktır. MVP matrisi bir köşeyi yerel model uzayından kırpma uzayına (clip space) dönüştürür ve daha sonra hattın otomatik aşamalarında normalleştirilir ve ekran koordinatlarına dönüştürülür.

İskelet Animasyonu (Skinning)

Animasyonlu karakterler için Vertex Shader, iskelet animasyonunu (skinning) uygular. Her köşe, belirli ağırlıklarla birden çok kemiğe bağlanır. Vertex blending — bağlı kemiklerden gelen dönüşümlerin ağırlıklı toplamı — iskelet hareket ettiğinde karakterin derisinin pürüzsüz bir şekilde deforme olmasını sağlar.

Prosedürel Geometri Deformasyonu

Vertex Shader, CPU katılımı olmadan zamana veya diğer uniform parametrelere dayalı olarak geometriyi değiştirebilir. Dalga deformasyonu, Perlin gürültüsü yer değiştirmesi ve su dalgası efektleri — tüm bu efektler, RAM'den geometri yeniden yüklenmeden vertex shader'da uygulanır.

Vertex Shader vs Fragment Shader: Farklar

Her iki shader türü de grafik hattının programlanabilir aşamaları olsa da, Vertex Shader ve Fragment Shader temelde farklı görevleri çözer ve görüntü işlemenin farklı aşamalarında çalışır.

ÖzellikVertex ShaderFragment Shader
Giriş verileriVBO'dan köşe nitelikleriVS'den enterpole edilmiş veriler
Çağrı sayısıKöşe sayısıParçacık sayısı
Ana görevGeometri dönüşümüPiksel rengi hesaplama
Hesaplama yüküGeometri karmaşıklığıEkran çözünürlüğü
Doku erişimiSınırlı (texture lookup ile)Tam erişim

Anahtar fark çağrı sıklığıdır. Vertex Shader köşe başına bir kez çağrılırken, Fragment Shader her parçacık (piksel) için çağrılır. Yüksek çözünürlüklü bir sahnede, Fragment Shader çağrılarının sayısı Vertex Shader çağrılarının sayısını binlerce kat aşar ve bu da piksel shader optimizasyonunu daha da kritik hale getirir.

Vertex Shader Performansı ve Optimizasyonu

Vertex Shader performansı gerçek zamanlı uygulamalar için, özellikle sınırlı güç tüketimi olan mobil geliştirmede kritik öneme sahiptir. Ana performans faktörleri köşe sayısı, shader kodunun karmaşıklığı ve GPU bellek bant genişliğidir.

Performansı Etkileyen Faktörler

  • Köşe sayısı — kare başına GPU'ya gönderilen köşe sayısı. Milyonlarca çokgenli modeller, vertex shader üzerinde yüksek yük oluşturur.
  • Shader karmaşıklığı — shader'daki talimat sayısı. İç içe döngüler ve koşullu dallanmalar (divergence), SIMD birimlerinin paralel performansını düşürür.
  • Bant genişliği — video belleğinden köşe verilerini okuma hızı. Nitelik biçimi (float32, float16, normalleştirilmiş tam sayı) doğrudan verimliliği etkiler.

Vertex Shader Optimizasyon Yöntemleri

Vertex Shader üzerindeki yükü azaltmak için aşağıdaki yaklaşımlar kullanılır. Level of Detail (LOD) — kamera nesneden uzaklaştığında modellerin basitleştirilmiş sürümlerine geçme. Instancing — tek bir çizim çağrısında (draw call) farklı dönüşüm matrisleriyle aynı geometriyi birden çok kez çizme.

glsl
// Instancing desteğiyle 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 Kod Örnekleri

Vertex Shader farklı grafik API'lerinde benzer mantığa ancak farklı sözdizimi ve adlandırma kurallarına sahiptir. OpenGL ES 3.0 için GLSL'de ve iOS ile macOS için Metal Shading Language'de temel bir vertex shader uygulamasına bakalım.

OpenGL ES 3.0 için GLSL Örneği

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

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

Sıkça Sorulan Sorular

Basit kelimelerle Vertex Shader nedir?

Vertex Shader, 3B modelin her köşesini işleyen ve koordinatlarını ekran koordinatlarına dönüştüren GPU üzerindeki bir programdır. Modeli bir nokta ağı olarak hayal edin; vertex shader bu noktaları tanımlanan matematiksel kurallara göre hareket ettirir.

Vertex Shader Fragment Shader'dan nasıl farklıdır?

Vertex Shader köşeleri işler ve geometriden sorumluyken, Fragment Shader her pikselin rengini belirler. Birincisi her köşe için (binlerce), ikincisi her piksel için (milyonlarca) çağrılır.

Vertex Shader hangi dillerde yazılır?

Vertex Shader, grafik API'sine karşılık gelen bir dilde yazılır: OpenGL ES için GLSL, iOS/macOS üzerinde Metal API için Metal Shading Language, Direct3D için HLSL. Kavramsal olarak, hepsi köşeler üzerinde aynı işlemleri gerçekleştirir.

Vertex Shader performansı nasıl etkiler?

Vertex shader'ın karmaşıklığı doğrudan FPS'yi etkiler: köşe başına daha fazla talimat = daha uzun işlem süresi. Optimizasyon, LOD ile köşe sayısını azaltmayı, instancing kullanmayı ve shader kodunda koşullu dallanmaları en aza indirmeyi içerir.

Oyunlarda Vertex Shader hangi görevleri çözer?

Oyunlardaki ana görevler: MVP matrisleriyle koordinat dönüşümü, animasyonlu karakterlerin skinningi, giysi ve saçın prosedürel deformasyonu, yüz ifadeleri arasında morfing ve GPU animasyonuyla parçacık efektleri.

Özet

  • Vertex Shader grafik hattının programlanabilir bir aşamasıdır, 3B modelin her köşesini bağımsız olarak işler.
  • Ana görev — köşe koordinatlarının MVP matrisleriyle yerel uzaydan ekran uzayına dönüştürülmesi.
  • Vertex Shader, milyonlarca köşeyle yüksek performans sağlayarak birden çok GPU çekirdeğinde paralel olarak çalışır.
  • Skinning, morfing ve prosedürel animasyon, CPU katılımı olmadan vertex shader'da uygulanır.
  • Vertex Shader'ın çağrı sayısı köşe sayısına eşittir — Fragment Shader çağrılarından önemli ölçüde daha azdır.
  • Optimizasyon, LOD modelleri, instancing ve shader kodunda dallanmaların en aza indirilmesini içerir.
  • GLSL ve Metal Shading Language, mobil geliştirmede vertex shader 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