Kim?
Hacettepe İstatistik Bölümü mezunu olduğu halde, hayatını kendini mutlu eden bilgisayar programcılığına ve sevgili eşi Deniz'e adamış, su kaplumbağalarının bizzat annesi ayrıca Anathema ve Opeth severgillerden olan bu kişinin sayfasına hoşgeldiniz.
Bağlantılar
oyunyapimi.org
aydinoglu.blogspot.com
CizBakalim.com
SHADER PROGRAMLAMA
Bu döküman dizisi bilgisayar grafiği uygulamalarındaki önemli konulardan biri olan ve özellikle son dönemlerde kullanımı oldukça yaygınlaşan shader programlamaya bir giriş yapmayı amaçlamaktadır. Peki nedir bu shader ve shader programlama?
SHADER PROGRAMLAMA NEDİR?
Tanımlanan ışık kaynakları, yüzey materyalleri ve geometri gibi parametrelerin üretilen görüntüye etkilerinin hesaplanarak yansıtılması işlemlerini shading olarak tanımlayabiliriz. Aşağıda gösterilen örnekte GPU(Graphics Processing Unit)’nun oluşturduğu iki ayrı 3 boyutlu sahne bulunmaktadır. Soldaki görüntü çevre koşullarından etkilenmeyecek şekilde, sağdaki ise ışık ve materyal bilgileri kullanılarak oluşturulmuştur.
Grafik kartlarının sahnenin oluşumu için uyguladıkları bir dizi işleme fixed function pipeline denir. Shader programlama ile yapılan ise; GPU’nun normal işleyişi sırasında izlediği fixed function pipeline’a müdahele ederek geliştiricinin istediği eklentileri yapabilmesidir. Bu durum programlama ile yapabilecekler konusunda oldukça serbestlik sağlamak ile birlikte, belki daha önce GPU’nun işleyiş şekli ile çok ilgilenmeyen geliştiricinin bu konuyu iyi anlamasını gerekli kılmaktadır. Bundan dolayı konuya hemen başlamadan önce alt yapının incelenmesi için bazı önemli konulara dizinin ilk yazısında yer vermek daha uygun olacaktır.
GRAFİK PİPELİNE NEDİR?
Grafik Pipeline, GPU’nun 3 boyutlu sahneyi oluşturmak için gerekli olan elemanları girdi olarak alıp, 2 boyutlu raster imajı üretmek için uyguladığı bir dizi işleme denir.Bu işleme girdi olarak gelen öğeler:
- Nokta kordinatları,
- Noktaların birleştirilmesi için kullanılacak yöntem (nokta, çizgi, üçgen, polygon, ...) ,
- Renk bilgisi,
- Kaplama koordinatları (texture coordinates),
- Işık kaynakları,
- Materyal bilgisi.
şeklinde sıralanabilir.
Sahnenin hazırlanması için GPU’nun yukarıda sıralanan öğeleri kullanarak uyguladığı işlemleri adım adım incelemek gerekirse;
1.UYGULAMA (Application)
Ürettiğimiz yazılım içerisinden GPU’ya görüntü oluşturmak için gerekli olan öğelerin (nokta koordinatları, ışık özellikleri, materyal bilgisi, vb.) aktarılması işlemleri bu kısımda yapılır. Bu işlemler CPU’nun GPU’ya veri hazırlaması ve aktarması olarak özetlenebilir.
2.GEOMETRİK İŞLEMLER ve RASTERİZASYON İŞLEMLERİ
Bu bölümde GPU’ya gelen vektör grafik formatında olan bir imaj bilgisini raster imaj’a çevirip video görüntüsü olarak çıktı oluşturma işlemi (rasterizasyon) yapılır.Vektör Grafik:Bilgisayar grafiğinde resim bilgisinin geometrik şekiller (nokta, çizgi, üçgen, polygon, ...) ile matematiksel olarak ifade edilmesidir.Raster Grafik:Resim bilgisinin pikseller kümesi olarak ifade edilmesidir. Piksel ise bir imajdaki en küçük renk bilgisine denir.Kırmızı,Yeşil,Mavi bilgisini içeren 3 ayrı parçadan oluşur.Bu bölümde GPU tarafından uygulanan adımlara gelince:
- Model ve View dönüşümleri (matris işlemleri),
- Işık etkisinin hesaplanması,
- Projeksiyon (ortografik veya perspektif),
- Kırpma (culling),
- Ekran koordinatlarına dönüştürme.
3.RASTER İŞLEMLERİ
Bu bölüm bir önceki bölümde rasterize edilmiş imaj bilgisindeki piksel değerleri ile daha gerçekçi bir sahne elde edilmesi için, piksellere uygulanan bir dizi testi içerir. Bu testleri sıralamak gerekirse:
- Scissor test,
- Alpha test,
- Stencil test,
- Depth test.
Grafik Pipeline ve Shader Programlama
GPU’nun genel iç yapısını yukarıdaki şekilde özetledikten sonra artık shader programlama yaparak bu sabit yapıda müdahele edebildiğimiz alanlara kısaca değinebiliriz. İki çeşit shader programlama türü vardır.
1.Vertex Shader: Yazacağınız bir vertex shader programı ile GPU’ya gönderilen herbir vertex üzerinde işlem yapabilirsiniz.
2.Fragment(pixel) Shader: GPU’nun oluşturduğu görüntü imajın raster işlemlerine girmeden önceki kısmında fragment shader programlama işlem yapabilirsiniz.
Yazılımınzda bir shader programı kullandığınızda GPU’nun -fixed pipeline- normal gidişatına müdahele etmiş olursunuz. Bu durumda GPU normalde üstlendiği tüm fonksiyonaliteleri sizin yazdığınız uygulamaya devreder. Bu aşamadan sonra artık uygulamanızda grafik kartınızın bu kısmından beklediğiniz fonksiyonları -eğer ihtiyaç duyuyorsanız - shader programınız içinde kendiniz uyarlamanız gerekecektir.
Örneğin bir vertex shader yazmanız durumunda gerekli olan dönüşüm işlemlerini kullandığınız aracı shader dilinin yardımı ile GPU’ya yaptırtmak size kalan bir işlemdir.
Neslihan Aydınoğlu :: Temmuz 2007