1.1.
Prefazione
Questo sarà sicuramente
uno dei più aggiornati Percorsi Web perchè tratta
un argomento di enormi proporzioni ed in continua evoluzione.
Inoltre traendo informazioni dalle risorse qui elencate si
svilupperà il KnowledgeBase di Lithium sulla Grafica
3D e l'accelerazione Hardware.
L'argomento è molto ampio ed annovera decine
di sotto specializzazioni. Per fornire uno strumento utile
è quindi necessario procedere ad una migliore definizione
di intenti. Il percorso si pone l'obbiettivo di catalogare
risorse web che "spiegano" i principi della grafica
3D e della moderna accelerazione hardware. Passeranno quindi
in secondo alcuni argomenti che in generale non hanno (ancora)
a che fare con il real time rendering (es: ray-tracing e global-illumination).
Purtroppo la maggior parte del materiale trovato è
in lingua inglese e tratta molto spesso un solo argomento
specifico. E' per questa carenza di materiale di qualità
in lingua italiana che abbiamo deciso di iniziare al più
presto una serie di articoli approfonditi sui principi della
grafica 3D.
Nel corso dell'articolo parleremo spesso usando termini
tecnici quindi a supporto della lettura vi consigliamo i seguenti
glossari:
-http://www.3ditalia.com/tecnica/termini3d/a.asp
Ottimo glossario 3D in lingua Italiana presente sul sito
3DItalia.
-http://www.geocities.com/ResearchTriangle/Lab/1767/pol.html
Glossario in lingua inglese, interessante perchè approfondisce
alcuni argomenti con esempi algoritmici.
Per chi non lo avesse già fatto, consigliamo
anche di leggere il nostro Dossier sulle schede 3D della 5°
generazione: http://www.lithium.it/articolo.asp?code=22
1.2. La Pipeline di rendering
Alla base di tutta l'elaborazione
grafica 3D vi è la "pipeline di rendering"
ossia l'insieme di operazioni e stadi di elaborazione che
uno dopo l'altro concorrono alla creazione dell'immagine finale
e/o dell'animazione. In realtà non esiste un metodo
unico per portare a termine il compito ma tipicamente ci sono
delle funzioni imprescindibili comuni a tutte le filosofie
di rendering.
Una prima classificazione delle "filosofie"
di rendering impone una divisione tra tecniche di tipo scan-line
e tecniche di tipo ray-tracing. La prima pone l'accento sul
triangolo, primitiva fondamentale, che viene elaborato, trasformato,
proiettato e quindi renderizzato sullo schermo. La secondo
invece pone l'accento sul "raggio di luce" ossia
ricostruisce la scena seguendo a ritroso (partendo cioè
dall'occhio dell'osservatore verso gli oggetti e da li verso
le luci) il cammino dei raggi di luce che illuminano la scena.
Il Ray-tracing ha molti pregi ma è molto difficile
ed oneroso da integrare in un chip 3D per l'accelerazione
Hardware quindi principalmente parleremo delle tecniche di
tipo scan-line.
Non ci sono molti articoli on-line che analizzano la
pipe-line in modo comprensibile ed accessibile. ExtremeTech
ha però sicuramente centrato l'obbiettivo con una serie
di 3 articoli che introducono la Pipeline di rendering 3D
per poi approfondirne diversi aspetti:
3D Pipeline, parte 1:
-http://www.extremetech.com/article/0,3396,s%253D1017%2526a.asp
3D Pipeline, parte 2:
-http://www.extremetech.com/article/0,3396,s%253D1017%2526a.asp
3D Pipeline, parte 3:
-http://www.extremetech.com/article/0,3396,s%253D1017%2526a.asp
Eccellente anche
questa serie di note sulla pipeline di rendering Open-GL:
-http://www.opengl.org/developers/code/sig99/advanced99/
Una semplice introduzione al 3D
la troviamo anche sul sito Intel:
-http://developer.intel.com/technology/3d/docs/index.htm
1.3. Operazioni di manipolazione geometrica (Transform)
La prima operazione
da compiere è quella di manipolazione geometrica. In
primo luogo è opportuno scegliere un adeguato sistema
di coordinate e riferire ad esso la geometria. In realtà
i sistemi di riferimento sono molti: l'Object Space
è il sistema di riferimento in base al quale viene
descritta la geometria del singolo oggetto, il World Space
è invece il sistema di riferimento in cui vengono inseriti
gli oggetti per formare la scena, Il Viewer Space è
il riferimento centrato nel punto di vista dell'osservatore,
lo Screen Space è lo spazio 2D del monitor e
così via...Le trasformazioni geometriche servono in
pratica ad animare i modelli e a trasformare i triangoli da
uno spazio ad un'altro.
Su Flipcode trovate un'introduzione ai principi delle
geometria analitica e i suoi utilizzi in CG: http://www.flipcode.com/geometry/
Questi altri due link spiegano come OpenGL tratta le
geometrie in termini di formati, spazi di riferimento, trasformazioni
e proiezioni:
-http://www.opengl.org/developers/code/sig99/advanced99/
-http://ask.ii.uib.no/ebt-bin/nph-dweb/dynaweb/SGI_Developer/
Vi
segnaliamo ovviamente anche due articoli apparsi su Lithium
che spiegano le operazioni di Trasform&Lighting con particolare
riferimento alle schede 3D dell'ultima generazione:
-http://www.lithium.it/articolo.asp?code=37
1.4.
Tecniche di Shading
Una volta proiettati i triangoli
sullo schermo è giunto il momento di "colorarli".
La fase di shading si compone
di vari passi i due più importanti sono il Texture
Mapping nel quale si applica una immagine al triangolo
che ne descrive il materiale e l'illuminazione (da notare
che stiamo volutamente semplificando lo scenario).
Una introduzione allo shading in lingua italiana
la trovate su nVItalia.com:
-http://www.nvitalia.com/articoli/glossario_3d/glossario_1_intro.htm
-http://www.nvitalia.com/articoli/glossario_3d/glossario_2_intro.htm
Così come nei link precedentemente citati.
1.5.
Il Texture Mapping
Il Texture Mapping riveste un ruolo
fondamentale nella corsa al fotorealismo. Senza texture mapping
la grafica risulta vuota e irrealistica. Il princio del Texture
Mapping è poi alla base di tutta una serie di effetti
come il Bump Mapping, il reflaction Mapping, le light map,
le shadow map, nei quali la texture è usata per applicare
"proprietà" alla superficie e non banalmente
colore.
Qui vengono spiegate le basi del Perspective Correct
Texture Mapping:
-http://www.d6.com/users/checker/misctech.htm
Ancora sulle Texture e sulla loro compressione.
-http://www.beyond3d.com//articles/texturing/index1.php
-http://www.reactorcritical.com/compare-compression/compare-
compression.shtml
Cenni alle Texture 3D:
-http://www.nvitalia.com/articoli/textures_3d_file/textures_3d_0.htm
1.6.
L'Anti-Aliasing
L'Anti-aliasing è quell'insieme
di tecniche che permette la riduzione delle scalettature nelle
immagini 3D. Premesso che una immagine ad altissima risoluzione
non avrebbe scalettature visibili dall'occhio umano, le normali
risoluzioni dei monitor producono un antiestetico effetto
ai bordi dei triangoli. Per eliminarlo è necessario
attivare una procedura più o meno onerosa. Il principio
base è quello del sovra campionamento.
Questo articolo di nVItalia spiega i concetti base
dell' Antialiasing:
-http://www.nvitalia.com/articoli/glossario_3d/glossario_3_intro.htm
2.1.
Superfici curve
Le gestione delle superfici
curve è certamente un argomento avanzato che solo di
recente è entrato a far parte delle features accelerabili
in hardware tramite chip 3D di livello consumer.
Per prima cosa nel nostro KnowledgeBase è presente
un bell'articolo dedicato all'argomento: http://www.lithium.it/articolo.asp?code=39
Se non bastasse vi segnaliamo questi altri due articoli
introduttivi:
-http://www.flipcode.com/tpractice/issue03.shtml
-http://www.flipcode.com/tpractice/issue04.shtml
Anche il Subdivision Surface può servire a gestire
superfici curve:
-http://www.multires.caltech.edu/teaching/courses/subdivision/
2.2.
Anisotropic Filtering
Nei mesi che verranno l'Anisotropic
Filtering assumerà un ruolo sempre più importante,
di fatti si tratta di uno schema di filtraggio che permette
di migliorare notevolmente la resa delle texture che sono
disposte orizzontalmente (o quasi) rispetto all'osservatore.
L'accoppiata dell'Anisotropic con tecniche di AntiAliasing
di tipo adattivo (che funzionano solo sui bordi) rappresenta
attualmente la soluzione che garantisce la migliore resa complessiva.
Qui vengono spiegati i principi dell'Anisotropic Filtering
-http://home.swipnet.se/~w-12597/3dxtc/articles/anisotropic.htm
Qui invece dell'accoppiata AA + Anisotropic, con esempi
concreti:
-http://www.nvnews.net/previews/geforce3/anisotropic.shtml
2.3.
Tile Based Rendering - HSR - Occlusion Culling
Per risolvere il problema
delle superfici nascoste sono state definite diverse tecniche
tra cui il il TBR e l'Occlusion Culling.
Qui su Lithium.it abbiamo già parlato approfonditamente
di questo argomento in questo articolo:
http://www.lithium.it/articolo.asp?code=40
Qui invece trovate un completo articolo di AcesHardware
che spiega come funziona il TBR delle schede Kyro:
-http://www.aceshardware.com/read.jsp?id=10000160
E Qui si parla di Occlusion Culling:
-http://www.nvnews.net/previews/geforce3/occlusion_culling.shtml
In
conclusione, per gli amanti dei dettagli implementativi, vi
consigliamo un articolo che spiega tutte le innovazioni introdotte
a suo tempo dal motore di Quake: -http://www.bluesnews.com/abrash/
Quanti
FPS riesce a vedere l'occhio? e che vantaggio si ha ad avere
un FPS molto alto ? Queste sono le tipiche domande a cui poi
non è così facile rispondere. In questo articolo
si tenta di farlo:
-http://www.penstarsys.com/editor/30v60/30v60p1.htm