Daha önce gördüğümüz gibi, grafik işlemcisi NV2A çipinde bulunur ve MCPX gibi, Nvidia tarafından üretilmiştir.

Xbox'ın anakartındaki Nvidia NV2A paketi.
Bu şirket uzun süredir grafik işinde bulunmaktadır; GeForce serileri bilgisayar pazarında en popüler GPU markalarından biridir ve doğrudan ArtX/ATI'nin Radeon serisi ile rekabet eder. Genel olarak, bu, Microsoft'un konsol pazarındaki ilk denemesine rağmen Xbox'taki grafik kalitesi üzerinde iyi bir etki sağlar.
Her şey mantıklı görünüyor, ancak o zaman gerçekten bu kararı vermek kesin bir karar mıydı? Microsoft'un o dönemde Nvidia'yı diğer popüler markalardan (3dfx, PowerVR, S3, vb.) neden seçtiğini öğrenmek için şu anki tarihe güvenmek kolaydır, ancak o zamanlar rekabeti daha karmaşık hale getiren birçok seçenek vardı.

Halo (2001) Xbox'ın 720p modunda çalışırken.
Örneğin, 3dfx'in popüler 'Voodoo 2' serisi, 90'ların sonuna kadar PC pazarının ~%70'ini elinde bulunduruyordu , Nvidia ise yeni 'GeForce 256'yi (GeForce serisinin ilk modeli) benimsetmekte zorlanıyordu. Bu durumda, Microsoft'un seçimi şimdi daha çok bir risk gibi görünüyor, ancak şu anda bildiğimiz gibi, bu risk sonunda karşılığını verdi.
1999'da Nvidia, şu an oldukları #1 oyuncu değillerdi. Sıkıntıdaydılar. Yeni GeForce mimarisi hala gençti ve birçok kişi onu beğenmiyordu. Şimdi her şey bitmiş gibi görünüyor. Ancak bunu bilmek için o tarihle ilgili araştırma yapmanız ve neden onu kullanmak için savaşmam gerektiğini bilmeniz gerekirdi. Haklıydım ama haklı olduğumu bilmiyordum; çok endişeliydim.
- Seamus Blackley (Orijinal Xbox'ın ortak yazarı)
Sonraki bölümde, bu çipin iç işleyişini inceleyeceğiz. Şimdi, korkarım ki, CPU bölümü gibi birçok terim ve pazarlama terimi içinde karıştık, ama korkmayın! Temellerle başlayacağım.
Mimari ve Tasarım
NV2A üzerinde bulunan GPU çekirdeği, popüler 'GeForce3' serisine dayanmaktadır , aynı zamanda Nvidia'nın teknik belgelerinde NV20 olarak adlandırılır.
Lütfen unutmayın ki, Xbox'ın GPU'sunun pipeline NV20 mimarisine dayanmasına rağmen, NV2A'nın geri kalan NV20 serisi ile uyumlu olmayan bazı modifikasyonlara sahiptir (en önemlisi, bir UMA ortamında çalışacak şekilde adapte edilmiştir).
Analiz edilen üniteler, bu makalenin kapsamını aşan birçok özelliğe sahiptir, bu nedenle bu bölüm ilginizi çekiyorsa kaynakları/bağlantıları kontrol etmenizi öneririm. Ayrıca, grafiklerle ilgili terimler sürekli evrildiği için (bu da bazı karışıklıklara yol açabilir), Xbox'ın yayınlandığı yıllarda Microsoft/Nvidia tarafından kullanılan terimlere güvenmeye karar verdim, bu nedenle diğer kaynaklardan daha fazla grafiklerle ilgili makaleler okumayı planlıyorsanız bunu hatırlayın.
Bunu söylendikten sonra, Xbox'da karelerin nasıl çizildiğine bir göz atalım. Bazı açıklamalar GameCube'un Flipper ile çok benzer olduğu için, bu makaleyi takip etmekte zorlanıyorsanız, bu makaleyi de okumanız size yardımcı olabilir.
Komutlar
İlk ve en önemlisi, GPU'nun CPU'dan komut alabilmesinin açıklanmasıdır. Bu işlem için GPU, grafik komutlarını etkin bir şekilde alıp işleyen bir komut işlemcisine sahiptir ve buna PFIFO denir (grafik komutları Pushbuffer olarak adlandırılır), ardından paketten çıkarılan komutlar PGRAPH (grafik işlemeden sorumlu blok) ve diğer motorlara iletilir.
Flipper gibi, geometrinin komut içine gömülmesi gerekmez. PGRAPH, grafik verilerini göndermek için birçok yöntem sunar. Örneğin, CPU, vertex verilerini içeren bir bellek içinde bir tampon ayırabilir ve ardından GPU'ya onları bu konumdan alması talimatını verebilir. Bu yaklaşım, tekrarlanan geometrinin gönderilmesini önlediği için verimli olabilir.
Sonraki açıklamalar PGRAPH içinde gerçekleşir.
Vertex
Bu özellikle bu GPU için ilginç bir bölümdür. Bu aşamada GPU, geometrimiz üzerinde vertex dönüşümleri uygulama yeteneği sunar. Bu özelliği Flipper ile zaten görmüştük, ancak bu GPU, programlanabilir bir motor kullanır. Yani geliştiriciler, hangi vertex işlemlerinin nasıl gerçekleştirileceğini belirleyebilirler, önceden tanımlanmış bir programa güvenmek yerine. Bununla birlikte, NV2A aynı zamanda 'sabit' modda çalışabilir, eğer gerekiyorsa.
Bu aşama, bir Vertex Ünitesi tarafından yönetilir ve NV2A'da iki tanesi vardır. Her biri en fazla 136 komut içeren bir program yükleyebilir (aynı zamanda mikrokod olarak adlandırılır). Bu programa vertex programı denir ve çalışma zamanında yüklenir. Bir vertex programı şu işlemleri gerçekleştirebilir :
- Aritmetik işlemler (örneğin toplama, çarpma, minimum vb.).
- Bu, dot product gibi grafikle ilgili görevlere yardımcı olan 'yardımcı fonksiyonları' içerir.
- Vertex Swizzling (Yeniden düzenleme ve/veya çoğaltma).
Kısacası, vertex ünitesi, vertex'leri kayıtlarında manipüle ederek işler. Diğer bir deyişle, bir kere program yüklendikten sonra, 16 salt okunur kayıt ( 'input kayıtları' olarak adlandırılır), bir vertex'in öznitelikleriyle başlatılır (her vektör dört bileşen içerir). Daha sonra, ünite, giriş kayıtlarını kullanarak (program tarafından talimatlandırıldığı gibi) işlemin kümesini gerçekleştirir. Dahası, hesaplamaya yardımcı olması için 12 yazılabilir kayıt ve en fazla 196 sabit sağlanır. Son olarak, elde edilen vertex, başka bir blokta bulunan 11 yazılabilir kayda (her biri belirli bir amaçla sınırlı) saklanır ve bir sonraki aşamaya iletilir. Bu süreç, alınan her vertex için tekrarlanır.
Piksel
Bu aşamada, vertex'ler piksellere dönüştürülür. İşlem, her üçgeni çizmek için piksel üreten bir pikselleştirici (rasteriser) ile başlar. NV2A'nın pikselleştiricisi döngü başına dört piksel üretebilir.Ardından, bellekten dokuları çekmek için 4 texture shader kullanılır , bunlar aynı zamanda anizotropik filtreleme, mipharitalama ve shadow buffering uygulamak için otomatik olarak sunar. Gölgeleme işlemi, bir pikselin görünür mü yoksa aydınlatma kaynağı tarafından gölgelenmiş mi olduğunu test etmek için kullanılır, böylece doğru renk uygulanabilir. Bu noktada, GPU aynı zamanda kırpma ve erken bir Z-testi gerçekleştirme olanağı da sunar (NV2A, Z-buffer'ı orijinal boyutunun dört katına sıkıştırarak bant genişliğini tasarruf etmeye katkıda bulunarak birçok performans iyileştirmesine neden olur).
Sonuçta elde edilen pikseller, bir ortak kayıt kümesine depolanır ve ardından her biri bunlara aritmetik işlemler uygulayan 8 register birleştiriciden geçirilir. Bu işlem, GPU tarafından yürütülen bir başka tür program olan piksel shader'larının kullanımıyla programlanabilir bir nitelik taşır . Her döngüde, her bir birleştirici, kayıt kümesinden RGBA değerlerini (RGB + Alpha) alır . Ardından, shader tarafından belirlenen işleme dayanarak değerleri işler ve sonucu geri yazar. Son olarak, daha büyük bir miktar değer, yalnızca speküler renkleri karıştırabilir ve/veya sis ekleyebilen son birleştiriciye gönderilir.
Register birleştiricileri, Texture Environment Unit ile benzer bir şekilde programlanabilir. Yani belirli bir kombinasyonu ayarlarıyla register'ları değiştirerek. Xbox'ın durumunda, PFIFO, PGRAPH'ı kurmak için pushbuffer'ları okur, bu da register birleştiricilerini ve doku shader'larını içerir.
Post-processing (İşlem Sonrası)
Piksellerin çerçeve belleğine yazılmadan önce, NV2A, ana bellekte ayrılmış blokları kullanarak gerekli testleri (alfa, derinlik ve damga) gerçekleştiren dört adanmış motor içeren Raster Output Unit veya 'ROP' içerir. Son olarak, piksel toplulukları (her biri dört piksel) yalnızca bu testleri geçerse geri yazılır.
Ayrıca, çerçeve belleği multisampling (çok örnekleme) bir teknik olan çok örneklemeli kullanılarak anti-aliasing uygulanabilir . Aslında bu teknik, çokgenlerin kenarlarını, sürece eklenen farklı ofsetlerle birden çok kez örneklemektedir. Ardından, tüm örnekler ortalama alınır ve anti-aliased görüntüyü oluşturmak için kullanılır. Bu yaklaşım, önceki (ve daha fazla kaynak tüketen) anti-aliasing işlevini olan 'çok örneklemeli'yi, önceki Nvidia GPU'ları tarafından kullanılanı, değiştirdi.
Programlanabilirliğin Önemi
Nvidia'nın geliştiricilere sunduğu yeni programlanabilirlik modelinin önemini vurgulamayı çok önemli buluyorum. Yıllar önce, grafik boru hattının büyük bir kısmı CPU tarafından hesaplanırken, GPU'ya pikselleştirme (rasterisation) işlemlerini hızlandırma görevi bırakılmıştı. 'Shader'lar (piksel shader'lar ve vertex programları için referans) tanıtıldığında, programcılar GPU'nun kaynaklarından faydalanarak boru hattındaki birçok hesaplamayı hızlandırabilir, CPU üzerindeki büyük bir iş yükünü hafifletebilir.
'Shader' kavramı, Pixar'ın 1989'da Renderman'ı genişletmek için geliştirdiği bir yöntem olarak tanıtıldı , bu, 3D renderlama için kullanılan öncü yazılımlarından biriydi. Bu, 3D grafiklerin çoğunlukla endüstriyel ekipmanlar tarafından işlendiği zamanlara denk geliyor. Daha sonra, belirli konsolların benzer prensipleri dahil ettiğini gördük, ancak Nvidia GeForce3 serisini piyasaya sürdüğünde, shader'lar tüketici pazarında bir standart haline geldi.

(Video) Vertex programı tarafından elde edilen karmaşık animasyon.

(Video) Piksel shader'lar ile elde edilen farklı doku efektleri.
Vertex programları sayesinde GPU, model dönüşümlerini, aydınlatma hesaplamalarını ve doku koordinatı oluşturmayı hızlandırabilir. Sonuncusu, Higher Order surfaces oluşturmak için esastır. Bu sayede CPU, daha iyi fizik, yapay zeka ve sahne yönetimi sağlamaya odaklanabilir.
Piksel shader'ların durumunda, programcılar farklı efektler elde etmek için tekstürleri çoklu yollarla manipüle edip karıştırabilir, çoklu doku, speküler haritalama, çıkıntı haritalama, çevre haritalama vb.
Bu yaklaşımın getirdiği yeni bir programlama konsepti, General Purpose GPU (Genel Amaçlı GPU) veya 'GPGPU'dur ve GPU'ya özgü olmayan görevleri GPU'ya atamaktan oluşur. Bu, GPU'nun sadece grafik boru hattının çoğunu ele geçirmekle kalmayıp aynı zamanda özel hesaplamalar için etkili bir işlemci olarak hareket edebilmesi anlamına gelir (örneğin, fizik hesaplamaları). Bu, GPU'lar daha güçlü ve esnek hale geldikçe gelişecek yeni bir alandır. Ancak NV2A, donanım yeteneklerinin (vertex ve piksel shader'lar) ve geliştirilen özel API'ların (OpenGL'in 'state programları') bir kombinasyonu sayesinde bunu başarabiliyordu.
Shader'ların gelecekteki makalelerde düzenli olarak ele alınacağını düşünüyorum. Ancak bu makalede, bunların biraz 'ilkel' olarak kabul edilebileceğini ve bazı insanların piksel shader'ların günümüz GPU'ları tarafından sunulanlarla hatta 'shader'lar' olarak kabul edilemeyeceğini iddia edebileceğini unutmayın.
Xbox'ın Çerçevesi
Oyunların standart çözünürlüğü 640x480'dir, bu altıncı neslin standartıdır. Ancak, bu kısıtlama sadece bir sayıdır: GPU, 4096x4096'ya kadar olan çerçeve belleklerini çizebilir, ancak donanımın kabul edilebilir performans sağlayıp sağlamayacağı ayrı bir konudur. Öte yandan, konsol, ekran ayarlarını genel olarak yapılandırma olanağı tanır, bu da pioner özellikleri (örneğin geniş ekran ve 'yüksek çözünürlük') geliştirmeye yönlendirebilir, geliştiricilerin bunları keşfetmelerini beklemek yerine (Gamecube/Wii'de olduğu gibi).
Öte yandan, video kodlayıcı, çerçeve belleğinde ne varsa TV'niz tarafından anlaşılabilir bir formatta yayınlamaya çalışacaktır. Bu, oyunlar HD çıkış yapmadıkça (örneğin 720p veya 1080i, ki bunu sadece birkaç oyun yapar), geniş ekran görüntülerin anamorfik hale geleceği anlamına gelir.
Bu söylendiğine göre, bu konsol hangi sinyalleri yayınlar? Oldukça fazla. Xbox, tipik PAL/NTSC kompozitin yanı sıra YPbPr ('component' konektörlerini almak için ekstra bir aksesuar gerekir) ve RGB (hem SCART hem de VGA uyumlu) sunar. Sonuç olarak, pahalı adaptörlere ve benzeri şeylere ihtiyaç duymadan oldukça kullanışlıdır.



