DirectX 10'un Derinliklerine İnmek Eğlenceli bir şey yaparken zaman akıp gider. DirectX 9 ile bu olguyu bir miktar yaşamıştık. DirectX 9 program geliştirme arayüzü ile yapılan oyunları Aralık 2002'den beri oynuyoruz . Grafik başlığı altında yapılan konuşmalarda genellikle "DirectX" terimi kullanılıyor fakat DirectX aslında oyunların farklı özellikleri için çıkarılmış bir grup API'dir ve grafik bunlardan sadece birisidir. Half Life 2, F. E. A. R., Battlefield 2 ve Oblivion gibi pek çok ileri seviye oyun en son çıkarılan 9.0c sürümünü kullanır. DirectX içinde üç çekirdek alan bulunur: giriş aygıtları, ses ve video. Aşağıdaki tabloda şu anki sürümde bulunan API'lerin bir listesini görebilirsiniz. Bu yazının geri kalanında herkesin en çok merak ettiği bileşenden bahsedeceğiz: Direct3D. DirectX 10 ile bu başlık altında pek çok değişiklik yapılacak. Direct3D 10 şu andaki grafiksel sorunları çözmeye yönelik yeni özellikler ve yeni yaratımlama teknikleri için çeşitli araçlar sunuyor. Ayrıca 3B işhattını da daha basit hale getiriyor böylece daha iyi oyunların geliştiriciler tarafından üretilebilmesinin önü açılıyor. Neler Değişti? Geçtiğimiz ay DX10 üzerine Nvidia'nın yaptığı kısa bir bilgilendirme toplantısından sonra Microsoft'un DirectX 10 üzerinde Grafik Platformu Birimi yazılım mimarı David Blythe ile görüşme fırsatı yakaladım. Toplantının konusu Direct3D 10 ile yapılan büyük çaplı geliştirmelerdi. Blythe'e göre yazılım geliştiricileri ve donanım üreticileri bazı önemli sorunlarının dikkate alınmasını istiyorlar ve Direct3D 10 bu tür büyük şikayetlere çeşitli çözümler sunuyor. Direct3D 10 beş anahtar değişikliğe sahip: 1- Programcılar kendilerini daha rahat anlatabiliyorlar (Tarayıcı Modeli 4.0 ve Geometri Tarayıcıları) 2- Sıkı donanım tanımlamaları 3- Geliştirilmiş başarım 4- Birleşik yönerge seti (HLSL 10) 5- Akan G/Ç Direct3D 10 ile resimlerin nasıl yaratımlandığını göstermek için birkaç saniye harcamak istiyorum. Böylece yapılan değişikliklerin nasıl hayata geçirilebileceğini daha iyi anlayabilirsiniz. Geleneksel işhattı yapısı ATI'nin Radeon X1000 serisi ekran kartlarının gelmesiyle bir kenara atılmıştı ve daha fazla iş parçasına yönelik bir yaklaşım kullanılmaya başlanmıştı. Buna göre bir kartın "N" sayıda noktacık işhattına sahip olması artık eskide kalan bir anlayış. Eğer eski donanımlardan bahsetmiyorsanız bunu kafanızdan silin. Programcıların Kendini Daha Rahat Anlatması İçerik yaratmanın önünde bulunan engellerden birisi de sanatçının hayal gücünde geliştirdiği şeyi ekrana aktarmasıdır. İnsanlar kafalarının içinde, gözleriyle dünyada gördükleri bütün ayrıntıları içeren, gerçekçi resimler çizmeyi bir şekilde başarabilirler. Beynimizin işleyiş şekli bilgisayara göre çok daha hızlı olduğundan bilgisayar çizimleri söz konusu olduğunda işler çok farklıdır. Silikon yongalar fabrikadan bir kere çıktıktan sonra tekrar değiştirilemezler . Ancak programlanabilir tarayıcılar bir yaratımlama motorunun parçalarından sadece birisidir. Sonuçta sınırlı bir hesaplama kapasitesi olduğundan neyin yapılıp yapılamayacağı buna göre belirlenir. Programcıların gereksinimleri arttıkça yeni standart donanımlar ve yeni yazılım kodları bunları karşılamak için hayatımıza girdi. Bu gereksinim yine kendini gösterdi ve Direct3D tarayıcıların yapabileceği şeyleri bir kez daha arttırıyor. Aşağıdaki tablo tarayıcı modellerinin sınırlarını gösteriyor. Çok fazla derine inmeden bu tablodan çıkarılacak sonuç Tarayıcı Modeli 4.0'ın (SM 4.0) bir önceki sürüme göre çok daha gelişmiş olduğudur. Aynı zamanda sadece noktacık tarayıcı veya sadece tepe tarayıcı mantığına dayanan tasarımı da çöpe atıyor. Blythe'nin sunumunda da belirtildiği üzere en önemli gelişmelerden birisi sabit işleve sahip olan tarayıcı mantığının tarihe karışması. Daha Sıkı Donanım Tanımlamaları ATI ve Nvidia donanımlarını tasarlama konusunda bazı farklılıklara sahipler. Yazılım geliştiricilerinden gelen şikayetlerden birisi de donanım tasarımlarının yeteneklerinin bir birinden çok farklı hale gelmesi ve bunun sonucunda farklı donanımlarda farklı sonuçlar verebilmek için çoklu kodlama yapısının kullanılmak zorunda kalınması. Özellikle de oyunlar eski tip donanım algıladığında bu sisteme uygun çalışabilmek için farklı bir kodlama kanalı kullanmak zorunda kalıyor. Uçbirim yazılım geliştiricileri donanım yapısı sabit olduğundan böyle bir zorlukla karşılaşmıyorlar fakat PC oyunu geliştiricilerinin bu lüksü yok. Eğer oyunlarına eklemek istedikleri yeni fikirler veya yöntemler olursa oyuncuların bunları fark edip bu geliştirme ayarlarını açmayı akıl etmelerini umut etmek zorunda kalıyorlar. Ancak pek çok oyun meraklısının oyunları çok daha iyi gösterecek özellikleri açmadan oynadıklarını biliyoruz. İşleri daha da kötü hale getirmek için DirectX 9 standartlarının bir kısmını yoruma fazla açık bırakıyor ve bu standartların bir kısmı daha ATI ve Nvidia donanımlarını destekler hale getirmeden değişmiş olabiliyor. Bu durum geliştiriciler kanadında karmaşaya yol açıyor çünkü rakip donanım firmaları arasında farklı hassaslık standartları olabiliyor. Donanım üreticileri, yazılım geliştiricilerini kendi ürünlerinin güçlü ve yetenekli kısımları konusunda eğitmek zorunda kalıyorlar ve bu çelişen standartlar pazara kaliteli ürünlerin gelmesini yavaşlatıyor. Direct3D 10 gerekli özellik setleri, kaynak sınırları, aritmetik hassaslık ve çeşitli depolama biçimleri için olan standartları belirliyor. Direct3D 10 donanımlarının içinde bulunan her şey 32-bit olmasına rağmen bazı özel depolama türlerine de izin veriyor. Aşağıdaki listede bazı veri depolama biçimlerini görebilirsiniz. Listede tam tekli-hassaslık biçimlerini ve unorm veya snorm 16 gibi yarım-hassaslık biçimlerini görüyorsunuz. float 16 High Dynamic Range gibi uygulama alanlarına sahip fakat çok fazla depolama alanı ve veriyolu gerektirmesi gibi bazı eskilere sahip. Ayrıca 11-11-10 gibi bazı başka biçimler de geliştirilmiş. Bu biçimde iki float11 ve bir float10 birimleri (11 kırmızı, 11 yeşil ve 10 mavi) toplamda 32 bit uzunluğuna sahip oluyor ve paylaşımlı-örnek biçimiyle birlikte kullanılabiliyor. IEEE 754 standartlarında belirlenmiş kayar nokta hassaslığı ve biçimleriyle ilgili daha ayrıntılı bilgi için tıklayın. Sabit İşlevler Veya Birleşik Mimari? DirectX 9 altında farklı yorumlamaya açık olan alanlardan birisi de ATI ve Nvidia'nın değişik yaklaşımlar sergileyebilmeleridir. Nvidia mimarilerini tasarlarken sabit işlevsel tasarıma sadık kalırken ATI, sınırlı kaynaklarla daha fazla işlevsellik sağlayabilmek için geleneksel işhattını parçalara bölmeyi tercih etmişti. X tepe tarayıcılarına , Y noktacık tarayıcılarına ve Y ızgara birimlerine sahip olmanın yanlış bir yönü yok fakat ATI şu anki DirectX 9.0c ekran kartları ile dinamik çekirdek yapısının daha fazla başarım sunabileceğini gösterdi. Pek çok geliştirici ürünlerini daha çok bölünmüş noktacık tarayıcı bağımlısı haline getirmek pahasına da olsa bu yönteme doğru kaydırmaya başladı; ATI de bu durumu iyi değerlendirerek ürünlerine daha fazla noktacık tarayıcı ekleyerek son zamanlarda yükselişe geçmişti. Direct3D 10, donanımların isteğe bağlı olarak sabit işlevlere sahip olan tarayıcı birimlerini tercih etme kapısını açık bırakıyor fakat bunun ne artısı olacak? Her ne kadar Nvidia G80 işlemcilerinde tam olarak nasıl bir yapı kullandığını açıklamamış olsa da ATI birleşik tarayıcı mantığını kullanacağını belirtmişti. Tarayıcılar duruma bağlı olarak anında farklı görevlerde kullanılabildiğinden birleşik tarayıcı yapısı akla uygun geliyor. Yani bir karede duruma göre tepe tarayıcı veya noktacık tarayıcı gereksinimi belirleniyor ve çekirdek ona göre hangisine daha fazla kaynak ayıracağını kendisi seçiyor. Mr.

Aşağıda "geleneksel" işleme biçiminin bir kaç örneğini görebilirsiniz . Örnek 1: Yüksek tepe ve düşük noktacık işleme gereksinimi. Bu örnekte Noktacık Tarayıcılar kapasitelerinin altında çalışıyorlar; daha fazla iş yapabilirler fakat Tepe Tarayıcılar tarafından engelleniyorlar. Örnek 2: Düşük tepe ve yüksek noktacık işleme gereksinimi. Bu örnekte Tepe Tarayıcıların kapasitesi boşa gidiyor. Örnek 3: Yüksek tepe ve düşük noktacık işleme gereksinimi. Burada Noktacık Tarayıcılar Örnek 1'de olduğu kadar iş yaratabiliyorlar fakat fazladan 12 adet tepe tarayıcı kullanılabiliyor. Bu sayede grafik çekirdeği en yüksek kapasiteyle çalıştırılmış oluyor. Örnek 4: Düşük tepe ve yüksek noktacık işleme gereksinimi. Burada da Tepe Tarayıcı yükü Örnek 2 ile aynı fakat noktacık tarama işi için fazladan 6 işlemci kullanılabiliyor. Bu örneklerden şu sonucu çıkarabiliriz, tarayıcılar aslında programlanabilir kayar nokta işlemcileridir. Direct3D 10'un getirdiği yeni standartlarla sabit işlevlere sahip tarayıcı mimarisini kullanmak akla pek uygun değil. Akıllı bir mantık ve güçlü bir çekirdekle birleşik mimari kullanılarak büyük başarım artışları görebiliriz. Hem de sabit işlevli mimarilerle aynı sayıda kayar nokta işlemcisi kullanarak. Ek Geliştirmeler Geliştiricilerden ve donanım üreticilerinden gelen şikayetler arasında önceki Direct3D sürümlerinin işlemciye çok yüklenmesi de var. Buradaki sorun grafik sisteminin bir alt sistem olmasında yatıyor; işlemci ve ekran kartı bazı durumlarda aynı bileşenleri kullanmak zorunda kalıyorlar . Aynı şekilde ekran kartı koordinasyon ve yönergeler için işlemciyle çalışmak zorunda. Ek olarak karmaşık bir durumda veya dinamik geometri kullanıldığında işlemcinin de bazı etkileri hesaplaması gerekiyor, bu da başarım üzerinde önemli bir etki yaratıyor. Daha iyi bir doğrulama ve hata yönetimi sistemi, kaynak eşleştirme ve erişim, hatta geliştirilmiş tarayıcı dili gibi yeniliklerin dışında asıl sorun başka bir yerde karşımıza çıkıyor. Blythe'in söylediğine göre API'lerin çalışma şekli geçtiğimiz 10 yıl içinde çok az değişti. Sürücü ve çalışma yönteminde işleme gücünü düşüren şu üç madde tespit edilmiş: 1- Uygulama gereksinimleri konusunda yanlış haberleşme 2- Farklı işleme tarzları 3- API ve donanım arasında oluşan uyumsuzluklar Birinci ve ikinci maddelerin düzeltilmesi kolay: donanım ve yazılım arasında sıkılaştırılan standartlar birinciyi çözüyor, ikincisi ise yazılım geliştiricilerin elinde olan bir şey. Microsoft'un DX10 içeriği denemek için kullandığı resimlerden örnekler Sonuncusu ise en zor olanı, Blythe şöyle diyor: "İncelemelerimiz sonucunda devam etmekte olan sorun konusunda pek bir ilerleme kaydedemediğimizi fark ettik ve küçük parçaları daha büyük, parçalanamaz nesnelere dönüştürdük. Böylece hangi parçaların bağımsız olup olmayacağını net bir şekilde belirleyebildiğimiz bir model oluşturabildik ve işhattının değiştirilmesini gerektiren API bağlantılarının sayısını ciddi şekilde azalttık." Yukarıdaki tabloda Blythe'nin incelemesine göre Direct3D 9 ve 10 arasında kullanılan komut döngüsü sayısı farklarını görüyorsunuz. İncelemeleri sırasında kullandıkları Pentium 4 sistem üzerinde çizim işlemi için kullanılan çağrılar neredeyse on kat azalmış. Sürücüde yapılan geliştirmeler ile düşürülen haberleşme kayıpları işlemci gücünün daha önemli işlere ayrılabilmesi anlamına geliyor. Bu sayede daha iyi yapay zeka ve fizik etkisi hesaplamaları veya bir sahneye daha fazla nesne eklenmesi gibi gelişmeler mümkün oluyor. Bir başka büyük geliştirme de Microsoft'un deyimiyle "Instancing 2.0" olarak karşımıza çıkıyor. Örnekleme bir sahnede bir birine çok benzeyen nesneler üzerinde çizim, doku kaplama, aydınlatma gibi etkilerin yapılması gerektiğinde kullanılıyor. Direct3D 9 altında bir ordudaki bütün askerler kendi çizim çağrısını yapardı bu da işlemciye önemli oranda yük getiriyordu. Direct3D 10'da ise bir ordunun askerleri tek bir çizim çağrısı ile yaratılıyor. Bu özellik sayesinde yeni nesil oyunlarda ekrana binlerce birim çizilebilecek ve oyunların gerçekçiliği büyük ölçüde artırılacak. Supreme Commander oyunundan bir ekran görüntüsü, yüzlerce yüksek çözünürlüklü birimi görebilirsiniz. Son Yorumlar Crytek'in Crysis oyunundan bir resim Direct3D 10'a baktığımızda 3B oyunların geleceğini şekillendirecek olan pek çok yeni özellik görüyoruz. Crysis oyununu DirectX 10 destekleyen bir donanım üzerinde görme şansım oldu ve gerçekten çok etkilendiğimi söylemeliyim. Bilgisayar oyunlarının geleceği "DirectX 10" diye bağırıyor ve eğer sisteminizde DX10 destekleyen bir kart olmazsa çok şey kaçıracaksınız. HLSL geniş bir kesim tarafından kabul edildiğinden programcılar açısından DirectX 9'dan DX10'a geçiş ve DX9 içeriğin DX10'a uyarlanması nispeten kolay olacak. Bu iş için programlar ve araçlar çoktan hazır artık biraz beklemek dışında bir şey gerekmiyor. Son birkaç aydır piyasaya büyük oyunların sürülmemesinin altında yatan nedenlerden birisi de bu: herkes DirectX 10'u bekliyor. Ancak donanımlar hazır olduğunda siz beklememelisiniz. Bu yazıdan okuduğunuz ve diğer kaynaklar tarafından da doğrulandığı üzere DX10 donanımlar şu anda pazarda olan oyunlarda da ciddi oranda başarım artışı getiriyor. Gelecek trenini kaçırmayın... en azından DirectX 11 çıkarılana kadar... Yayın Tarihi: 15 Kasım 2006 Hazırlayan: Darren E. Polkowski Çeviren: Hamdi Kellecioğlu Bölüm: Ekran Kartı Ek Bilgi / Düzenleme: Mr.666 1337