KULT Underground

una della più "antiche" e-zine italiane – attiva dal 1994

DirectX e Direct3D

7 min read

DirectX e Direct3D

Le voci che annunciavano la definitiva entrata in campo dei Personal
Computer nel mondo del 3D stanno finalmente diventando qualcosa di più che semplici chiacchiere. Anche nel mercato italiano sono comparse le prime schede grafiche che dimezzano e in certi casi annullano il divario che si era creato nel campo della grafica, fino a ora esclusivo terreno delle console (leggi Sega Saturn, Nintendo 64 e Sony
Playstation). Ma sarà così? Riuscirà la Microsoft con le sue DirectX
(e Direct3D) a spostare le orde di incalliti giocatori del 3D verso il mondo dei PC?

Vediamo allora di dare un’infarinatura generale (molto generale) di questi driver, utilizzando qualche esempio per semplificare il tutto
(visto che il mio capo redattore si lamenta del mio linguaggio troppo tecnico). Microsoft voleva, come dicevamo prima, rendere capaci i computer di grafica 3D: pensò così di creare degli strumenti che avrebbero permesso agli sviluppatori di realizzare applicazioni (leggi anche videogiochi) che avessero accesso diretto alle funzioni di accelerazione delle periferiche (leggi schede grafiche) eliminando però qualsiasi vincolo e quindi istruzioni vincolate all’hardware posseduto dall’utente finale. La grafica 3D sarebbe diventata finalmente un terreno accessibile a tutti: sia a chi avesse un hardware povero sia ad uno ricco (ovviamente con differenza di prestazioni e particolari). Creare quindi applicazioni che sfruttino accelerazioni 3D hardware se presenti ma che consentano allo stesso modo l’uso del programma anche su di una scheda grafica normale.
DirectX non è altro che un insieme di API non basato sulle componenti fisiche del computer, che fornisce ai programmatori una serie di
“servizi”.

Le DirectX contengono, tra l’altro, strumenti per la grafica 2D (che si chiamano DirectDraw), per la grafica 3D (Direct3D) e l’audio
(DirectSound). Questi strumenti accedono direttamente alle componenti fisiche del computer a loro interessate tramite due fratelli: HAL e
HEL. Il primo (o sarebbe meglio dire primogenito in questo caso?) è un piccolo programmino di gestione (un driver chiamato HAL, Hardware
Abstraction Layer, livello di astrazione hardware) realizzato direttamente dal produttore di quel specifico componente in accordo con i parametri fissati da Microsoft. In oltre, per garantire una vera e propria indipendenza tra i programmi e l’hardware del computer, è stato creato un altro strato software (possiamo paragonarlo a un tuttofare o un attore) chiamato HEL (Hardware Emulation Layer) che
“emula”, o meglio “recita”, quelle particolari funzioni che non dovessero essere presenti nell’hardware utilizzato. Facciamo un esempio chiarificatore di quello che fanno i fratelli HAL e HEL.
Supponiamo che il programma (siamo realisti, il videogioco) contenga una serie di istruzioni che corrispondono ai “servizi” previsti dalle
API DirectX. Se abbiamo investito i nostri ultimi stipendi in una periferica capace di realizzare questi “servizi” ecco che entra in gioco il fratello maggiore HAL, che interpreterà grazie alle sue ottime doti di traduttore (leggi driver) le istruzioni e le convertirà nelle corrispondenti istruzioni macchina che verrano poi passate all’hardware. Se invece si sono investiti gli ultimi stipendi per regalare quell’anello alla propria ragazza (rinunciando così alla scheda 3D tanto desiderata… per carità mille volte meglio un anello, che 200.000 poligoni texturizzati al secondo; peccato solo che l’anello non sia ancora Directx compatibile!) ecco che entra in campo il fratellino minore HEL che, non trovando una periferica capace di realizzare i servizi, emula le istruzioni (si vede che anche lui ha una ragazza… che cuore d’oro!)

Le API e fratello HEL fanno parte dei servizi di sistema che permettono ai programmatori una totale libertà e indipendenza dall’hardware (e che ci permette inoltre di continuare a salvare il nostro rapporto di coppia); HAL viene realizzato invece dai produttori di periferiche per fornire un’interfaccia per le funzioni specifiche dell’hardware.
Abbiamo spiegato molto in generale come funzionano le DirectX. Bisogna però aggiungere che oltre ai due fratelli HAL e HEL, nelle DirectX, più precisamente nelle Direct3D, ci sono tre personaggi che costituiscono il cuore del motore del disegno 3D di queste API. Sono 3 moduli che permettono sia di accedere all’hardware dedicato per eseguire le funzioni 3D supportate da un eventuale acceleratore
(tramite fratello HAL) sia di emulare tutte le funzioni (tramite fratello HEL, il preferito dalle nostre ragazze!) Possiamo pensarli come i tre cugini di HAL e HEL: il primo (che io chiamo ToMmy) è il
Transformation Module (modulo di trasformazione) che gestisce i calcoli matematici (attenzione un laureato quindi…) necessari a svolgere le trasformazioni geometriche degli oggetti (non vorrei essere al suo posto!); il secondo (o meglio la seconda, che chiamo
Lisa Mary, una ragazza finalmente) è il Lighting Module (modulo di illuminazione) che calcola gli effetti derivanti dalla presenza di sorgenti luminose (un direttore delle luci, tipo quelli dei film… chissà quanto avrà pagato la grande M per scritturarla); infine (Rick, ho finito le idee) il Rasterization Module (non è un modulo né rasta né giamaicano…) che elabora i risultati prodotti dai primi due cugini per fornire la rappresentazione finale in 2D della scena e degli oggetti 3D (una specie di scenografo-architetto!) Dunque Tommy,
Lisa Mary e Rick sono alla base delle Direct3D, ma sono anche intercambiabili con altri moduli sviluppati da terze parti nel caso si vogliano creare nuovi effetti grafici. Non mi addentrerei oltre nella spiegazione delle DirectX per non appesantire il discorso. Sappiate comunque che per adesso siamo arrivati alla versione 3 e che, per chi non le avesse ancora il pacchetto DirectX può scaricarlo dall’indirizzo internet http://www.microsoft.com/mediadev (a meno di cambiamenti dell’ultimo minuto) e che comunque sono reperibili anche in alcune riviste con CD-ROM che si possono trovare in edicola o addirittura nei CD-ROM dei giochi che le sfruttano (una nota a proposito di questo: fino alla versione 2, ogni volta che installavo un gioco che utilizzava questi driver, ho dovuto subire la reinstallazione nonostante le avessi già… non ancora capito perché succedeva ciò, ma finalmente con questa versione l’installatore provvede a verificare l’esistenza o meno nel sistema di questi driver:
ERA ORA.)

Passiamo dunque a parlare di alcuni effetti grafici che dovrebbero essere supportati da queste schede grafiche 3d o emulati via software
(ricordo comunque che un emulazione via software, nonostante faccia bene al rapporto di coppia per i succitati motivi, rallenta un po’ l’applicazione: ma si sa al cuor non si comanda…)

———————————————————————-

ALPHA BLENDING: tecnica utilizzata per controllare la trasparenza degli oggetti. Calcola punto per punto la risultante delle due texture
(che è il disegno del materiale applicato sopra l’oggetto 3D, come la pelle sopra i muscoli per intenderci) in base alla presenza del colore alpha che determina la trasparenza.

———————————————————————-

ANTI-ALIASING: serve per limitare l’effetto degli spigoli nelle figure curve (usando colori più sfumati per il contorno dei poligoni e ridurre così il contrasto con le zone di colore diverso)

———————————————————————-

BI-LINEAR FILTERING: tecnica utilizzata per correggere l’effetto mosaico (detto anche “guarda che bei quadratoni verdi mi fa la mia scheda grafica quando mi avvicino al muro”) dovuto all’applicazione di texture su oggetti 3D molto complessi (che ricordo sono formati da migliaia di poligoni). Questo è uno dei motivi per cui bisognerebbe avere una scheda grafica potente!

———————————————————————-

DEPTH CUEING: serve per conferire maggiore profondità alle scene che rappresentano ambienti chiusi. Consiste nello sfumare verso il nero i colori degli oggetti 3D che si trovano ad una certa distanza.

———————————————————————-

DOUBLE BUFFERING: serve per velocizzare la rappresentazione dei fotogrammi (30 al secondo): mentre si visualizza un fotogramma sullo schermo (sfruttando una finestra di memoria) si prepara quell’altro nella finestra di memoria separata (sono dunque due, per cui il buffering si dice doppio).

———————————————————————-

FOGGING: tecnica utilizzata per nascondere l’orizzonte di uno scenario
3D e di tutti gli oggetti che si trovano ad una data distanza. Molto spesso utilizzata per migliorare le prestazioni del programma, perché riduce il dettaglio della scena.

———————————————————————-

GOURAUD SHADING: serve per produrre oggetti di tipo realistico: è in pratica un modello d’illuminazione secondo cui ogni poligono viene rappresentato con più colori. E il più utilizzato dalle schede 3D accelerate.

———————————————————————-

MIP MAPPING: serve per risolvere il problema dell’effetto mosaico: consente di memorizzare tre copie di dimensioni diverse della stessa texture permettendo di utilizzare quella più adatta alle dimensioni dell’oggetto.

———————————————————————-

PERSPECTIVE CORRECTION: servono per adattare le texture degli oggetti
3D alla prospettiva derivante dal punto di vista relativo dell’osservatore.

———————————————————————-

TEXTURE MAPPING: consiste nell’applicare all’oggetto 3D un immagine bitmap per rendere più realistico l’oggetto (ad esempio applicare l’effetto sabbia ad una superficie poligonale 3d che rappresenta un terreno desertico).

———————————————————————-

Z BUFFERING: serve per segnalare alla CPU quali sono gli oggetti in primo piano e di rimuovere quelli nascosti.

———————————————————————-

Bene, è tutto per questo mese: mi riprometto di tornare sull’argomento con una panoramica veloce e indolore sulle schede 3d non appena inizierà un massiccio utilizzo nel campo ludico e non (volevo allegare un’immagine di quake accelerato e liscio per farvi vedere la differenza, ma il nostro formato grafico non farebbe risaltare bene il miglioramento. Rimandiamo perciò il tutto a quando ci sarà una versione di CALT Andergraund per Win 95)

Giovanni Strammiello

Commenta