MarcoGT
29-11-2007, 19.19.54
(recuperata dalla cache di S.Google)
Scritta in origine da Filippo
GPU = Graphics Processing Unit. Il richiamo all'acronimo CPU (Central Processing Unit) comunemente attribuito ai processori è evidente. La sigla GPU, per la cronaca, è stata introdotta per la prima volta da Nvidia in corrispondenza al lancio della GeForce 256, la prima scheda grafica conforme alle DirectX 7.0.
Per capire meglio lo scopo per cui esistono le GPU, è importante capire quali sono le operazioni che si debbono fare per visualizzare una scena 3D su uno schermo. Per questo scopo, ci viene in aiuto il concetto di "pipeline" che Marco ha già ben illustrato nei suoi interventi.
Il procedimento che parte da una descrizione matematica della scena 3D e perviene ad una immagine bidimensionale visualizzabile su uno schermo è chiamato, per l'appunto, "3D pipeline". E, come una catena di montaggio, esso consiste in vari stadi.
Questa catena di montaggio consta fondamentalmente di quattro passi.
Il primo è costituito in genere dall'applicazione stessa che crea/manipola la descrizione matematica della scena 3D che finirà a schermo. Secondo tale descrizione, ogni oggetto è definito da una sorta di "reticolo" tridimensionale (mesh), ovvero una composizione più o meno complessa di poligoni tra loro adiacenti e identificati dalle posizione dei rispettivi vertici. Pensate, a titolo di esempio, al pallone da calcio: la sua superficie è costituita dall'accostamento di vari pentagoni ed esagoni aventi dei lati in comune tra loro, in modo da formare appunto una superficie sferica, anche se i singoli costituenti (i pentagoni e gli esagoni) non sarebbero, in linea di principio, curvi.
Più precisamente, quando si indicano i poligoni impiegati per comporre la descrizione degli oggetti, si usa il termine di primitive. Le primitive più utilizzate sono i triangoli, a volte anche quadrilateri. Alla luce di tutto ciò, quindi, un qualunque oggetto tridimensionale sarà in genere matematicamente descritto come un insieme di vertici, i quali presi a tre a tre (nel caso di triangoli) o a quattro a quattro (nel caso di quadrilateri) definiranno le primitive che a loro volta creeranno il reticolo che descrive la forma dell'oggetto 3D. Questi vertici vengono definiti attraverso le loro coordinate tridimensionali; i valori di queste coordinate sono espressi in relazione ad un punto di riferimento (origine) che è indipendente per ogni singolo oggetto. A completamento della descrizione dell'oggetto, ogni primitiva vedrà associata una cosiddetta normale, ovvero un vettore che indica quale delle due facce della primitiva è quella che "guarda" verso l'esterno dell'oggetto e qual'è invece la faccia interna (Back-face). Questa informazione servirà in seguito per vari motivi, come vedremo.
Assieme ai vertici del reticolo, la descrizione della scena comprenderà ovviamente la posizione del punto di osservazione della scena stessa, nonché le posizioni dei vari oggetti nel mondo tridimensionale, e la posizione e la tipologia delle luci presenti nella scena.
Ad ogni nuovo frame 3D da visualizzare a schermo, sarà compito dell'applicazione aggiornare le posizioni degli oggetti e del punto di osservazione. Alcune applicazioni "furbe" (e sicuramente è il caso dei motori grafici dei giochi 3D, che devono funzionare in tempo reale) possono già in questo stadio effettuare una prima "scrematura" della scena 3D, evitando di passare i dati di oggetti che non si potranno sicuramente vedere, o perché nascosti da altri oggetti o perché al di fuori della visuale offerta dal punto di vista.
I dati 3D manipolati dall'applicazione come descritto vengono quindi passati alla seconda fase, la cosiddetta "Geometry Phase". In questa fase avvengono diverse elaborazioni, volte a creare l'illusione del movimento, in aggiunta a quelle già fatte nella fase precedente nella quale venivano spostati gli oggetti e il punto di vista.
Appartengono a questa fase le operazioni di trasformazione geometrica, che sono fondamentalmente quattro: rotazione, traslazione, scaling (ingrandimento/riduzione) e skewing ("stiratura" è l'unico termine italiano che mi viene in mente dal significato simile).
In questo stadio, inoltre, vengono effettuate operazioni di trasformazione delle coordinate spaziali. Come si è visto prima, infatti, i vertici dei singoli oggetti sono descritti a partire da un punto di riferimento autonomo per ogni oggetto: serve pertanto riportare le coordinate dei vertici a valori che si riferiscano ad un'unica origine comune a tutta la scena. Questa trasformazione di coordinate si indica in genere come conversione da "spazio dei modelli" (Object Space) a "spazio del mondo" (World Space). Ma non è finita qui, perché dopo questa ha luogo un'altra conversione di coordinate, dove queste ultime vengono tutte espresse in funzione di una nuova origine che corrisponde al punto di osservazione della scena, e l'orientamento delle tre dimensioni cambia in modo che la terza dimensione, quella della profondità (z-axis) venga espressa in termini di distanza dal punto di osservazione stesso. Si parla in questo caso di conversione da spazio del mondo (World Space) a spazio della vista (View Space).
Una volta completata la catena di conversioni delle coordinate, si può procedere ad una selezione più precisa di cosa verrà mostrato e cosa no: viene verificato se esistono primitive che sono parzialmente o totalmente fuori dalla porzione visibile della scena (Triangle Clipping); vengono scartate anche le primitive la cui superficie non "guarda" verso l'osservatore, e sarà quindi coperta dalle altre primitive dello stesso oggetto che sono invece rivolte verso il punto di osservazione (Back-Face Culling).
Dopo che tutte queste trasformazioni sono avvenute, inizia la parte definita "Lighting". In questa fase vengono considerate le luci incluse nella descrizione della scena e la loro tipologia, che può essere:
Ambient = illuminazione globale, la cui provenienza non è specificata e che permea ogni punto della scena;
Point = illuminazione omnidirezionale, in cui la luce si irradia in ogni direzione a partire da un punto nello spazio;
Directional = illuminazione la cui origine si suppone a distanza infinita dal punto di osservazione, e quindi i raggi di luce sono tutti paralleli tra loro;
Spot = illuminazione avente origine in un punto, ma i cui raggi di luce si irradiano solo lungo una direzione predefinita, formando quindi un cono di luce.
Il tutto, combinato con le proprietà dei materiali da applicare agli oggetti (colore, riflessione, ecc.) e all'orientamento delle loro primivite (dedotto grazie ai vettori normali di cui si diceva prima) determina come verrà illuminato ogni oggetto e quale colore assumerà di conseguenza.
Tutto quanto abbiamo detto finora a proposito del secondo stadio, messo assieme, costituisce il famoso Transform & Lighting che le GPU supportano in hardware a partire dalle DirectX 7.0.
Siamo arrivati al terzo stadio, detto anche "Triangle Setup". L'operazione più importante che viene fatta in questo stadio è di adattare la scena fin qui elaborata, preparandola per essere "proiettata" su una superficie bidimensionale. Difatti, fin qui tutti i dati elaborati sono stati in tre dimensioni, ma bisogna ricordarsi che il fine ultimo è quello di ottenere un'immagine bidimensionale (quindi piatta) da mandare a schermo. Non solo: l'immagine piatta è anche caratterizzata da un ben determinato numero di pixels (in funzione della risoluzione a cui sta funzionando lo schermo) e quindi si deve passare da una scena descritta in termini di vertici ad una descritta in termini di pixels.
L'ultima fase è il rendering vero e proprio. In questa fase vengono ombreggiati gli oggetti, ovvero il colore e la luminosità di ogni singolo pixel vengono stabiliti in funzione: del modo in cui gli oggetti vengono illuminati; del modello matematico impiegato per stabilire come la luce interagisce con gli oggetti stessi (Flat, Gouraud o Phong, questi ultimi due dal nome del rispettivo inventore); dall'eventuale presenza di "decorazioni" delle primitive dell'oggetto, ovvero immagini da applicare alle facce dell'oggetto (le famose textures).
Bene, a parte il primo stadio della pipeline 3D, tutto il resto viene oggigiorno "smazzato" dalle GPU...
...continua...
Scritta in origine da Filippo
GPU = Graphics Processing Unit. Il richiamo all'acronimo CPU (Central Processing Unit) comunemente attribuito ai processori è evidente. La sigla GPU, per la cronaca, è stata introdotta per la prima volta da Nvidia in corrispondenza al lancio della GeForce 256, la prima scheda grafica conforme alle DirectX 7.0.
Per capire meglio lo scopo per cui esistono le GPU, è importante capire quali sono le operazioni che si debbono fare per visualizzare una scena 3D su uno schermo. Per questo scopo, ci viene in aiuto il concetto di "pipeline" che Marco ha già ben illustrato nei suoi interventi.
Il procedimento che parte da una descrizione matematica della scena 3D e perviene ad una immagine bidimensionale visualizzabile su uno schermo è chiamato, per l'appunto, "3D pipeline". E, come una catena di montaggio, esso consiste in vari stadi.
Questa catena di montaggio consta fondamentalmente di quattro passi.
Il primo è costituito in genere dall'applicazione stessa che crea/manipola la descrizione matematica della scena 3D che finirà a schermo. Secondo tale descrizione, ogni oggetto è definito da una sorta di "reticolo" tridimensionale (mesh), ovvero una composizione più o meno complessa di poligoni tra loro adiacenti e identificati dalle posizione dei rispettivi vertici. Pensate, a titolo di esempio, al pallone da calcio: la sua superficie è costituita dall'accostamento di vari pentagoni ed esagoni aventi dei lati in comune tra loro, in modo da formare appunto una superficie sferica, anche se i singoli costituenti (i pentagoni e gli esagoni) non sarebbero, in linea di principio, curvi.
Più precisamente, quando si indicano i poligoni impiegati per comporre la descrizione degli oggetti, si usa il termine di primitive. Le primitive più utilizzate sono i triangoli, a volte anche quadrilateri. Alla luce di tutto ciò, quindi, un qualunque oggetto tridimensionale sarà in genere matematicamente descritto come un insieme di vertici, i quali presi a tre a tre (nel caso di triangoli) o a quattro a quattro (nel caso di quadrilateri) definiranno le primitive che a loro volta creeranno il reticolo che descrive la forma dell'oggetto 3D. Questi vertici vengono definiti attraverso le loro coordinate tridimensionali; i valori di queste coordinate sono espressi in relazione ad un punto di riferimento (origine) che è indipendente per ogni singolo oggetto. A completamento della descrizione dell'oggetto, ogni primitiva vedrà associata una cosiddetta normale, ovvero un vettore che indica quale delle due facce della primitiva è quella che "guarda" verso l'esterno dell'oggetto e qual'è invece la faccia interna (Back-face). Questa informazione servirà in seguito per vari motivi, come vedremo.
Assieme ai vertici del reticolo, la descrizione della scena comprenderà ovviamente la posizione del punto di osservazione della scena stessa, nonché le posizioni dei vari oggetti nel mondo tridimensionale, e la posizione e la tipologia delle luci presenti nella scena.
Ad ogni nuovo frame 3D da visualizzare a schermo, sarà compito dell'applicazione aggiornare le posizioni degli oggetti e del punto di osservazione. Alcune applicazioni "furbe" (e sicuramente è il caso dei motori grafici dei giochi 3D, che devono funzionare in tempo reale) possono già in questo stadio effettuare una prima "scrematura" della scena 3D, evitando di passare i dati di oggetti che non si potranno sicuramente vedere, o perché nascosti da altri oggetti o perché al di fuori della visuale offerta dal punto di vista.
I dati 3D manipolati dall'applicazione come descritto vengono quindi passati alla seconda fase, la cosiddetta "Geometry Phase". In questa fase avvengono diverse elaborazioni, volte a creare l'illusione del movimento, in aggiunta a quelle già fatte nella fase precedente nella quale venivano spostati gli oggetti e il punto di vista.
Appartengono a questa fase le operazioni di trasformazione geometrica, che sono fondamentalmente quattro: rotazione, traslazione, scaling (ingrandimento/riduzione) e skewing ("stiratura" è l'unico termine italiano che mi viene in mente dal significato simile).
In questo stadio, inoltre, vengono effettuate operazioni di trasformazione delle coordinate spaziali. Come si è visto prima, infatti, i vertici dei singoli oggetti sono descritti a partire da un punto di riferimento autonomo per ogni oggetto: serve pertanto riportare le coordinate dei vertici a valori che si riferiscano ad un'unica origine comune a tutta la scena. Questa trasformazione di coordinate si indica in genere come conversione da "spazio dei modelli" (Object Space) a "spazio del mondo" (World Space). Ma non è finita qui, perché dopo questa ha luogo un'altra conversione di coordinate, dove queste ultime vengono tutte espresse in funzione di una nuova origine che corrisponde al punto di osservazione della scena, e l'orientamento delle tre dimensioni cambia in modo che la terza dimensione, quella della profondità (z-axis) venga espressa in termini di distanza dal punto di osservazione stesso. Si parla in questo caso di conversione da spazio del mondo (World Space) a spazio della vista (View Space).
Una volta completata la catena di conversioni delle coordinate, si può procedere ad una selezione più precisa di cosa verrà mostrato e cosa no: viene verificato se esistono primitive che sono parzialmente o totalmente fuori dalla porzione visibile della scena (Triangle Clipping); vengono scartate anche le primitive la cui superficie non "guarda" verso l'osservatore, e sarà quindi coperta dalle altre primitive dello stesso oggetto che sono invece rivolte verso il punto di osservazione (Back-Face Culling).
Dopo che tutte queste trasformazioni sono avvenute, inizia la parte definita "Lighting". In questa fase vengono considerate le luci incluse nella descrizione della scena e la loro tipologia, che può essere:
Ambient = illuminazione globale, la cui provenienza non è specificata e che permea ogni punto della scena;
Point = illuminazione omnidirezionale, in cui la luce si irradia in ogni direzione a partire da un punto nello spazio;
Directional = illuminazione la cui origine si suppone a distanza infinita dal punto di osservazione, e quindi i raggi di luce sono tutti paralleli tra loro;
Spot = illuminazione avente origine in un punto, ma i cui raggi di luce si irradiano solo lungo una direzione predefinita, formando quindi un cono di luce.
Il tutto, combinato con le proprietà dei materiali da applicare agli oggetti (colore, riflessione, ecc.) e all'orientamento delle loro primivite (dedotto grazie ai vettori normali di cui si diceva prima) determina come verrà illuminato ogni oggetto e quale colore assumerà di conseguenza.
Tutto quanto abbiamo detto finora a proposito del secondo stadio, messo assieme, costituisce il famoso Transform & Lighting che le GPU supportano in hardware a partire dalle DirectX 7.0.
Siamo arrivati al terzo stadio, detto anche "Triangle Setup". L'operazione più importante che viene fatta in questo stadio è di adattare la scena fin qui elaborata, preparandola per essere "proiettata" su una superficie bidimensionale. Difatti, fin qui tutti i dati elaborati sono stati in tre dimensioni, ma bisogna ricordarsi che il fine ultimo è quello di ottenere un'immagine bidimensionale (quindi piatta) da mandare a schermo. Non solo: l'immagine piatta è anche caratterizzata da un ben determinato numero di pixels (in funzione della risoluzione a cui sta funzionando lo schermo) e quindi si deve passare da una scena descritta in termini di vertici ad una descritta in termini di pixels.
L'ultima fase è il rendering vero e proprio. In questa fase vengono ombreggiati gli oggetti, ovvero il colore e la luminosità di ogni singolo pixel vengono stabiliti in funzione: del modo in cui gli oggetti vengono illuminati; del modello matematico impiegato per stabilire come la luce interagisce con gli oggetti stessi (Flat, Gouraud o Phong, questi ultimi due dal nome del rispettivo inventore); dall'eventuale presenza di "decorazioni" delle primitive dell'oggetto, ovvero immagini da applicare alle facce dell'oggetto (le famose textures).
Bene, a parte il primo stadio della pipeline 3D, tutto il resto viene oggigiorno "smazzato" dalle GPU...
...continua...