« Architettura dell'Xbox (index)

Architettura dell'Xbox

Chapter 4: La grafica


Sommario

  1. Architettura e design
    1. Comandi
    2. Vertice
    3. Pixel
    4. Post-processing
  2. L'importanza della programmabilità
  3. I frame dell'Xbox

Come abbiamo visto, il processore grafico è all'interno del chip NV2A e, proprio come MCPX, anch'esso è prodotto da Nvidia.

Image
Il pacchetto Nvidia NV2A sulla scheda madre dell'Xbox.

Nvidia è un'azienda da tempo nel settore dei processori grafici. I loro processori della serie GeForce sono tra le GPU più popolari sul mercato, in competizione diretta con la serie Radeon di Artx/ATI. Nel complesso, si tratta di una scelta che poneva solide basi per garantire una certa qualità grafica all'Xbox, che pur rimaneva il primo approccio di Microsoft nel mercato delle console.

Anche se ora appare come una scelta scontata, allora si poteva dire la stessa cosa? Col senno di poi, considerata la storia recente, non è difficile capire perché Microsoft si sia rivolta a Nvidia piuttosto che ad altri marchi noti dell'epoca (3dfx, PowerVR, S3 ecc.); tuttavia, basta informarsi sul panorama del settore in quel periodo per rendersi conto di quanto complessa fosse la scelta.

Image
Halo (2001) in esecuzione su Xbox in modalità 720p.

Ad esempio, alla fine degli anni '90 la famosa serie 'Voodoo 2' di 3dfx rappresentava circa il 70% del mercato PC , mentre Nvidia provava in tutti i modi a promuovere l'adozione della nuova 'GeForce 256' (la prima scheda video della serie GeForce). In un contesto simile, la scelta di Microsoft suona più vicina all'azzardo che alla scommessa sicura. Invece, come sappiamo, il rischio fu ripagato in pieno.

Nel 1999, Nvidia non era l'azienda leader del settore che è adesso. Erano nei guai. La nuova architettura GeForce era ancora giovane e a molti non piaceva. Ora sembra irrinunciabile, ma bisogna scavare negli archivi per scoprire perché e per quale motivo ho dovuto lottare per poterla includere nella console. Avevo ragione, ma non lo sapevo ancora. Ero molto preoccupato.

- Seamus Blackley (co-creatore della prima Xbox)

Nel paragrafo seguente esamineremo il funzionamento del chip. Farò del mio meglio per evitare di restare impelagati nella terminologia e nel linguaggio del marketing, come nella sezione sulla CPU. Cominciamo dalle basi.

Architettura e design

Il core della GPU presente nel chip NV2A si basa sulla famosa serie di GPU "GeForce3" e nella documentazione tecnica di Nvidia è noto anche col nome NV20.

Image
Design della pipeline di NV2A.

Anche se la pipeline della GPU dell'Xbox si basa sull'architettura NV20, NV2A presenta alcune modifiche che lo rendono incompatibile con il resto della serie NV20 (ad esempio, è stato adattato per poter essere impiegato in un ambiente UMA).

Poiché nelle mie analisi ho scoperto molte caratteristiche che esulano dagli intenti di questo articolo, sentitevi liberi di consultare la bibliografia se qualcosa in questa sezione cattura la vostra attenzione. Inoltre, considerata la costante evoluzione terminologica di questo settore (che può causare una certa confusione), ho deciso di servirmi dei termini utilizzati da Microsoft e Nvidia nel periodo di commercializzazione dell'Xbox: se vi troverete a leggere altri articoli sull'architettura grafica da altre fonti, tenete presente questa nota.

È arrivato il momento di scoprire come l'Xbox crea i fotogrammi. Alcuni passaggi sono molto simili a quelli relativi al Flipper: se aveste difficoltà a seguire questo articolo, consultare quello relativo al GameCube potrebbe aiutarvi.

Comandi

Image
Fase dei comandi.

Prima di tutto, vediamo in che modo la GPU riceve comandi dalla CPU. La GPU contiene un gestore dei comandi chiamato PFIFO, che riceve ed elabora i comandi grafici (in un'area chiamata pushbuffer) in modalità FIFO; a questo punto, i comandi letti vengono inviati al motore PGRAPH (che si occupa dell'effettiva elaborazione grafica) e ad altri motori.

Come per Flipper, i comandi non devono integrare geometrie. Lo scambio dei dati tra PGRAPH e gli altri componenti della console può avvenire in diversi modi. Ad esempio, la CPU può allocare un buffer nella RAM contenente dati sui vertici, quindi ordinare alla GPU di recuperarli nella posizione dove sono memorizzati. Si tratta di un approccio potenzialmente efficiente, in quanto consente di evitare l'invio di geometrie duplicate.

I prossimi passaggi avvengono all'interno di PGRAPH.

Vertice

Image
Fase dei vertici.

A questo punto, le cose si fanno particolarmente interessanti. In questo passaggio, la GPU permette di applicare trasformazioni ai vertici della geometria. Abbiamo già visto una funzionalità simile in Flipper, se non fosse che in questa GPU viene utilizzato un motore programmabile: gli sviluppatori potevano indicare quali operazioni sui vertici eseguire e quando, anziché essere costretti a seguire un programma predefinito. Ad ogni modo, se richiesto, NV2A può funzionare anche in modalità "fissa".

Questa fase è gestita da una vertex unit; NV2A ne contiene due. Ognuna di esse può caricare un programma contenente fino a 136 istruzioni (conosciuto anche come microcodice). Questo programma si chiama vertex program e viene caricato in runtime. Un vertex program può eseguire le operazioni seguenti :

In breve, la vertex unit elabora i vertici manipolandoli nei suoi registri. Ciò significa che una volta caricato il programma, 16 registri in sola lettura (chiamati "registri di input") vengono inizializzati con gli attributi di un vertice (ogni vettore contiene quattro componenti). Quindi, la vertex unit esegue il set di operazioni richiesto dal programma servendosi dei registri di input. I calcoli vengono supportati da 12 registri scrivibili e fino a 196 costanti. Infine, il vertice elaborato viene memorizzato in un altro blocco costituito da 11 registri scrivibili (ciascuno deputato a uno specifico scopo), che alimentano la fase successiva del processo. Il tutto si ripete per ogni vertice ricevuto.

Pixel

Image
Fase dei frammenti/pixel.

In questa fase, i vertici vengono trasformati in pixel. La procedura inizia a partire da un rasterizzatore, che genera pixel con cui disegnare ogni triangolo. Il rasterizzatore di NV2A è in grado di generare quattro pixel per ciclo.È quindi il turno dei 4 texture shader, che vengono utilizzati per recuperare le texture in memoria ; inoltre, i texture shader possono applicare un filtro anisotropico, il mipmapping e lo shadow buffering. Quest'ultimo viene utilizzato per determinare se un pixel è visibile o se è coperto da una sorgente luminosa, in modo tale da applicare il colore corretto. A questo punto, la GPU può anche eseguire il clipping e un primo Z-test (riducendo lo Z-buffer di quattro volte rispetto alle dimensioni originali per risparmiare banda, un aspetto fondamentale per migliorare le prestazioni).

I pixel risultanti vengono memorizzati in un set di registri condivisi, quindi ciclati in 8 combinatori di registri, dove ogni combinatore applica delle operazioni aritmetiche. È possibile programmare questo processo utilizzando i pixel shader (un altro tipo di programma eseguito dalla GPU). A ciascun ciclo, ogni combinatore riceve i valori RGBA (RGB + canale alfa) contenuti nei set di registri . Quindi, in base alle operazioni definite dagli shader, applica ai valori le operazioni richieste e memorizza il risultato. Infine, una maggiore quantità di valori viene inviata al combinatore finale, l'unico a poter applicare colori speculari e/o nebbia.

I combinatori di registri sono programmabili in modo simile alla Texture Environment Unit. Ciò significa che è possibile alterare i registri con combinazioni di impostazioni specifiche. Nel caso dell'Xbox, il gestore PFIFO legge i pushbuffer e imposta il PGRAPH, che include i combinatori di registri e i texture shader.

Post-processing

Image
Fase di post-processing.

Prima che i pixel vengano scritti nel frame-buffer, NV2A si serve di quattro motori dedicati, chiamati Raster Output Unit o "ROP", per eseguire i test necessari (alfa, profondità e stencil) utilizzando i blocchi allocati allo scopo nella memoria principale. Infine, i pixel vengono scritti in blocchi (quattro pixel per ciclo) solo se superano questi test.

Per chiudere, occorre ricordare che è possibile applicare l'antialiasing al frame-buffer mediante una tecnica denominata multisampling. Essenzialmente, questa tecnica prevede che vengano eseguiti diversi campionamenti dei bordi dei poligoni, con offset differenti aggiunti nel processo. Successivamente, i campionamenti vengono mediati per formare l'immagine senza aliasing. Si tratta di un approccio che sostituisce la funzione di antialiasing denominata "supersampling", più pesante dal punto di vista computazionale e in uso nelle GPU Nvidia precedenti.

L'importanza della programmabilità

Credo che sia importante sottolineare quanto fosse importante questo nuovo modello di programmabilità fornito agli sviluppatori da Nvidia. In precedenza, buona parte della pipeline grafica veniva calcolata dalla CPU, mentre alla GPU spettava solo l'accelerazione delle operazioni di rasterizzazione. Con l'introduzione degli "shader" (sia pixel shader che vertex program), gli sviluppatori hanno potuto sfruttare le risorse della GPU per accelerare molti dei calcoli nella pipeline eseguiti precedentemente su CPU, liberando quest'ultima da un considerevole carico di lavoro.

L'idea alla base degli 'shader' è stata introdotta per la prima volta dalla Pixar nel 1989, per estendere le funzionalità di Renderman , il loro pionieristico software per il rendering 3D. Erano tempi in cui la grafica 3D era principalmente appannaggio di apparecchiature industriali. Come abbiamo visto, alcune console incorporarono principi simili, ma si dovette aspettare la gamma GeForce3 di Nvidia perché gli shader diventassero standard anche nel mercato consumer.

Video
(Video) Animazione complessa calcolata in un vertex program.

Video
(Video) Vari effetti delle texture calcolati nei pixel shader.

ChameleonMark (2002), demo sviluppata da Nvidia per mostrare le potenzialità degli shader di GeForce3.

Grazie ai vertex program, ora la GPU può accelerare le trasformazioni dei modelli, i calcoli di illuminazione e la generazione di coordinate di texture. Quest'ultimo elemento è essenziale per comporre le superfici di ordine superiore. In questo modo, la CPU può focalizzarsi su una migliore gestione della fisica, dell'intelligenza artificiale e delle scene.

Per quanto riguarda i pixel shader, gli sviluppatori possono manipolare le texture con varie tecniche (come multi-texturing, specular mapping, bump mapping, environment mapping ecc.) e ottenere così effetti diversi.

Grazie a questo nuovo approccio, in questo periodo emerge l'idea della General Purpose GPU o "GPGPU", che prevede l'assegnazione alla GPU di compiti tradizionalmente svolti solo su CPU. Il risultato è una GPU che non solo passa a occuparsi della maggior parte della pipeline grafica rispetto al passato, ma si comporta a tutti gli effetti come un co-processore, particolarmente efficiente nello svolgimento di calcoli specializzati (ad esempio, quelli relativi alla fisica). In futuro, questo nuovo approccio si svilupperà di pari passo con l'evoluzione delle GPU, sempre più potenti e flessibili. NV2A è il primo passo di questa nuova era, grazie alla combinazione tra le eccellenti capacità dell'hardware (vertex e pixel shader) e le API specializzate appositamente sviluppate (gli stati di OpenGL).

Credo che gli shader saranno menzionati di frequente nei prossimi articoli. Per quanto riguarda questo articolo, è importante tenere presente che potrebbero essere considerati 'grezzi' da alcune persone, che potrebbero spingersi ad affermare che i pixel shader qui descritti non siano neanche degli shader veri e propri (rispetto a quanto disponibile nelle GPU odierne).

I frame dell'Xbox

Come da prassi per la sesta generazione, la risoluzione standard dei giochi Xbox è di 640x480 pixel. Certo, la GPU può comporre frame-buffer a risoluzioni fino a 4096x4096, ma l'hardware non sarebbe comunque in grado di garantire prestazioni accettabili. Di contro, la console permette di applicare le impostazioni dello schermo (ossia widescreen e "alta risoluzione") globalmente, anziché lasciare che siano gli sviluppatori a implementarle (come successe per il GameCube/Wii).

Il compito dell'encoder video è quello di trasmettere in un formato decodificabile dalla TV qualsiasi cosa sia nel frame-buffer. Ciò significa che le immagini widescreen vengono trasmesse in formato anamorfico, a meno che il gioco non produca immagini in HD (ossia in 720p o in 1080i, funzionalità offerta solo da una manciata di giochi).

Detto ciò: quanti tipi di segnali possono uscire dalla console? Un bel po'. Oltre al classico segnale composito PAL/NTSC, l'Xbox può produrre sia un segnale YPbPr (trasmesso tramite connettori 'component', e che quindi richiede un cavo aggiuntivo) che un segnale RGB (compatibile con SCART e con VGA). Un'offerta tutto sommato ampia, che non richiede l'utilizzo di costosi adattatori o altri dispositivi.


Previous: 3. La CPU

Next: 5. Audio


Rodrigo Copetti © 2026 RSS Feed

Passa alla versione moderna

Inizio · Articoli · Supporta · Informazioni sull'autore · Informazioni sul sito