Motori-grafici-3D

Origini e sviluppo dei Motori Grafici 3D

Origini e sviluppo dei Motori Grafici 3D: la grafica 3D è diventata familiare a tutti e non soltanto agli addetti ai lavori, un termine comune di vita quotidiana, come la rivoluzione nel mondo cinematofrafico, televisivo in 3D. La grafica 3D  da ruolo di nicchia e conosciuta in ambiti strettamente professionali,  negli anni sessanta – ottanta, fino a diventare indispensabile e in continuo sviluppo per il mercato globale: intrattenimento televisivo, videogiochi, cinema, automotive, design, ingegnerizzazione, architettura.

La grafica 3D è diventata la struttura base di innumerevoli sistemi di supporto alle persone: il settore della simulazione, largamente sfruttata per scopi educativi, il campo medico, in cui avanzati sensori trasmettono dati ad un sistema che elabora in tempo reale un’immagine corrispondente alla realtà.

Elon Musk ha usato il videogame del 1970 Pong come prova che il mondo in cui viviamo è solo una simulazione al computer molto dettagliata. Infatti i miglioramenti grafici degli ultimi anni dimostrerebbero che la possibilità di creare un mondo virtuale indistinguibile da quello reale sono elevate. Basterebbe questo per capire come la grafica 3D è in continua evoluzione grazie ad algoritmi sempre più sofisticati e all’intelligenza artificiale. Un giorno potremmo arrivare a non distinguere un manufatto reale da un manufatto irreale?

Origini e sviluppo dei Motori Grafici 3D: oltre alla  nascita di nuovi algoritmi applicabili alla grafica 3D,  nel corso degli anni si è vista crescere enormemente la potenza computazionale e  di calcolo di macchine hardware e software dedicate all’elaborazione grafica.

A partire dal 1984, vengono realizzati i primi sistemi grafici tridimensionali in real-time, cioè, grazie alla potenza computazionale e di software costruiti con nuovi algoritmi,  le immagini vengono elaborate e presentate  con una velocità per frame, tale da fornire l’illusione del movimento. Il parametro di misura è il frame rate, ossia quanti fotogrammi chiave dell’immagine vengono riprodotti e visualizzati al secondo. l’unità di misura sono gli hertz [Hz], anche se nella computer grafica si utilizza come unità di misura i frame per secondo (fps). Nel campo cinematografico tale valore è costante e standardizzato, e si aggira sui 25 fps, nei calcolatori è variabile:  dipende dalla complessità della scena che si intende visualizzare, dall’ efficienza degli algoritmi utilizzati, della resa grafica desiderata e dalla potenza computazionale della macchina.

La percezione del movimento si ottiene con un valore minimo di 30 fps, è compito del progettista grafico garantire tale valore in ogni situazione e su ogni macchina. Siccome le immagini prodotte da un calcolatore risultano più “fredde”, allora la soglia minima si sposta dai 30 fps ad almeno 40-60 fps.

Un altro dato fondamentale è la resa grafica delle immagini. Nei sistemi di computer grafica 3D non real-time, le immagini vengono elaborate con un dettaglio grafico molto elevato, utilizzando accurati modelli di illuminazione e dettagliati modelli 3D, in pratica gli oggetti matematici che rappresentano il database di ogni scena.

Ciò non è mai possibile nei sistemi real-time. Infatti, nei sistemi real-time il tempo massimo concesso è 1/30, cioè circa 30 millisecondi.
Esistono quindi due famiglie di sistemi di generazioni di immagini:
Sistemi non real-time usati per produrre immagini ad altissima qualità in tempi dell’ordine di minuti/ore
Sistemi real-time usati per produrre immagini di qualità inferiore in tempi dell’ordine dei millisecondi. Bisogna dire che con l’evoluzione dei sistemi computazionali e nuovi algoritmi matematici applicati e le schede grafiche (GPU), motori grafici come Unity e soprattutto Unreal Engine, hanno qualità dell’immagine elevatissima.

Origini e sviluppo dei Motori Grafici 3D:  i sistemi per la produzione di immagini 3D fotorealistiche  utilizzano la tecnologia ray tracing:  il colore di ogni punto dell’immagine viene calcolato per interpolazione, tracciando un raggio vettore , che parte dal punto di osservazione di un actor e che interseca  il punto considerato e sono considerate tutte le interazioni con le superfici e luci presenti, compresi gli overlap e i black hall.

Nei sistemi real-time: i modelli visibili presenti nella scena, vengono renderizzati senza preoccuparsi di quale area nell’immagine finale occuperanno. Quest’ultimo approccio è detto world-to-screen, al contrario del primo approccio, denominato screen-to-world.

Nella seconda metà degli anni novanta, l’esperienza videoulica è cambiata grazie alla accelerazione hardware: la capacità di una periferica hardware, il cui chip è chiamato GPU (Graphics Processing Unit), di eseguire autonomamente tutti i pesanti calcoli concernenti la grafica 3D, sgravando completamente (o quasi) da ogni compito la CPU.

Prima delle schede acceleratrici, infatti, tutti i calcoli erano eseguiti dalla CPU, limitando fortemente le potenzialità di resa grafica;  i programmatori erano costretti ad utilizzare linguaggio assembler, per scrivere codice di basso livello, con il fine di utilizzare al massimo le possibilità della CPU.

I primi giochi 3D, come ad esempio DooM (1993), Quake (1996) o Unreal (1998), erano sviluppati su motori grafici definiti “software render” perchè  il rendering non era eseguito da un apposito hardware, ma  attraverso codice fortemente ottimizzato scritto dal programmatore stesso.

Un motore grafico è un sistema software composto, ossia parti del codice software sono scritte con la possibilità di essere riutilizzabili, il cui scopo è la visualizzazione ed eventualmente l’interazione di un ambiente tridimensionale (definito esternamente).

Verso la fine degli anni novanta, con l’introduzione nel mercato delle prime schede acceleratrici a costi accessibili, iniziò una nuova era per i  motori grafici in grado di sfruttare le enormi capacità di calcoli delle nuove GPU.

É interessante notare come le GPU contengano un numero di integrati più alto delle CPU, offrendo inoltre la possibilità di parallelizzare un elevato numero di calcoli, lavorando in thread.

Nei motori grafici accelerati, il sistema poggia su un set di API, procedure disponibili al programmatore utilizzabili per apposite procedure,  fornite da librerie come DirectX (di Microsoft) o OpenGL, comunicando con il driver che istruirà la GPU sulle operazioni richieste;  hanno lo scopo di rendere del tutto trasparente il substrato a basso livello messo a disposizione dalla GPU; in questo modo aumenta notevolmente la scalabilità e la portabilità del codice, semplificando il compito del programmatore.
Iniziamo un percorso per la costruzione di un motore grafico real-time  utilizzando la libreria DirectX nella versione 9.0c.

Non è l’ultima versione disponibile, ma è sufficiente, per gli scopi prefissati e per il carico di lavoro previsto per una singola persona. Inoltre la maggior parte dei  titoli disponibili  sono stati sviluppati con questa versione della libreria.
Applicazione (CPU) -> API (DirectX) -> Driver video ->GPU -> Output su video

In realtà questa simulazione nella costruzione di un motore grafico, ha l’obiettivo di conoscere al meglio i motori grafici e come funzionano. Lo sviluppo avverrà nei post successivi, dove verranno fornite anche le basi della matematica utilizzata, senza dimostrazioni e gli algoritmi sviluppati.

Visits: 292