Pipeline grafica: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m interwiki |
m Corretto il collegamento Raster con Grafica raster (DisamAssist) |
||
(43 versioni intermedie di 32 utenti non mostrate) | |||
Riga 1:
Una '''pipeline grafica''', nella [[computer grafica 3D]], è una sequenza di operazioni atte a restituire e aggiornare un'[[Grafica raster|immagine bitmap]], partendo dagli oggetti tridimensionali presenti nella scena.<ref>{{Cita libro|autore=Marshner, Shirley|titolo=Fundamentals of Computer Graphics|edizione=4|anno=|editore=|città=|p=|pp=|ISBN=}}</ref> Per realizzare l'immagine bitmap la pipeline può implementare uno o più algoritmi come lo [[z-buffer|z-buffering]], il reyes rendering, [[ray tracing]] e altri algoritmi.
{{stub informatica}}▼
== Pipeline grafica 3D classica ==
[[File:Graphicspipeline-fig1.png|thumb|upright=1.4|Fig.1 - Sistemi di coordinate 3D e terminologia]]
Qualsiasi utilizzo significativo del computer dedicato allo studio della geometria, implica il volere infine visualizzare degli oggetti su un dispositivo grafico. La figura 1 mostra alcune terminologie standard per il primo passo di una classica pipeline grafica tridimensionale, che giunge dalla rappresentazione matematica di un oggetto in <math>R^3</math> alla propria immagine sul dispositivo.<ref name=":0">{{Cita libro|autore=Max K. Agoston|titolo=Computer Graphics & Geometric Modeling - Implementarion & Algorithms|anno=|editore=|città=|p=|pp=|ISBN=}}</ref> Gli oggetti nel mondo sono descritti dall'utente in riferimento a un sistema di coordinate del mondo (''world coordinate system''). Il mondo è poi proiettato su un piano di visualizzazione (''view plan'') da un dato punto di vista (''viewpoint''), che supporremo sia la posizione di una ''camera'' o dell'occhio. Abbiamo un'associazione fra il piano di visualizzazione e il sistema di coordinate della camera. Ciò che viene visto dal punto di vista lungo l'asse z positivo del sistema di coordinate della camera, specifica la direzione della vista (''view direction''). Una finestra (''window'') nel piano di visualizzazione specifica l'area di interesse. Il volume di visualizzazione o la piramide di visualizzazione è l'infinito volume tracciato dai raggi che partono dal punto di vista e passanti attraverso i punti della finestra.
Per limitare l'output degli oggetti, si può usare spesso un vicino (''near'', ''front'', o ''hither'') e un lontano (''far'', ''back'', o ''yon'') ''piano di clipping''.<ref name=":0" /> Il volume che si trova all'interno del volume di visualizzazione e fra questi due piani è chiamato volume di visualizzazione troncato o piramide di visualizzazione troncata. Solo quelle parti degli oggetti che giacciono in questo volume e che vengono proiettate nella finestra, saranno visualizzate. La determinazione di quelle parti di un oggetto è detta [[clipping]]. In linea di principio, i sistemi di coordinate - del mondo, della camera, e del piano visivo - possono essere distinti. In pratica, tuttavia, si assume che gli assi di coordinate della camera e il sistema di coordinate del piano di visualizzazione siano paralleli e che gli assi z siano perpendicolari al piano visivo.<ref name=":0" /> Si assume anche che i loro assi x e y siano paralleli ai lati della finestra.<ref name=":0" />
La pipeline può essere realizzata in [[software]] o in [[hardware]] sebbene per questioni di velocità e di prestazioni tutte le moderne [[scheda grafica|schede grafiche]] dispongono di una pipeline grafica più o meno avanzata. Sebbene esistano molte implementazioni di una pipeline grafica tutte queste implementazioni suddividono il lavoro in quattro operazioni principali:▼
Il passo finale nel mappare un oggetto a un dispositivo grafico, comporta una mappatura che trasforma le coordinate del piano visivo in coordinate del dispositivo fisico.<ref name=":0" /> Questo è generalmente pensato come un processo a due fasi. Inizialmente, una prima mappa trasforma la finestra in una ''viewport'' (che è un sotto-rettangolo di un rettangolo fisso chiamato ''logical screen'') e dopo una seconda mappa trasforma le coordinate del logical screen nelle coordinate del dispositivo fisico. A volte il logical screen è già definito in termini di queste coordinate, così che la seconda mappa non è necessaria. Altre volte, esso è posto uguale a un rettangolo fisso come per esempio il [[quadrato unitario]] <math>[0,1]\times [0,1]</math>, nel cui caso possiamo dire che la viewport è specificata in coordinate di dispositivo normalizzate (''normalized device coordinates'', NDC). La classica pipeline grafica 3D può quindi essere riassunta come mostrato nella figura 3.
[[File:Graphicspipeline fig3.png|thumb|upright=1.4|Fig.2 - Pipeline finestra-dispositivo]]
* Luci e ombre: Durante questa fase vengono calcolati i colori e i riflessi degli oggetti tenendo conto delle proprietà dei singoli poligono e delle luci incidenti e riflesse▼
Attenzione: la distinzione fra "finestra" e "viewport" è spesso sfocata, e a volte, ciò che dovrebbe essere chiamato viewport viene chiamato finestra. La finestra specifica che <u>cosa</u> viene visto nelle coordinate utente, e la viewport specifica <u>dove</u> quel qualcosa viene visualizzato.<ref name=":0" /> Vedi la figura 2.
[[File:Graphicspipeline fig2.png|thumb|center|upright=3.4|Fig.3 - La pipeline grafica 3D di base]]
▲La pipeline può essere realizzata in [[software]] o in [[hardware]], sebbene per questioni di velocità e di prestazioni tutte le moderne [[scheda grafica|schede grafiche]]
* [[Modellazione 3D|Modellazione]]: Durante questa fase vengono generati, come insieme di vertici, gli oggetti da rappresentare; ad esempio linee, poligoni, punti.
* Elaborazione geometrica: In questa fase si attuano principalmente tre elaborazioni:
** Normalizzazione (o Viewing): ovvero l'adattamento delle coordinate degli oggetti a quelli della camera virtuale.
** [[Clipping]]: vengono rimosse tutte le parti degli oggetti non visibili, perché fuori dalla vista.
▲**
* [[Proiezione (geometria)|Proiezione]]: L'immagine 3D è proiettata sulla superficie 2D.
* [[Rasterizzazione]] o Scan Conversion: La scena è convertita da un insieme di vertici ad un insieme di pixels ([[bitmap]] o immagine [[Grafica raster|raster]]).
=== Esempio dei passaggi degli shader in una pipeline grafica ===
{{vedi anche|Shader}}
Un ipotetico processo di funzionamento, con all'interno gli shader, potrebbe essere il seguente<ref>{{Cita libro|autore=M. Bailey, S. Cunningham|titolo=Graphics Shaders: Theory and Practise|edizione=2|anno=|editore=|città=|p=|pp=|ISBN=}}</ref>:
# La [[CPU]] invia le istruzioni e le coordinate 3D della scena alla GPU
# Nel vertex shader programmabile viene trasformata la geometria e vengono applicati alcuni effetti di illuminazione
# Il geometry shader, se presente, trasforma ulteriormente la geometria della scena
# La geometria viene riprodotta in triangoli, che vengono ulteriormente trasformati in ''quad'' (ogni quad è una primitiva di 2x2 pixel)
# Vengono applicati ulteriori effetti tramite il pixel shader
# Viene effettuato il test di visibilità ([[z-test]]): se un pixel è visibile, viene scritto nel [[framebuffer]] per l'output su schermo.
== Gestione ==
La pipeline grafica può essere gestita direttamente dal programma tramite accesso diretto all'hardware o può essere gestita tramite librerie grafiche che forniscono delle primitive di manipolazione che vengono utilizzate dal programma.<ref name=":0" /> Nella maggior parte dei casi vengono
[[File:Pipeline OpenGL.svg|thumb|center|upright=2.2|Pipeline OpenGL]]
[[Categoria:Computer grafica]]▼
== Note ==
<references />
== Bibliografia ==
* Frank Luna, Introduction to 3D Game Programming with DirectX 11, 2011
* [http://lvelho.impa.br/i3d11/clip/00210494.pdf James F. Blinn. ''A Trip Down the Graphics Pipeline: The Homogeneous Perspective Transform''. IEEE Comput. Graph. Appl., 1993.]
* [https://pdfs.semanticscholar.org/d291/591afede09b1049be57e0d1e394017c3aecb.pdf?_ga=2.142054066.1876649047.1496773235-480852760.1496773235 Jonathan Ragan-Kelley, Jaakko Lehtinen, Jiawen Chen, Michael Doggett, and Frédo Durand. ''Decoupled sampling for graphics pipelines''. ACM Trans. Graph., May 2011.]
* [https://graphics.stanford.edu/papers/gramps-tog/gramps-tog09.pdf Jeremy Sugerman, Kayvon Fatahalian, Solomon Boulos, Kurt Akeley, and Pat Hanrahan. ''GRAMPS: A programming model for graphics pipelines''. ACM Trans. Graph., 2009.]
== Voci correlate ==
* [[Computer grafica 3D]]
* [[Shader]]
== Altri progetti ==
{{interprogetto|preposizione=sulla}}
|