Root > Documents > Web Güvenlik Açıkları > How Does Screen Cards Work
Cyber-Warrior.Org \ Doküman \ Web Güvenlik Açıkları > How Does Screen Cards Work
Madde
  Yazar : Anon
  Date : 23.11.2004 16:16:30
 
# How Does Screen Cards Work
 
Hemen hepimizin bilgisayar almaya kalktigimizda ilk seçtgimiz parçalardan biri de ekran kartidir ama sadece islemci, bellek ve sabit diske bakarak bilgisayar seçtigimiz günlerin üzerinden o kadar da uzun yillar geçmedi. Simdi yeri geldiginde bir bilgisayar parasi verebildigimiz ekran kartlarina biraz yakindan bakalim.

Standart bir ekran kartinin görünüsü.

Ekrandaki Görüntü Nasil Olusur?

Monitörünüze yeteri kadar yakindan bakarsaniz görüntünün çok küçük noktalardan olustugunu görürsünüz. Iste bu noktlara görüntünün en küçük birimi olan piksel diyoruz. Her pikselin kendine ait renk ve yogunluk bilgileri vardir. Daha genel bir tanimla piksel için ekranin bagimsiz olarak kontrol edilebilir en küçük parçasi oldugunu söyleyebiliriz. Iste bu piksellerden binlercesi bir araya gelerek ekrandaki görüntüyü olusturuyor.

Çözünürlük

Çözünürlügün görüntü kalitesini belirleyen en önemli faktör oldugunu söyleyebiliriz. Çözünürlük, ekrandaki görüntünün kaç pikselden olusacagini belirler ve yatay ve dikey piksel cinsinden belirtilir (800x600,1024x768 gibi). Çözünürlük arttikça görüntü birbirinden bagimsiz olarak kontrol edilebilen daha çok pikselden olusur ve görüntü kalitesi de yükselir.

Windows 95 ile hayatimiza giren "scaleable screen objects" teknolojisi sayesinde çözünürlük arttikça ekrandaki kullanilabilir alan da artar. Windows ekraninda çözünürlük ne olursa ekrandaki nesneleri olusturan piksel sayisi degismez. Çözünürlük arttikça pikseller de küçülecegi için nesneler daha az yer kaplar ve masaüstündeki kullanilabilir alan çözünürlükle dogru orantili olarak artar.

Çözünürlük arttikça yükselen görüntü kalitesinin de bir bedeli var tabi ki: Çözünürlük yüseldikçe kontrol edilmesi gereken piksel sayisi ve dolayisiyla da gerekli islem gücü, ayrica bu piksellerin bilgilerini tutmak için gerekli bellek miktariyla onlarin transferi için gereken bellek bant genisligi artar. Bu yüzden de performans düser. Kullanmak istediginiz çözünürlügü hem ekran kartiniz desteklemeli, hem de monitörünüz fiziksel olarak gerekli sayida pikseli ekranda olusturabilmeli.

Renk Derinligi

Piksellerin kendilerine ait renklerinden bahsetmistik, piksellerin alabilecegi renkler kirmizi, yesil ve maviden türetilir. Iste renk derinligi bu renklerin miktarini belirler. Renk derinligi ne kadar artarsa her pikselin alabilecegi renk sayisi artar, renkler gerçege daha yakin olur.

Renk derinligi bit cinsinden belirtilir, islemcilerle ilgili yazimizda bitlere kisaca deginmistik. Her bit 1 ve 0 olarak iki deger alabilir. 8 bit kullanildiginda bu bitlerden 28 = 256 kombinasyon üretilir. Ayni sekilde 8 bit renk derinliginde de her piksel için 256 renk kullanilabilir.

Insan gözünü aldatip ekrandaki görüntüyü gerçek gibi göstermek için kullanilan üç rengin de (kirmizi, yesil ve mavi) 256`sar tonu gereklidir, bu da renk basina 8 bitten 24 bit yapar. Bu moda True Colour (Gerçek Renk) adi verilir. Fakat çogu güncel ekran karti görüntü bellegini kullanma yöntemleri yüzünden pikselleri bu modda göstermek için 32 bite ihtiyaç duyarlar. Kalan 8 bit alpha kanali (piksellerin saydamlik bilgisini tutar) için kullanilir.

High Colour (16 bit) modunda ise yesil için alti ve maviyle kirmizi için de beser bit kullanilir. Yesil için 64, maviyle kirmizi için de renk basina 32 farkli yogunluk vardir bu modda. Renk kalitesinde 32 bite göre çok az fark olsa da piksel basina 4 yerine 2 byte (8 bit = 1 byte) hafiza gerekeceginden 32 bite göre performans avantaji saglar.

256 renk (8 bit) modu ilk duyusta size renk fakiri izlenimi verebilir fakat renk paleti denen bir yöntemle bu 8 bit olabilecek en verimli sekilde kullanilarak renk kalitesi biraz arttirilir. Renk paletinin mantigi söyledir: Kullanilacak 256 renk gerçek renk modundaki 3 bytelik renklerden seçilir ve bu renklerden bir renk paleti olusturulur. Her program ilgili paletteki 256 renkten istedigini seçip kullanabilir. Böylece örnegin kirmizi için iki, mavi ve yesil için de üçer bit kullanilarak elde edilen renklerden daha canli renkler elde edilebilir ve elimizdeki 8 bit en verimli sekilde kullanilmis olur.

En çok kullanilan üç renk modunu tanidik, peki ekran kartimiz üretemedigi renklere ne yapiyor? Sistemimizin 256 renge ayarli oldugunu fakat 16 bitlik bir resim dosyasi açtigimizi varsayalim. Bu durumda hazirdaki renklerin degisik kombinasyonlari kullanilarak üretilemeyen renge yakin bir renk olusturulur ve bu renk üretilmesi gereken rengin yerine gösterilir. Buna dithering denir. Tabi ki dithering yöntemiyle elde edilmis bir resmin kalitesi orjinal resme göre göre çok daha düsüktür.

Görüntü Arayüzleri

Önceleri ekrandaki piksellerin adreslenmesi için bir standart olmadigindan üreticiler de programcilar da (dolayisiyla son kullanicilar da) sorun yasiyorlardi. Bu sorunu çözmek için üreticiler VESA (Video Electronics Standarts Association) adinda video protokollerini standartlastirmayi amaçlayan bir konsorsiyum olusturdular. VGA ile beraber geriye uyumluluk da saglanarak çözünürlük sürekli artti. VGA öncesindekiler de dahil standartlara kisaca bir göz atalim:

  • MDA (Hercules): monochrome Display Adapter, 1981 yilindaki ilk IBM PC`deki ekran karti. Ekranda yerleri önceden belirlenmis olan 256 özel karakteri gösterebilyordu sadece. 80 kolona 25 satirlik bir ekranda gösterebildigi yazi karakterlerinin boyutlari da önceden belirlenmisti ve grafik görüntülemek mümkün degildi. IBM, bu kartlara ekstra slot masrafindan kurtulmak için bir de yazici baglanti noktasi eklemisti.
  • CGA: Bu arayüzde ekran kartlari RGB monitörlerle çalisip ekrani piksel piksel kontrol edebiliyorlardi. 320x240 çözünürlügündeki bir ekranda 16 renk üretilebiliyor fakat ayni anda bunlardan sadece 4 tanesi kullanilabiliyordu. 640x200`lük bir yüksek çözünürlük modu vardir ama bu modda sadece 2 renk gösterilebiliyordu. Görüntü kalitesi kötü olsa bile en azindan grafik çizilebiliyordu. Zaman zaman piksellerin gidip gelmesi ve ekranda rastgele noktalar olusmasina ragmen bu standart çok uzun bir süre kullanildi.
  • EGA: CGA`dan birkaç yil sonra sirada Enhanced Graphics Adapter vardi. CGA ile VGA arasindaki bu kartlar 1984`ten IBM`in ilk PS/2 sistemlerini ürettigi 1987`ye kadar kullanildi. EGA monitörle kullanildiginda üretilen 64 renkten ayni anda 16 tanesi kullanilabiliyordu. Yüksek çözünürlük ve monochrome modlari da vardi ,ayrica eski CGA ve monochrome monitörlerle de uyumluydu. Bu kartlardaki bir yenilik de bellek genisletme kartlariydi. 64K bellekle satilan bu kartlari bellek genisletme kartiyla 128K`ya upgrade etmek mümkündü. Ek olarak satilan IBM bellek kitiyle bir 128K daha eklemek de mümkündü. Sonralari bu kartlar standart olarak 256K bellekle üretilmeye baslandi.
  • PGA: IBM`in 1984`te piyasaya sürdügü Professional Graphics Array adini hitap ettigi pazardan aliyordu. 5000 dolara satiliyor ve entegre 8088 islemcisiyle mühendislik ugulamariyla diger alanlardaki bilimsel çalismalar için 640x480 çözünürlükte 256 renkte saniyede 60 kare hizla 3 boyutlu animasyonlari çalistirabiliyordu. Fiyati yayilmasini engelledi ve fazla kullanilamadan piyasadan kalkti.
  • MCGA: 1987`de piyasaya sürülen MultiColor Graphics Array standardindaki ekran kartlari teknolojide büyük bir siçrama yaparak VGA ve SVGA`ya kadar gelen bir gelisimi baslatti. IBM`in Model 25 ve Model 30 PS/2 PC`lerinde anakarta entegre halde geliyordu. Uygun bir IBM monitörle kullanildiginda bütün CGA modlarini da destekliyordu fakat TTL yerine analog sinyallerle çalistigindan daha önceki standartlarla uyumlu degildi. TTL (Transistor – to –Transistor Logic) mantiginda voltaj seviyesine göre transistörler açilip kapanir ve sadece 1 ve 0 degerleri olusur bunu sonucunda. Analog sinyallerdeyse bu kisitlama yoktur. Analog sinyallesmenin de sagladigi avantajla MCGA arayüzüyle 256 renk üretilebiliyordu. Bu arayüzle beraber 9 pinlik monitör baglantisindan halen kullanilmakta olan 15 pinlik baglantiya geçildi.
  • 8514/A: IBM`in MCA veriyoluyla kullanmak için ortaya attigi bu arayüz zamanla yüksek tazeleme hizlarina çikti. VGA ile ayni monitörü kullanmasina ragmen VGA`dan farkli çalisiyordu. Bilgisayar ekran kartina ne yapmasi gerektigini söylüyordu ama ama ekran karti onu nasil yapacagini kendisi ayarliyordu. Örnegin ekrana bir çember çizilecegi zaman VGA`daki gibi islemci görüntüyü piksel piksel hesaplayip ekran kartina yollamiyordu. Bunun yerine ekran kartina çember çizilecegini söylüyordu ve ekran karti da çemberi çizmek için piksel hesaplarini kendisi yapabiliyordu. Bu yüksek seviyeli komutlar standart VGA ile komutlarindan çok farkliydi. Bu standart çiktigi zamanin daha ilerisindeydi ve VGA`dan daha kaliteli görüntü sonuyordu ama fazla destek bulamadigi için yayilma imkani bulamadan piyasan kalkti. IBM üretimi durdurup ayni daha daha fazla renk gösterebilen XGA üzerine yogunlasti. XGA 1990`da piyasaya çiktiktan sinra MicroChannelplatformlari için standart oldu.
  • VGA: 2 Nisan 1987`de, MCGA ve 8514/A ile ayni günde IBM tarafindan tanitilan Video Graphics Array aradan siyrilarak masaüstü için standart olmayi basardi. IBM yeni bilgisayarlarinda bu chipleri anakarta entegre ederken eski bilgisayarlarda da kullanilabilmeleri için 8 bitlik bir arayüzle anakarta baglanabilen bir ayri bir kart halinde de gelistirdi. IBM üretimi durdurduktan sonra bile degisik firmalar üretime devam ettiler. VGA ile 262144 renklik bir paletten seçilen 256 renk ayni anda kullanilabiliyordu. 640x480`lik standart çözünürlükte ayni anda 16 renk gösterilebiliyordu. Ayrica 64 renk gri tonlama ile siyah beyaz monitörlerde renk sigmilasyonu yapabiliyordu.
  • SVGA: Super VGA ilk SVGA kartlardan güncel kartlara kadar çok fazla karti kapsayan genis bir standart. SVGA ile birlikte ekran kartlari için aygit sürücüsü kavrami ortaya çikti. Kartlarin yaninda verilen sürücülerle ilsetim sistemleri kartlarin tüm özelliklerini kullanabiliyorlardi. SVGA ile milyonlarca renk degisik çözünürlüklerde gösterilebiliyor fakat bunun sinirlari karta ve üreticiye bagli. SVGA degisik sirketler tarafindan kullanilan ortak bir kavram oldugundan baslarda eski standartlar gibi çok kati sinirlari yoktu. Bunun üzerine VESA bir SVGA standardi belirledi. VESA BIOS Extension adinda standart bir arayüz belirlendi ve bu sayede programcilar her kart için ayri kod yazma zahmetinden kurtuldular. Üreticiler bu arayüzü benimsemek istemediler ve baslarda kartlarin yaninda verilen ve her boot isleminden sonra çalistirilan bir programla kartlarini bu BIOS uzantilariyla uyumlu hale getirdiler fakat sonunda bunu kartlarin BIOS`larina entegre ettiler. SVGA ile 800x600 çözünürlüge çikildi.

SVGA’dan sonra IBM XGA ile 1024x768 çözünürlüge geçerken sonraki basamak olan 1280x1024`e de bir VESA standardi olan SXGA ile geçildi. Sonra da UXGA ile de 1600x1200 çöznürlüge geçildi. Çözünürlükteki 4:3 orani sadece SXGA ile bozuldu, bu standartta oran 5:4`tür.

En Temel Bilesenleriyle Bir Ekran Karti

Bir ekran karti temel olarak 3 bilesenden olusur: Grafik islemcisi, bellek ve RAMDAC.

  • Grafik Islemcisi: Güncel kartlar için grafik islemcisi görüntü hesaplamalarini yapmak için ekran kartinin üzerine oturtulmus bir CPU`dur dersek yanlis olmaz. Son zamanlarda grafik islemcileri yapi ve karmasiklik bakimindan CPU`lari solladilar ve islev bakimindan da görüntü üzerine yogunlasmis bir CPU niteligine kavustular. CPU`ya neredeyse hiç yük bindirmeden üç boyutlu islemcleri tek baslarina tamamlayabiliyorlar artik. Bu yüzden de güncel grafik islemcileri GPU (Graphics Processing Unit - Grafik Islemci Birimi) adiyla aniliyorlar.
  • Görüntü Bellegi: Ekran kartinin üzerinde bulunur ve görüntü hesaplamalariyla ilgili veriler burada saklanir. Sisteminizdeki ana bellek gibi çalisir, yalniz burada bu bellegin muhattabi CPU degil görüntü islemcisidir. Önceleri ekran kartlarinin ayri bellekleri yoktu fakat görüntü islemcileri hizlanip gelistikçe ekran kartlari sistemden yavas yavas bagimsizliklarini ilan etmeye basladilar. Bellek miktari kadar ekran kartinin sikistirma algoritmalariyla bu bellegi ne kadar verimli kullanabildigi de önemlidir.
  • RAMDAC: Monitörlerdeki analog sinyallerden bahsetmistik, iste RAMDAC (RAM Dijital-to-Analog Converter) görüntü bellegindeki verileri analog RGB (Red Green Blue, monitörde renklerin bu üç renkten türetildigini yazmistik) sinyallerine çevirerek monitör çikisina verir. Monitörde kullanilan üç ana renk için de birer RAMDAC ünitesi vardir ve bunlar her saniye belirli bir sayida görüntü bellegini tarayip oradaki verileri analog sinyallere dönüstürürler. RAMDAC`in bu islemi ne kadar hizli yapabildigi ekran tazeleme hizini belirler. Bu hiz Hz cinsinden belirtilir ve ekrandaki görüntünün saniyede kaç kere yenilendigini gösterir. Örnegin monitörünüz 60 Hz`te çalisiyorsa gördügünüz görüntü saniyede 60 kere yenilenir. Ekran tazeleme hizini mümkün oldugu kadar 85 Hz`in altina çekmemenizi öneririm, daha düsük tazeleme hizlari göz sagliginiz için zararli olabilir. Tabi bu gözünüzün ne kadar hassas olduguna da bagli, bazi gözler 75 ve 85 Hz arasindaki farki hissedemezken bazilari ilk bakista bunu anlayabilir. RAMDAC`in iç yapisi ve özellikleri hangi çözünürlükte ne kadar rengin gösterilebilecegini de belirler.

    LCD ekranlar yapilari geregi dijtal olduklarindan RAMDAC`ten degil de direk görüntü belleginden görüntü bilgisini alip kullanabilirler. Bunun için DVI (Digital Video Interface) adinda özel bir baglanti kullanirlar. Bu konuya ileride "Monitörler Nasil Çalisir?" yazisinda detayli olarak deginecegiz.
  • BIOS: Ekran kartlarinin da birer BIOS’lari vardir. Burada ekran kartinin çalisma parametreleri, temel sistem fontlari kayitlidir. Ayrica bu BIOS sistem açilirken ekran kartina ve onun bellegine de küçük bir test yapar.

3. Boyuta Geçiyoruz...

Bazilarimiz 3B uygulamalar için ekran kartlarina tomarla para döküyoruz. 3B bir görüntü 3 temel adimda olusturulur:

  1. Sanal bir 3B ortam yaratilir
  2. Ekranda bu ortamin hangi bölümünün gösterilecegine karar verilir.
  3. Görüntüyü mümkün oldugu kadar gerçege yakin gösterebilmek için her pikselin nasil görünecegi belirlenir.

Sanal bir 3B ortami o sadece o ortamin bir resmi belirleyemez. Gerçek dünyadan küçük parçayi alarak konuyu açalim. Elimizi ve onun altinda duran bir masayi düsünelim, bu bizim 3B ortamimiz olsun. Elimizle dokundugumuzda masanin sert oldugunu anlayabiliriz. Masaya elimizle vurdugumuz zaman da masa kirlimaz ya da elimiz masanin içinden geçemez. Bu ortamin ne kadar çok resmine bakarsak bakalim masanin sertligini ve elimize verecegi tepkiyi sadece o resimlerle anlayamayiz. Sanal 3B ortamlar da böyledir. Bu ortamlardaki nesneler sentetiktir, bütün özellikleri onlara yazilim yoluyla verilir. Programcilar sanal bir 3B dünya tasarlarken büyük bir özenle bütün bu detaylara dikkat ederler ve bu isler için özel araçlar kullanirlar.

Belirli bir zamanda olusturulan bu 3B dünyanin ancak belirli bir bölümü ekranda gösterilir. Ekrandaki görüntü dünyanin nasil tanimlandigina, sizin nereye gitmek istediginize ve nereye baktiginiza göre degisir. Hangi yöne hareket ederseniz edin etrafinizdaki sanal dünya o an bulundugunuz pozisyonu ve nereye baktiginizi degerlendirerek ekranda ne görmeniz gerektigine karar verir. Bu farkli sahneler de kendi içlerinde tutarli olmalidir,örnegin bir nesne ona baktiginiz her açidan ve uzakliktan ayni yükseklikteymis hissi vermelidir. 3. adima geçmeden önce sabit bir görüntünün nasil olusturulduguna bakip sonra da bir 3B görüntünün nasil hareket kazandigina bakacagiz.

Sekiller

3B nesneler ilk basta wireframe denen bir yapi ile olusturulurlar. Seklin iskeleti de diyebilcegimiz bu tel örgü en basit haliyle nesnenin seklini belirler. Wireframe denen bu yapi için bir yüzey tanimlanmasi sarttir.


Bu el modeli 862 poligondan olusuyor.

Ayni model 3444 poligonla gerçege çok daha yakin.

Yüzey Kaplamalari

Sanal bir 3B ortamda nesneleri elleme sansimiz olmadigindan onlarin hakkinda sadece onlara bakarak fikir edinebiliriz. Bu yüzden sanal 3B ortamlarda nesnelerin dis görünüsleri çok önemlidir. Dis görünüsü sunlar belirler:

  • Renk: Nesnenin rengi.
  • Kaplama: Tel örgünün üzerine yapilan kaplamayla nesnenin yüzeyi düz, çizgili veya girintili çikintili görünebilir.
  • Yansima: Nesneye etkiyen isiga ve etrafindaki diger nesnelere göre cismin üzerinde yansimalar olusturulur.

Bir nesneyi gerçek gibi göstermek için bu üç özellik de dengeli bir biçimde nesnenin degisik yüzeylerine uygulanmalidir. Örnegin bir 3B ortamda bir klavyeyle bir masa isigi ayni oranda yansitmaz. Bu üç parametreyi degistirerek nesnelere sert veya yumusak hissi verilebilir.


Tel örgümüz, kaplaninca gerçek bir ele benzedi.

Lighting (Isiklandirma)

Karanlik bir odaya girdigimizde isigi açariz ve isik kaynagindan her yöne dogru yayilan isik sayesinde odadaki bütün nesnelerin görüntüsü degisir. Bu isigin odaya nasil yayildigini düsünmeyiz ama 3B grafiklerle ugrasanlar bunu düsünmek zorundalar. Tel örgüleri kaplayan kaplamalar (texturelar) bir yerden aydinlatilmalidirlar. Ray tracing denilen bir yöntemle isik isinlarinin alacagi yol çizilir ve bu isinlar çarptiklari nesnelerden farkli yogunluk ve açilarla yansir. Çoklu isik kaynaklarini düsündügünüzde bu hesaplamar oldukça karisik bir hal alabilir.

Isiklandirma cisme agirlik ve katilik etkisi veririken en çok kullanilan iki efektte önemli rol oynar: Shading ve gölgeler. Shading, bir nesne üzerindeki parlayan isigin bir tarafinda diger tarafindan daha güçlü olmasidir. Ancak shading sayesinde bir top yuvarlak veya burusmus bir battaniye yumusak görünebilir. Parlakliktaki bu fark nesnelere derinlik, uzunluk ve genislik kazandirir.


Isiklandirma, nesneye sadece derinlik katmakla kalmayip onu üzerinde bulundugu yüzeye de bagiyor.

Kati nesneler üzerlerinden isik parladiginda gölgeler yaratirlar. Gözlerimiz gerçek nesneleri görmeye alisik oldugundan ekranda gölge gördügümüz zaman matematiksel olarak üretilmis sekillere degil de bir pencereden gerçek bir dünyaya bakiyormus gibi hissederiz.

Perspektif

Perspektif kulaga biraz teknik gelebilir ama günlük yasamimizda çok sik gördügümüz bir etkidir. Bir yolun kenarinda durup ufuk çizgisine dogru baktiginizda yolun iki kenari da birlesiyormus gibi görünür. Yol kenarinda agaçlar varsa da bu agaçlar birlesme noktasina yaklastikça da daha küçük görünür. Nesnelerin bir noktada birlesiyormus gibi görünmesini saglayan bu efekt perspektiftir. Degisik çesitleri vardir fakat 3B çizimlerde genelde tek noktali perspektif kullanilir.


Sekildeki eller ayri duruyor fakat çogu sahnede nesneler birbirlerinin önünde dururlar ve birbirlerini kismen kapatirlar. Bu durumda bunlarin büyüklüklerinin hesaplanmasi disinda hangisinin önde oldugu da bilinmelidir. Bunun için Z Buffering denilen teknik kullanilir. Z buffera her poligon için bir sayi atanir ve bu sayi o poligona sahip nesnenin sahnenin ön tarafina yakinligini belirler. Önegin 16 bitlik bir Z bufferekrana en yakin poligon için -32768 ve en uzak poligon için de 32767 degerlerini atar.

Gerçekte bir nesnenin arkasindaki diger nesneleri göremedigimiz için ne görüyor olmamiz gerektigini düsünmeyiz. Sanal 3B ortamlarda da bu sikça olur ve çok düz bi mantikla çözülür. Nesneler yaratildikça x ve y ekseninde ayni degere sahip olanlarinin Z bufferdaki degerleri karsilastirilir ve en düsük Z degerine sahip nesne tamamen görüntülenir. Daha yüksek Z degerindekilerinse tamami görüntülenen nesneyle kesisen bölgeleri görüntülenmez. Nesneler tamamen olusturulmadan önce Z degerleri belirlendigi için görünmeyecek bölgeler tamamen hesaplanmaz ve bu da performansi arttirir.

Derinlik (Depth of Field)

Yol ve agaçlar örnegimizi hatirlayalim ve o örnekte olusabilecek baska bir ilginç olayi düsünelim. Yakininizdaki bir agaca bakarsaniz uzaktaki agaçlarin netliklerini kaybettiklerini görürsünüz.

Filmlerde ve bilgisayar ortaminda sik kullanilan bu efekt iki amaca hizmet eder. Ilki sahnedeki derinlik hissini güçlendirmektir. Ikincisi ise dikkatinizi bir nesneye çekmektir.


Anti-aliasing

Bu teknik de gözü aldatarak görüntünün dogal görünmesini amaçlar. Dijital görüntü sistemleri asagiya ve yukariya dogru düz çizgiler çizmekte son derece basarilidirlar fakat is egrilere ve çapraz çizgileri çizmeye gelince basamak efekti olusur ve çizgilerin kenarlari yumusak degil de daha çok bir merdiven gibi gözükür. Iste bu nokada devreye anti-aliasing girer ve çizginin kenarlarindaki piksellere onlara yakin gir tonlardaki renklerle shading uygulayarak kenarlari biraz bulaniklastirir. Bu sayede basamak efekti ortadan kaybolmus gibi gözükür. Anti-aliasingde dogru pikselelleri çin dogru renkleri seçmek de baska bir karmasik islemdir ve sisteme oldukça yük bindirir.


Sadece düz çizgilerdeki pikseller kullanildiginda basamak efekti olusur.

Kenarlardaki piksellerin etrafindakiler de kullanilarak basamak efekti azaltilir.

Görüntüleri Hareketlendirme Zamani

Duragan 3B sahnelerin nasil yaratildigini gördükten sonra bunlarin nasil hareket kazandigini ögrenebiliriz. Su ana kadar anlattigimiz islemlerin hiçbiri donanimi yaratilan bu duragan görütülere hareket kazandirmaktan daha fazla zorlayamaz. Üçgenlerden ve poligonlardan olsuan tel örgülerimizi hareket ettirmek için ekrandaki her piksel saniyede belirli sayida hesaplama yapilmalidir.

Yüksek çöznürlük denince aklimiza en az 1024x768 gelir, daha düsük çözünürlükleri adam yerine koymayiz pek. Bu çözünürlükte 786.432 adet piksel kulllanir, her piksel için 32 bit renk kullanildiginda 25.165.824 bit sadece duragan görüntü için gereklidir. Görüntünün 60 FPS hizda çalismasi için her saniye 1.509.949.440 bit veri aktarilmalidir ve bu sadece görüntüyü ekrana yansitmak için yeterlidir. Bunun yaninda bilgisayar görüntü içerigini, renkleri, sekilleri, isiklari ve diger efektleri de hesaplamak zorundadir. Bütün bunlar görüntü islemcilerinin çok hizli gelismesine sebep oluyor çünkü CPU`nun alabilecegi her türlü yardima ihtiyaci var.

Transform (Dönüsüm) Islemleri

Duragan görüntüler dönüsüm denen matematiksel bir islem sonucunda hareket kazanirlar. Bakis açimizi her degistirdigmizde bir dönüsüm olur. Bir arabanin bize yaklastikça daha büyük görünmesi gibi, büyüklügün her degisiminde bir dönüsüm olur. Bir 3B oyunun her karesinde kullanilan dönüsüm islemine matematiksel olarak su sekildedir:

Dönüsümde ilk etapta sanal dünyamizi tanimlayan önemli degiskenler kullanilir:

  • X = 758 – baktigimiz sana dünyanin yüksekligi
  • Y = 1024 – bu sanal dünyanin genisligi
  • Z = 2 – bu da sanal dünyamizin derinligi
  • Sx - sanal dünyaya baktigimiz pencerenin yüksekligi
  • Sy – pencerenin genisligi
  • Sz = hangi nesnelerin digerleinin önünde göründügünü belirten derinlik dgeiskeni
  • D = .75 – gözümüzle sanal dünyamiza açilan pencere arasindaki uzaklik

Öncelikle sanal 3B dünyamiza açilan pencerelerimizin genisligi hesaplanir:

Daha sonra perspektif dönüsümü yapilir, bu asamada yeni degiskenler de isin içine girer:

Sonunda (X, Y, Z, 1.0) noktasi asagidaki islemcler sonucunda (X’, Y’, Z’, W’) noktasina dönüsür:

Görüntü ekrana yansitilmadan önce son bir dönüsüm daha yapilmalidir, bu kadari bile bu islemin karmasikligi hakkinda size fikir vermistir. Üstelik bütün bu islemler tek bir vektör, yani basit bir çizgi için. Ayni islemlerin görüntüyü olsturan bütün nesnelere saniyede 60 kere uygulandigini düsünün...

Ekran Kartlari Bu Islemlere Ne kadar Yardim Edebiliyor?

Önceleri ekran kartlari sadece islemciden gelen sinyalleri monitörün anlayabilecegi sekle çeviriyorlardi ve bundan baska bir görevleri yoktu. Görüntü kalitesi yükseldikçe ve islemcinin sirtina binen diger yükler de arttikça bu yöntem zamanla geçerliligini yitirdi.

Gördügümüz gibi öncelikle üçgenlerden ve poligonlardan tel örgü denilen iskelet olusturuluyor ve bu yapi 2 boyutlu bir ekranda gösterilmek için dönüsüme ugruyor. Dönüsen nesneler kaplanip aydinlatiliyor ve sonunda da monitöre aktariliyor. GeForce öncesi TNT 2 ve Vodoo 3 gibi ekran kartlari dönüsüm isleminden sonra devreye girip kalan islemleri CPU’nun üzerinden aliyorlardi ve CPU`yu bir miktar rahatlatiyorlardi.

GeForce ile hayatimiza GPU kavrami girdi. T&L (Transform & Lighting) destekli bu kartlar dönüsüm ve isiklandirma islemlerini de CPU`nun üzerinden alarak sistemi önemli ölçüde rahatlattilar. Bu iki islemde ayni hesaplamalar üst üste defalarca yapildigindan bunlar donanimsal hizlandirma için çok uygundu. Her iki islemde de kayar nokta hesaplari yapildigindan bunlar CPU`nun üzerinde çok agir bir yük olusturuyorlardi. Bu sayede CPU da baska islere yogunlasabilecekti (yapay zeka gibi).

AGP

VLB, ISA, PCI erken sonunda ekran kartlarinin da islemciyle direk haberlesmek için kullanabilecekleri yüksek bant genisligine sahip slotlari oldu. PCI 2.1 spesifikasynlariyla belirlenen AGP, PCI gibi 33 degil daha yüksek bant genisligi için 66 MHz`te çalisir.

AGP de tikpki PCI gibi 32 bit genisligindedir ama 66 MHz`te çalistigi için en en düsük hiz modunda bile 254.3 MB/s bant genisligine sahiptir. Bunun disinda kendine özel bir sinyallesmeye 2X, 4X ve 8X hizlarinda bu bant genisligi 2`ye, 4`e ve 8`e katlanir. Bu slotun baska bir avantaji da PCI veriyolundaki gibi bant genisliginin paylasilmamasi, AGP`nin bütün bantgenisligi ekran kartina aittir.

Bu degerler kulaga hos gelebilir ama uygulamalarda CPU, ekran karti disinda pekçok parçaya daha ulasmak zorundadir. AGP bantgenisligi yüksek olsa bile pratikte degisik AGP modlari arasinda sistemdeki diger darbogazlar yüzünden beklenilen performans farki olmaz çogu zaman.

AGP, pipeliningi(Is bölümü) de destekledigi için sistem kaynaklarini daha verimli kullanabilir, pipeliningin ne oldugunu merak edenler Islemcilerle ilgili yazimiza göz atabilirler. AGP’nin bir digeravantaji da ana bellegi görüntü bellegiyle paylasabilmesidir. Bu sayede çok yüksek miktarda görüntü bellegine ihtiyaç duyulmadan gerektiginde ana bellek görüntü bellegi olarak kullanilabilir.

API Kavrami

Ekran kartlari büyük bir hizla gelisiyor ve hemen her kartin farkli özellikleri var. Programcilarin da her kart için ayri kod yazmalari mümkün olmadigina göre bütün kartlarin ve yazilimin anlasabilecegi ortak bir platforma ihtiyaç var.

Iste bu boslugu API (Application Programming Interface, Uygulama Programlama Arayüzü) dolduruyor. API, uygulamalarla onlari çalistiran donanimin anlasmasini sagliyor. Programlar kodlarini direk donanima aktarmadan standart biçimde API`ye aktariyorlar. Ekran kartinin sürücü yazilimi da API`den aldigi bu standart kodlari kartin kullanabilcegi sekle çevirip karta ulastiriyor. Oyunlarda en sik kullanilan iki API OpenGL ve Direct3D`dir.

OpenGL

1992`de Unix tabanli X terminaller için genel bir CAD ve 3B API`si olarak Silicon Graphics`in IrisGL kütüphanesinden türettigi OpenGL önceleri sadece is uygulamalariyla kistilanmisti (mekanik tasarim ve bilimsel analiz gibi). 1996`da Windows versiyonunun gelistirlimesinden sonra oyun yapimcilari tarafindan çok tutuldu ve halen yaygin olarak kullaniliyor.

OpenGL gelismis pekçok teknigi destekler, texture mapping (yüzeyleri bir grafik dosyasiyla kaplamaya yarar), antialiasing, saydamlik, sis, isiklandirma, smooth shading (bir yüzeyden yansiyan isik yüzey boyunca farkli etkilerde bulunsa bile shading yapilabilmesini saglar), motion blur (hareket eden görüntü arkasinda iz birakir) ve modelling transformation (nesnelerin sanal uzaydaki büyüklüklerini, yer ve perspektiflerini degistirmeye yarar) gibi.

Özellikleri bakimindan Direct3D`ye benzese de 3B bir sahnenin basit elemanlari ve bunlara uygulanacak efekler üzerinde çok etkili bir kontrol saglar.

OpenGL, donanim tarafindan iki seviyede desteklenebilir. ICD (installable client drivers) isiklandirma, dönüsüm ve rasterizationi (bakis açimidaki pikselleri tanimayi saglayan bir algoritma) desteklerken MCD (mini client drivers) sadece rasterization destegi vardir. MCD sürücüleri yazmak daha kolaydir ama performans konusunda ICD çok daha üstündür.

Direct 3D

Direct3D`nin donanimdan bagimsiz yazilim gelistirilmesine izin veren kismi HAL`dir (Hardware Abstraction Layer). HAL, genel olarak desteklenen özellikler için bir arayüz olusturur ve sürücülerin kendisi üzerinden donanima erismesinze izin verir.

Direct3D, OpenGL`e denk sayilabilecek bir düsük seviye moduna sahip olmasina ragmen çogu zaman OpenGL kadar esnek olmamakla elestirilir.

Direct3D ishattinda ekran karti devreye girmeden önce geometri hesaplamalarini islemci yapar. DirectX 6.0`da birlikte rendering islemleri iyilestirildi multitexturing (bu özellige sahip kartlar tek geçiste birden çok dokuyu isleyeiblirler) destegi eklendi. Ayrica görüntü kalitesini arttiran anisotropic filtering (nesneler uzaklastikça düsen görüntü kalitesini iyilestirir) ve bump mapping (düz yüzeyler üzerinde gerçek kaplama ve isik efekti yapilmasini saglar).

DirectX 7.0 bize donanimsal T&L hizlandirmasi destegini getirdi,8.0 versiyonuyla ise hayatimiza hem piksel hem de geometri seviyesinde programlanabilir shaderlar girdi. Bu programlanabilir shaderlar sayesinde görüntüler gerçege daha da yaklasti. DirectX 9.0 ile bu shaderlar daha da gelistirildi.

bu döküman volkan sonegin yazilarindan dercedilmistir

   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©