giovedì 30 giugno 2011

30 gloriosi anni di 3D

Qualche giorno fa mi è capitato di leggere la storia di un appassionato d'informatica che ripercorreva gli anni della sua originaria esperienza con le macchine Commodore. Egli nel trattare l'evoluzione della "specie" ricorreva non solo alla descrizione dell'hardware, del software e dei vari Giochi d'annata, ma in particolare riferendosi a una loro piccola categoria: il videogame in Grafica 3D.
Ormai da anni per videogame si intende genericamente qualcosa di simile a questo:


Beh a beneficio dei più giovani in ascolto nati in piena epoca Playstation, diciamo che il gioco in grafica 3D esiste da quasi 30 anni!
Ebbene si, il fascino di un ambiente 3D navigabile è stato forte fin dagli albori degli home computer dove una forte dose d'immaginazione permetteva ai ragazzini dell'epoca di vedere un castello in 5 parallelepipedi, e mondi fantastici in poche linee... Questo video illustra abbastanza bene ciò che intendo dire.

Quindi è possibile compiere un interessante viaggio partendo dal glorioso C=64 fino a giungere alle attuali tecnologie, soffermandoci maggiormente sull'iniziale evoluzione della grafica 3D in tempo reale.

Un'immagine come la seguente oggi risulta quasi incomprensibile:


Questa è infatti tratta da un primordiale gioco 3D facente uso della tecnica grafica chiamata wire frame (fil di ferro). E anche in movimento la sua visione non migliora tantissimo in quanto la struttura di un elementare poliedro in wire frame, rappresentato su uno schermo bidimensionale (senza quindi una percezione di profondità), può essere vista in modo distorto o con un'orientazione falsata, e basta infatti osservare qualche secondo questa immagine per vederla "cambiare" da un cubo a un solido non simmetrico.

 
La grafica in wire frame era la più semplice, immediata e leggera soluzione in assoluto, essa infatti comportava il solo calcolo della posizione su schermo dei vertici di un poliedro mediante un algoritmo di facile programmazione basato sulle regole del disegno prospettico. Un oggetto 3D era definito quindi come l'insieme delle coordinate dei suoi vertici sapendo ad esempio che un cubo (8 vertici) avrebbe comportato il disegno di 12 linee spigoli.
Per ovviare a uno scarso senso di realismo venne successivamente introdotta la grafica poligonale solida, in cui le superfici degli oggetti 3D venivano "riempite" e rappresentate con dei quadrilateri o triangoli bitmap in 2D, disegnati in modo da nascondere all'osservatore le facce dietro a quelle immediatamente visibili...




Come si vede nonostante la risoluzione e il numero di colori restasse invariato trattandosi della medesima macchina, il C=64, l'immagine appare più chiara e comprensibile. Il prezzo da pagare era però la notevole lentezza dell'intero processo di rendering, infatti con un processore di circa 1Mhz era possibile sperare in un frame rate tra 1 e 2 fps... una tragedia si potrebbe pensare oggi, ed invece essendo a quel tempo delle tecniche nuove e moderne lasciavano sbalorditi indipendentemente dalla loro lentezza, ed era possibile giocarci tranquillamente.
Per tanto il carico del lavoro in questo genere di elaborazione prospettica di un "mondo" tridimensionale gravava prevalentemente sull'unica componente del computer deputata ad effettuare i calcoli necessari, la CPU.

Con il passaggio ai 16 bit di Amiga e alla famiglia di Cpu Motorola 68000 con un clock di 7Mhz si iniziò a vedere una grafica 3D molto più efficace e dettagliata, grazie anche all'ottimizzazione delle varie tecniche fino ad allora studiate e all'unione della grafica poligonale con i classici Sprite e Bitmap gestiti dai coprocessori (Video 1, Video 2)

Quindi tra gli obiettivi raggiunti grazie alle nuove tecnologie introdotte da Amiga, avevamo un frame rate più alto, un maggior dettaglio, e l'inizio di una fusione tra Grafica 3D e Bitmap che avrebbe da li a qualche anno creato una svolta epocale. Infatti negli anni successivi il crescente interesse per questo tipo di giochi rispetto ai classici 2D ancora dominanti, trovò il supporto di Cpu sempre più potenti... sino a veder nascere delle schede di espansione appositamente progettate per l'accelerazione grafica 3D, segnando così l'esordio di quel binario evolutivo che avrebbe condotto direttamente a quello che oggi ben conosciamo.

Per aumentare il dettaglio dei modelli e dell'ambiente 3D in grafica poligonale solida non si pensò solo ad incrementarne la complessità con un numero maggiore sia di vertici che delle relative superfici (poligoni), ma iniziarono a saltar fuori una serie di soluzioni ingegnose e molto diverse tra loro.
Un primo passo fu quello d'introdurre una fonte luminosa e definire il colore delle superfici degli oggetti in grafica poligonale solida anche in considerazione di questo nuovo parametro (Video)

In seguito all'introduzione di semplici sistemi d'illuminazione si adottò anche un algoritmo più complesso e d'effetto per arrotondare gli spigoli dei modelli 3D conferendo ad essi un'ombreggiatura/sfumatura abbastanza realistica, chiamata Gouraud Shading:


Una diversa evoluzione ma di più grande impatto fu infine il texture mapping, tecnica con la quale ai poligoni veniva "cucita" un'immagine 2D (texture)  e quindi mostrata coerentemente in prospettiva dando l'illusione di un dettaglio molto superiore e fluidamente in moto.


Queste nuove tecnologie grafiche 3D in real time ebbero un'impennata evolutiva grazie soprattutto ai Pc X86, alle loro CPU più potenti e al loro sistema grafico Vga che adottava una modalità Chunky diversa da quella Planar di Amiga (più dispendiosa per questo genere di lavoro...in rete esistono varie e dettagliate spiegazioni tecniche sull'argomento).
Quindi la mancata introduzione di un nuovo chipset, che era comunque in progettazione da C=, tagliò notevolmente le gambe ad Amiga... che tuttavia per alcuni anni, grazie all'ausilio di schede acceleratrici con processori 68k più potenti, ha comunque potuto godere di alcuni titoli 3D molto famosi tra gli ex amighisti come Alien Breed 3D e Breathless; ma niente di lontanamente paragonabile alla rivoluzione che ormai era in atto sia sui Pc che nelle Console da gioco casalinghe (Saturn, Psx, N64).
L'inizio di una deriva tecnologica dovuta alla mancanza di un casa madre comportò per Amiga l'immediata perdita del ruolo, economicamente cruciale, di piattaforma simbolo per il gaming e quindi la migrazione di gran parte di utenza (e soprattutto sviluppatori) verso altri lidi. La successiva possibilità di poter montare anche su Amiga delle schede grafiche e Cpu PPC e nonché integrando nel sistema operativo AmigaOs 3.x opportuni driver e routine software per sfruttarne l'accelerazione 3D, non servì a colmare un Gap che al contrario aumentava costantemente sino a divenire rapidamente abissale.

L'emulazione è il metodo che più consiglio per esplorare oggi il 3D più avanzato programmato per Amiga, e in particolar modo l'emulatore gratuito per Windows WinUae che grazie a una compilazione Jit emula una Cpu 68k diverse decine di volte più veloce dell'esecuzione reale sulle cpu 68k più potenti come il 68060.
Dove le macchine C= si arrestarono iniziò quindi una rapidissima rincorsa tecnologica all'effetto grafico 3D più realistico e all'hardware più potente, fino all'introduzione del pixel shader e a un resa finale tendente al fotorealismo come quella dei videogiochi attuali.