Oyun Mekanizması 2

Bu yazıda 2003 yılında yazmış olduğum yazıdan alıntı bir yazıdır.

Herkese Selam ! Bir önceki dökümanda direk olarak oyun programlamasının içerisine dalarak oyun mekanizmasını anlatmıştık. Bu dökümanda da oyun programlamayı yakından ilgilendiren kavramlardan bahsederek konumuza devam edeceğiz.

Aşağıdaki anlatacağım bölümleri mantıksal olarak listeledim.

  • Donanım
  • İşletim Sistemi
  • Programlama Dilleri
  • Apiler
  • Yardımcı Yazılım Paketleri

Donanım

Oyun oynayan herkes herhalde oyunlarda daha iyi grafikler, daha iyi müzikler ve daha iyi bir yapay zeka istediği bir gerçek. Tüm bunların gerçekleşebilmesi için iki koşuldan biri gerçekleşmeli ya yazılım optimizasyon edilmeli, yeni algoritmalar bulunmalı yada daha hızlı, göreve özel donanımlar çıkarılarak hesaplama ve işlem hızı arttırılmalıdır.

Günümüzde yeni algoritmalar ve kod optimizasyonu donanımın geliştiği hızdan çok yavaş ilerlemektedir. Artık yazılımda yeni algoritmalar yerine tekrar kullanabilirlik, kod açıklığı, kod güvenliği(encapsulation) gibi konular üzerinde durulmakta. Donanımda bu yeni istekler için elinden geldiği kadar işlemci hızını, bellek kapasitesini arttırmaya çalışmaktadır.

Bu kısımda bir çok donanımdan bahsedilebilir aslında;

  • ekran kartları,
  • işlemci,
  • anakart,
  • seskartları,
  • monitörler, hoperlörler, joistik, giriş cihazları vb… .

Ama ben sadece birisi üzerinde duracağım. Sonuçta bu bir donanım dökümanı değil. Üzerinde duracağım donanım ekran kartları olacak.

Ekran Kartları

Oyun programcıları için en önemli ve en çok donanım savaşının yaşandığı ekran kartı piyasasına bakarsak ilk önce NVDIA, sonra da ATI gelmekte. NVIDIA en son GeForce4’ü çıkarırken, ATI buna Radeon 9700 Pro ile karşılık verecekmiş gibi görünüyor.

Radeon 9700 Ekran kartına göz gezdirdiğimizde VPU(Visual Processing Unit) işlemcisi aşağıdaki şekildeki gibidir.

Radeon 9700 yongası hala 15µ teknolojisiyle üretiliyor ve 110 milyonu aşkın transistörü ile oldukça büyük bir alana sahip.

AGP 8X Arayüzü: İşlemciden, grafik işlemcisine 2GB/s bir bant genişliğinin sağlaması. Bu sayede işlemciden aktarılacak olan vertex transferindeki darboğaz bir müddet daha önleyebilecek.

Bellek Denetleyicisi: İşlemci üzerinde nekadar büyüklükte bellek desteklediği ve bu bellek alanlarının kontolünün nasıl gerçekleştiği ile ilgilenen bu kısımda Radeon 9700, 256(64*4) bit veri yolu, 256 MB 310 Mhz DDR bellekler kullanılacak.

Vertex Shader Üniteleri: Bu konuyu şu anda kısaca inceleyelim ileride 3D Yazılım içerisinde ayrıntılı olarak değineceğiz.

Vertex Shader’lar niye vardır ?

Vertex Shading işlemi aşağıdaki şekilde de görüldüğü gibi sabit bir fonksiyon sırasına sahip olan rendering pipelene sırasında T&L(Transform ve Lighting) işlemi sırasında fonksiyon sırasını kendi üzerine alarak pipelene üzerinde by-pass uygulamaktadır.

Bu sayede T&L sağlayamadığı popüler vertex hesaplamalarına bir alternatif sağlanmış olur. Ayrıca bazı efektlerin T&L sıkı sıkıya bağlı olduğu bir durumda, bu kısmı kendinizin programlamanızı sağlayarak(assembly) çok daha iyi efektleri ortaya çıkarma imkanı sunar.

Mesela aşağıdaki işlemleri Vertex Shader operasyonları ile yerine getirebilirsiniz.

  • Procedural Geometry (cloth simulation, soap bubble [Isidoro/Gosslin])
  • Advanced Vertex Blending for Skinning and Vertex Morphing (tweening) [Gosselin]
  • Texture Generation [Riddle/Zecha]
  • Advanced Keyframe Interpolation (complex facial expression and speech)
  • Particle System Rendering
  • Real-Time Modifications of the Perspective View (lens effects, underwater effect)
  • Advanced Lighting Models (often in cooperation with the pixel shader) [Bendel]
  • First Steps to Displacement Mapping [Calver]

Bu çerçeve içerisinde ekran kartının bu kısmıda vertex shader’ları çalıştıracak birimleri içerir.

Pixel Shader

Pixel Shader Ünitesi: Pixel Shader Üniteleri niye vardır ? Yine biraz önceki şekle bakarsanız. MultiTexturing safhasında pipeline karışarak by-pass yaptığını görebilirsiniz. En önemli başarısı 64 bit, 128 bit kayar nokta renk hassaslığı ve aşağıdaki bir takım efektlerin ve gerçekçi görüntülerin oluşmasına olanak sağlayamasıdır.

  • Single pass, per-pixel lighting (see next part)
  • True phong shading [Beaudoin/Guardado]
  • Anisotropic lighting [Isidoro/Brennan]
  • Non-Photorealistic-Rendering: cartoon shading, hatching, gooch lighting, image space techniques [Card/Mitchell]
  • Per-pixel fresnel term [Brennan]
  • Volumetric effects [Kraus][Hart]
  • Advanced bump mapping (self-shadowing bump maps (also known as Horizon Mapping)
  • Procedural textures [Zecha] and texture perturbation [Isidoro/Riguer]
  • Bidirectional reflectance distribution functions [Moravánsky]

Hyper-Z: Radeon görünmeyen yüzeylerin renderlenmesini önlemek için kullandığı tekniği Hyper-Z olarak adlandırıyor.

Smoothvision 2.0 — Anisotropic Filtering: Anisotropic Filtreleme, kişiye geniş bir açısı olan yüzeylerdeki (mesela bir koridor boyunca uzanan duvarlar) kaplamaların kalitesini oldukça yükselten özel bir tekniktir.

Gerek bilinear gerekse de trilinear kaplama filtrelemesinin burada iyi bir iş çıkaramamasının sebebi, varolan pixelin yukarıda anlatılan filtreleme tekniklerinde pixel rengini tanımlamak için kullanılan dört ya da sekiz teksel örneğinden daha büyük bir kısmını kaplamasıdır.

Anisotropic filtreleme, pixelin rengini tanımlamak için, yüzeyin eğimi boyunca 16 bilinear veya trilinear örneği almaktadır.

ATi Video Shader: ATi, ‘Videoshader’ın düşük bant genişliğinde akan bir videodaki karelenmeleri gerçek zamanlı olarak nasıl önlediğini, ya da ‘blurring’, ‘embossing’ ve ‘outlining’ gibi özel efektlerin bir video sinyaline nasıl uygulanabileceğini gösterdi.