Grafica 2D, 2.5D e 3D.

Pubblicato: ottobre 21, 2013 in Generale, Uncategorized
Tag:, ,

imagesCi capita molto spesso di leggere nelle caratteristiche dei moderni device che le nuove CPU  hanno capacità grafiche 2D, 2,5D o 3D hardware che supportano standard come OpenGL, ES, OpenVG o DIrect3D Mobile.
Vi siete mai chiesti cosa significano queste sigle?
Nelle righe seguenti cerchero’ di dare una spiegazione veloce ai concetti di basi che si celano dietro queste sigle.

Quando si parla di computer grafica ci si riferisce alla possibilità di disegno geometrico, di
forme,  linee, rettangoli o poligoni su un piano a 2 dimensioni ( lo schermo del Pc ad esempio) , o la copia di pixel da un piano ad un altro.
Tali piani sono chiamati bitmap, superfici di disegno o anche Canvas.


Essi possono rappresentare i pixel su un dispositivo visualizzatore visibile (come LCD), oppure
essi possono essere memorizzati da qualche parte fuori dallo schermo, in una zona di memoria invisibile.
Le bitmap hanno una profondità di bit che determinano il numero di colori ( a loro volta appresentano i colori dei pixel) e  possono essere definiti nella RGB o nello spazio colore YUV.
Il processo di disegnare forme su una bitmap è chiamata rasterizzazione o rendering.
Generalmente il rendering può essere fatto direttamente dal software in esecuzione sul processore host , da in DSP dedicato  o da un hardware di accelerazione grafica.
Appare evidente che quando è possibile, è meglio utilizzare un acceleratore grafico in quanto si libera la CPU da un compito gravoso e che in generale richiede un grande dispendio di tempo e potenza di calcolo.

In grafica 2D , copiare i pixel da una bitmap a un’altra, è un’operazione comunemente chiamata BitBlt ( Bit Block Transfer): Tale operazione può essere implementata in hardware o in software .
Un tipico acceleratore grafico 2D è un dispositivo che accelera il BitBlt.
Un acceleratore di questo tipo è  simile ad un DMA , ma specializzato per il trasferimento di dati di pixel da un’area di memoria grafica ad un’altra.
Operazioni BitBlt sono il fondamento della grafica 2D.
Molte applicazioni sono costruite interamente con semplici operazioni BitBlt.

Alcuni esempi sono le interfacce grafiche di Microsoft® windows ( almeno nelle versione non troppo recenti o CE), Linux , MacOS® etc…
Ogni volta che un utente apre o trascina una finestra in una interfaccia grafica, vengono effettuate centinaia di operazioni di BitBlt.
La matematica che viene utilizzata per calcolare le operazioni BitBlt  è in genere  intera ( senza virgola mobile) .
Il limite principale della grafica basata sul BitBlt è dell’essere non è facilmente scalabile.
Le interfacce utenti di solito  sono in genere costruite per una specifica dimensione del display (ad esempio , VGA , 640 × 480 pixel) ed è difficile  adattare la grafica a risoluzioni di schermo diverse.
Alcuni dispositivi più recenti dispongono di un’accelerazione grafica 2D ( e anche 3D)  diversa  dal semplice BitBlt  basata su OpenVG ™o OpenGL.
Questo approccio è in alcuni caso definito come grafica ” 2.5D “.

Anche se può sembrare strano non è sempre semplice stabilire se una particolare applicazione è davvero implementata con grafica 3D , o se è fatta con un uso intelligente della grafica 2D.
Ad esempio, le icone che appaiono a girare in 3D sono spesso raggiunti su un 2D.
Il piu delle volte le applicazioni grafiche ( anche sofisticate) sono realizzate con una sapiente combinazione di grafica 2D e 3D.

2D , 2.5D o 3D ?

Se l’utente dovrà navigare all’interno della scena in profondità , e / o avrà la necessità di ruotarla ( per esempio , l’utente può ” girare intorno ” e guardare a ciò che è dietro di lui ) , è un primo indizio che vi servirà un 3D.
Se questi movimenti approfonditi dovranno essere eseguiti in modo interattivo ed in tempo reale, al fine di dare la sensazione di “essere nella scena “,  sarà richiesta l’ombreggiatura di tutti gli
oggetti della scena da eseguire ripetutamente e di  tenere conto di ogni cambiamento della posizione relativa del punto  vista dell’utente e della sorgente di luce.
Questi requisiti vi daranno la certezza che avrete necessita’ di capacità grafiche 3D anche molto spinte e possibilmente realizzabili  tramite acceleratori grafici 3D che consentano di copiare le bitmap su superfici con qualunque orientamento arbitrario (in tre dimensioni) rispetto alla telecamera (il display) ed in grado di trasformare i pixel in modo che la loro prospettiva si corregga una volta “adagiati” sulla nuova forma.
Questa operazione è chiamata texture mapping e richiede l’interpolazione e filtraggio che è ben al di là del BitBlt e delle semplici capacità del 2D .

textureMapping

Un’altra opzione , denominata ” 2.5D ” combina le funzionalità di conversione delle coordinate del 3D con il rendering in due sole dimensioni. Questo dà la possibilità di scalare e ruotare Grafica 2D in modo facile ma, non dara’ la possibilità di cambiare la prospettiva dello spettatore.

textureMapping1

Adobe® Flash® , Scalable Vector Graphics ( SVG) e OpenVG ™ sono alcuni esempi di grafica progettati appositamente per effettuare delle operazioni di questo genere.
OpenGL può essere utilizzata anche (e spesso lo è) come interfaccia grafica 2.5D .
E sufficiente realizzare una scena a profondità costante e con punto di vista dell’utente, e fonti luce, fisso.

Shading vertex e Pixel shading.

L’ombreggiatura  dinamica degli oggetti  sulla base delle  posizioni delle fonti di luce e della telecamera (che può essere anche in movimento) è una caratteristica fondamentale di qualsiasi interfaccia grafica 3D .
Esistono due approcci che sono radicalmente differenti: shading vertex e pixel shading .

Vertex shading è l’approccio più vecchio anche se ancora ampiamente utilizzato e supportato perché è semplice da usare . A tutt’oggi e’ ancora adatto per molti tipi di applicazioni .
Nel vertex shading, i calcoli di ombreggiatura vengono eseguiti solo al vertice di ogni triangolo nella scena .
Nell’esempio qui sotto, i colori ai vertici sono rosso, verde e blu. I pixel rimanenti visibili sul triangolo sono poi determinati grazie all’interpolazione fra i tre vertici .

textureMapping2
La principale limitazione di questo approccio è che gli oggetti tendono ad avere un aspetto a blocchi e innaturale.
L’aumento della qualità di rendering richiede tipicamente l’aumento del numero di vertici ( tassellatura ), che ovviamente aumenta a sua volta la memoria necessaria richiesta riducendone la resa e le prestazioni.

Pixel shading (noto anche come frammento ombreggiatura in OpenGL®) è relativamente nuovo ed è utilizzato principalmente in applicazioni in cui il fotorealismo è importante .
Il Pixel shading aiuta ad ottenere ottimi risultati, senza la necessità di aumentare la tassellatura ( quantità di vertici ).
Con questa tecnica il colore di ogni pixel dell’oggetto, che sara’ visibile per lo spettatore, viene calcolato singolarmente. I colori dei pixel vengono calcolati da un programma (Shader), che può essere personalizzato e scaricato nell’ acceleratore grafico hardware.
Questi effetti possono essere, per esempio, schemi regolari o casuali di pixel utilizzati per simulare l’aspetto di ruggine su acciaio, increspature sull’acqua , o ciottoli in calcestruzzo.
Esempi più avanzati di programmi shader personalizzati comprendono bump mapping, normal mapping, ombre e la mappatura di riflessione .

textureMapping3

OpenGL

OpenGL è lo standard dominante nella maggior parte delle piattaforme.
OpenGL è conosciuto per la sua stabilità e funzionalità architettonica.
Ci sono state diverse revisioni minori , cosi’come lo standard si è evoluto, ma solo una revisione importante , 2,0 .
Prima della versione 2.0 ,
OpenGL supportata solo vertex shading . La versione 2.0 aggiunge funzionalità pixel- shading .
OpenGL ha sempre richiesto supporto a virgola mobile , che di solito è disponibile su sistemi desktop .
OpenGL è essenzialmente una libreria di funzioni progettata  in modo che possano essere portate su
qualsiasi hardware grafico di accelerazione senza grandi modifiche al codice dell’applicazione che ne utilizza queste funzioni .
Questa libreria di funzioni è contenuta all’interno di un driver di dispositivo noto come Client Driver.
Quindi ,implementazioni OpenGL  sono spesso indicate come ” driver ” o “librerie” .
Uno dei grandi punti di forza di OpenGL è l’abbondanza di risorse di qualità per imparare
ad usarlo, tra cui libri, tutorial, esempi di codifica on-line e classi . In particolare ,
ci sono due libri fondamentali che ogni sviluppatore dovrebbe avere come punto di partenza (  – spessoindicati come i libri di rosso e blu) .
Questi sono :
a) il manuale ufficiale di OpenGL di riferimento
b) la Guida di programmazione:
Le specifiche complete per OpenGL sono inoltre a disposizione del pubblico presso : http://www.opengl.org/
Questi sono grandi risorse di riferimento e per l’apprendimento di OpenGL durante lo sviluppo.

To be continued ….

 

Anche se può sembrare strano non è sempre semplice stabilire se una particolare applicazione è davvero implementata con grafica 3D , o se è fatta con un uso intelligente della grafica 2D.
Ad esempio, le icone che appaiono a girare in 3D sono spesso raggiunti su un 2D.
Il piu delle volte le applicazioni grafiche ( anche sofisticate) sono realizzate con una sapiente combinazione di grafica 2D e 3D.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...