Görüntüleri Hareketlendirme Zamanı
Durağan 3B sahnelerin nasıl yaratıldığını gördükten sonra bunların nasıl hareket kazandığını öğrenebiliriz. Şu ana kadar anlattığımız işlemlerin hiçbiri donanımı yaratılan bu durağan görütülere hareket kazandırmaktan daha fazla zorlayamaz. Üçgenlerden ve poligonlardan olşuan tel örgülerimizi hareket ettirmek için ekrandaki her piksel saniyede belirli sayıda hesaplama yapılmalıdır.
Yüksek çöznürlük denince aklımıza en az 1024×768 gelir, daha düşük çözünürlükleri adam yerine koymayız pek. Bu çözünürlükte 786.432 adet piksel kulllanır, her piksel için 32 bit renk kullanıldığında 25.165.824 bit sadece durağan görüntü için gereklidir. Görüntünün 60 FPS hızda çalışması için her saniye 1.509.949.440 bit veri aktarılmalıdır ve bu sadece görüntüyü ekrana yansıtmak için yeterlidir. Bunun yanında bilgisayar görüntü içeriğini, renkleri, şekilleri, ışıkları ve diğer efektleri de hesaplamak zorundadır. Bütün bunlar görüntü işlemcilerinin çok hızlı gelişmesine sebep oluyor çünkü CPU`nun alabileceği her türlü yardıma ihtiyacı var.
Transform (Dönüşüm) İşlemleri
Durağan görüntüler dönüşüm denen matematiksel bir işlem sonucunda hareket kazanırlar. Bakış açımızı her değiştirdiğmizde bir dönüşüm olur. Bir arabanın bize yaklaştıkça daha büyük görünmesi gibi, büyüklüğün her değişiminde bir dönüşüm olur. Bir 3B oyunun her karesinde kullanılan dönüşüm işlemine matematiksel olarak şu şekildedir:
Dönüşümde ilk etapta sanal dünyamızı tanımlayan önemli değişkenler kullanılır:
- X = 758 – baktığımız sana dünyanın yüksekliği
- Y = 1024 – bu sanal dünyanın genişliği
- Z = 2 – bu da sanal dünyamızın derinliği
- Sx – sanal dünyaya baktığımız pencerenin yüksekliği
- Sy – pencerenin genişliği
- Sz = hangi nesnelerin diğerleinin önünde göründüğünü belirten derinlik dğeişkeni
- D = .75 – gözümüzle sanal dünyamıza açılan pencere arasındaki uzaklık
Öncelikle sanal 3B dünyamıza açılan pencerelerimizin genişliği hesaplanır:

Daha sonra perspektif dönüşümü yapılır, bu aşamada yeni değişkenler de işin içine girer:

Sonunda (X, Y, Z, 1.0) noktası aşağıdaki işlemcler sonucunda (X', Y', Z', W') noktasına dönüşür:

Görüntü ekrana yansıtılmadan önce son bir dönüşüm daha yapılmalıdır, bu kadarı bile bu işlemin karmaşıklığı hakkında size fikir vermiştir. Üstelik bütün bu işlemler tek bir vektör, yani basit bir çizgi için. Aynı işlemlerin görüntüyü olşturan bütün nesnelere saniyede 60 kere uygulandığını düşünün…
Ekran Kartları Bu İşlemlere Ne kadar Yardım Edebiliyor?
Önceleri ekran kartları sadece işlemciden gelen sinyalleri monitörün anlayabileceği şekle çeviriyorlardı ve bundan başka bir görevleri yoktu. Görüntü kalitesi yükseldikçe ve işlemcinin sırtına binen diğer yükler de arttıkça bu yöntem zamanla geçerliliğini yitirdi.
Gördüğümüz gibi öncelikle üçgenlerden ve poligonlardan tel örgü denilen iskelet oluşturuluyor ve bu yapı 2 boyutlu bir ekranda gösterilmek için dönüşüme uğruyor. Dönüşen nesneler kaplanıp aydınlatılıyor ve sonunda da monitöre aktarılıyor. GeForce öncesi TNT 2 ve Vodoo 3 gibi ekran kartları dönüşüm işleminden sonra devreye girip kalan işlemleri CPU'nun üzerinden alıyorlardı ve CPU`yu bir miktar rahatlatıyorlardı.
GeForce ile hayatımıza GPU kavramı girdi. T&L (Transform & Lighting) destekli bu kartlar dönüşüm ve ışıklandırma işlemlerini de CPU`nun üzerinden alarak sistemi önemli ölçüde rahatlattılar. Bu iki işlemde aynı hesaplamalar üst üste defalarca yapıldığından bunlar donanımsal hızlandırma için çok uygundu. Her iki işlemde de kayar nokta hesapları yapıldığından bunlar CPU`nun üzerinde çok ağır bir yük oluşturuyorlardı. Bu sayede CPU da başka işlere yoğunlaşabilecekti (yapay zeka gibi).
AGP
VLB, ISA, PCI erken sonunda ekran kartlarının da işlemciyle direk haberleşmek için kullanabilecekleri yüksek bant genişliğine sahip slotları oldu. PCI 2.1 spesifikasynlarıyla belirlenen AGP, PCI gibi 33 değil daha yüksek bant genişliği için 66 MHz`te çalışır.
AGP de tıkpkı PCI gibi 32 bit genişliğindedir ama 66 MHz`te çalıştığı için en en düşük hız modunda bile 254.3 MB/s bant genişliğine sahiptir. Bunun dışında kendine özel bir sinyalleşmeye 2X, 4X ve 8X hızlarında bu bant genişliği 2`ye, 4`e ve 8`e katlanır. Bu slotun başka bir avantaji da PCI veriyolundaki gibi bant genişliğinin paylaşılmaması, AGP`nin bütün bantgenişliği ekran kartına aittir.
Bu değerler kulağa hoş gelebilir ama uygulamalarda CPU, ekran kartı dışında pekçok parçaya daha ulaşmak zorundadır. AGP bantgenişliği yüksek olsa bile pratikte değişik AGP modları arasında sistemdeki diğer darboğazlar yüzünden beklenilen performans farkı olmaz çoğu zaman.
AGP, pipeliningi(İş bölümü) de desteklediği için sistem kaynaklarını daha verimli kullanabilir, pipeliningin ne olduğunu merak edenler İşlemcilerle ilgili yazımıza göz atabilirler. AGP'nin bir diğeravantajı da ana belleği görüntü belleğiyle paylaşabilmesidir. Bu sayede çok yüksek miktarda görüntü belleğine ihtiyaç duyulmadan gerektiğinde ana bellek görüntü belleği olarak kullanılabilir.
API Kavramı
Ekran kartları büyük bir hızla gelişiyor ve hemen her kartın farklı özellikleri var. Programcıların da her kart için ayrı kod yazmaları mümkün olmadığına göre bütün kartların ve yazılımın anlaşabileceği ortak bir platforma ihtiyaç var.
İşte bu boşluğu API (Application Programming Interface, Uygulama Programlama Arayüzü) dolduruyor. API, uygulamalarla onları çalıştıran donanımın anlaşmasını sağlıyor. Programlar kodlarını direk donanıma aktarmadan standart biçimde API`ye aktarıyorlar. Ekran kartının sürücü yazılımı da API`den aldığı bu standart kodları kartın kullanabilceği şekle çevirip karta ulaştırıyor. Oyunlarda en sık kullanılan iki API OpenGL ve Direct3D`dir.
OpenGL
1992`de Unix tabanlı X terminaller için genel bir CAD ve 3B API`si olarak Silicon Graphics`in IrisGL kütüphanesinden türettiği OpenGL önceleri sadece iş uygulamalarıyla kıstılanmıştı (mekanik tasarım ve bilimsel analiz gibi). 1996`da Windows versiyonunun geliştirlimesinden sonra oyun yapımcıları tarafından çok tutuldu ve halen yaygın olarak kullanılıyor.
OpenGL gelişmiş pekçok tekniği destekler, texture mapping (yüzeyleri bir grafik dosyasıyla kaplamaya yarar), antialiasing, saydamlık, sis, ışıklandırma, smooth shading (bir yüzeyden yansıyan ışık yüzey boyunca farklı etkilerde bulunsa bile shading yapılabilmesini sağlar), motion blur (hareket eden görüntü arkasında iz bırakır) ve modelling transformation (nesnelerin sanal uzaydaki büyüklüklerini, yer ve perspektiflerini değiştirmeye yarar) gibi.
Özellikleri bakımından Direct3D`ye benzese de 3B bir sahnenin basit elemanları ve bunlara uygulanacak efekler üzerinde çok etkili bir kontrol sağlar.
OpenGL, donanım tarafından iki seviyede desteklenebilir. ICD (installable client drivers) ışıklandırma, dönüşüm ve rasterizationı (bakış açımıdaki pikselleri tanımayı sağlayan bir algoritma) desteklerken MCD (mini client drivers) sadece rasterization desteği vardır. MCD sürücüleri yazmak daha kolaydır ama performans konusunda ICD çok daha üstündür.
Direct 3D
Direct3D`nin donanımdan bağımsız yazılım geliştirilmesine izin veren kısmı HAL`dır (Hardware Abstraction Layer). HAL, genel olarak desteklenen özellikler için bir arayüz oluşturur ve sürücülerin kendisi üzerinden donanıma erişmesinze izin verir.

Direct3D, OpenGL`e denk sayılabilecek bir düşük seviye moduna sahip olmasına rağmen çoğu zaman OpenGL kadar esnek olmamakla eleştirilir.
Direct3D işhattında ekran kartı devreye girmeden önce geometri hesaplamalarını işlemci yapar. DirectX 6.0`da birlikte rendering işlemleri iyileştirildi multitexturing (bu özelliğe sahip kartlar tek geçişte birden çok dokuyu işleyeiblirler) desteği eklendi. Ayrıca görüntü kalitesini arttıran anisotropic filtering (nesneler uzaklaştıkça düşen görüntü kalitesini iyileştirir) ve bump mapping (düz yüzeyler üzerinde gerçek kaplama ve ışık efekti yapılmasını sağlar).
DirectX 7.0 bize donanımsal T&L hızlandırması desteğini getirdi,8.0 versiyonuyla ise hayatımıza hem piksel hem de geometri seviyesinde programlanabilir shaderlar girdi. Bu programlanabilir shaderlar sayesinde görüntüler gerçeğe daha da yaklaştı. DirectX 9.0 ile bu shaderlar daha da geliştirildi.
Bir Yazı Daha Bitti….
Ekran kartları hakkında size biraz fikir vermeye çalıştık, umarım kafanızdaki bazı sorulara bu yazıyla cevap bulabilmişsinizdir. İlerideki yazılarımız için konu isteklerinizi forumlarımıza yazabilir ve yazı hakkındaki sorularınızı bana iletebilirsiniz.
Kaynaklar:
- http://computer.howstuffworks.com/agp.htm/printable
- http://www.hardwarecentral.com/hardwarecentral/tutorials/62/1/
- http://computer.howstuffworks.com/graphics-card.htm
- http://www.pctechguide.com/05graphics.htm
- http://www.themeter.com/articles/3DBasics.shtml
- http://www.extremetech.com/print_article/0,3998,a=2674,00.asp