GPU’nun gücü: Shader Nedir?

Shader, özetle bir pixelin veya vertexin özelliklerini tanımlamaya yarayan ekran kartı(GPU) programcıklarıdır. Daha da basitleştirirsek bilgisayara bir pixeli nasıl ekrana çizdireceğini anlatan basit GPU programlarıdır


Oyunlarda gördüğümüz grafiklerin güzelliği eminim çoğumuzu etkiliyordur ve nasıl yapıldığını merak ediyoruzdur.
Bende bu yazımda sizlere Shader’lar ile nasıl yapıldığını anlatacağım:

Shader nedir?

Shader, özetle bir pixelin veya vertexin özelliklerini tanımlamaya yarayan ekran kartı(GPU) programcıklarıdır. Daha da basitleştirirsek bilgisayara bir pixeli nasıl ekrana çizdireceğini anlatan basit GPU programlarıdır.

Vertex nedir?

Tanımımdaki vertexin ne olduğu ile ilgili kafanız karışmış olabilir, bu yüzden şimdi de kısaca vertexi tanımlayalım.
Vertex: 2 boyutlu veya 3 boyutlu boşluktaki bir noktayı temsil eder, Vertex o noktanın pozisyon, renk, textcoord(o noktanın herhangi bir texture daki pozisyonu) gibi niteliklerini tanımlar, kısaca Vertex grafiksel bir noktayı temsil eder.

Graphics Pipeline

Graphics Pipeline, GPU’nun 3 boyutlu sahneyi 2 boyutlu bir ekrana çizdirebilmek için uyguladığı bir dizi işleme denir.Bu işleme girdi olarak gelen öğeler:


  • Nokta pozisyonları
  • Noktaların birleştirilmesi için kullanılacak yöntem (nokta, çizgi, üçgen, polygon, …)
  • Renk
  • Kaplama koordinatları (texture coordinates/textcoord)

  • Yani kısaca Vertexler.

Bu başlıktan bahsetme sebepim Vertex‘lerin kullanım yerini size açıklamaktı 😊.


Shaderlar nasıl yazılır?

Shader dediğimiz GPU programcıkları Graphics APIleri ile geliştirilir, API nin tanımından da yola çıkarak Graphics API‘leri ekran kartımızın driverında bulunan hazır fonksiyonları yani işlevleri kullanarak ekran kartımızla etkileşime girmemize yarıyor (API: uygulama programlama arayüzü).

Kullandığınız Graphics API‘nin dilini kullanarak yazdığınız script(kod dosyası), o Graphics API‘nin GPU driver’ı tarafından implement edilmiş derleyicisi tarafından derlenip bir Shader haline getirilir,
bu sayede Shader yazabilirsiniz.

(NOT: Graphics API olarak yazmamın sebepi API kısaltmasını türkçe olarak yazmak istememem 😊.)

Bilindik Graphics API‘leri:


  • OpenGL
  • Vulkan
  • DirectX

Size tavsiyem eğer çoklu platform bir oyun motoru veya oyun gibi Shader kullanan uygulamalar yapacaksanız platforma göre ve o platformdaki performansına göre çoklu API’ler kullanmanız (tabi sizi zorlayacağını düşünmüyorsanız).
-Mesela Windows için DirectX kullanmanız daha iyi olur.

Shader tipleri:

Fragment(Pixel) Shader (2D)

Verilen pixelin renk, alfa kanalı, z-depth gibi niteliklerini işlemeye ve tanımlamaya yarayan Shader tipidir. Pixel Shader‘ını pixeller için bir filtre gibi düşünebilirsiniz. Tek başına bir Pixel Shader çok karmaşık effectler ortaya çıkaramaz çünkü sadece bir pixel üzerinde, diğer pixellerin bilgisine sahip olmadan çalışır.
Fragment Shader örneği: Fotoğraf filtereleri bir örnek olabilir mesela.

Vertex Shader (3D)

Vertex Shader ise Graphics Pipeline‘nin kullandığı Vertex‘ler ile ilgili nitelikleri işlemeye ve tanımlamaya yarar, mesela Vertex‘lerin pozisyonları ,textcoordları, renkleri gibi.
Vertex Shader örneği: Eğer minecraft gibi oyunlar oynamışsanız oradaki çimenlerin sallanışını sağlamak için Vertex Shader tipi kullanılır.

Vertex Shader vs Fragment Shader

Vertex Shader vs Fragment Shader

Resim’de Vertex Shader 3D nesneyi çizmek için gerekli, Fragment Shader ise 3D nesnenin deseninin renkleri için, ışık efekti için…

Shader örnekleri:

1-) Glitch

2-) Okyanus

3-) Bloom

Kendiniz deneyin!

ShaderToy adlı web sitesinde opengl ile yazdığınız Shader‘ları deneyebilir, başkalarının yazdığı Shader‘ları inceleyebilir veya deneyebilirsiniz.


Beğendin mi? Arkadaşlarınla paylaş!

4
4 Puanlar
Efe Osman

8 Yorum

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

  1. Çok Güzel Olmuş Ellerine Sağlık Herşeyi Çok İsteyerek Ve Ayrıntılarına Kadar Anlatmışsın <3