Pipeline grafica: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Botcrux (discussione | contributi)
m Bot: Aggiungo template {{interprogetto}} (FAQ)
Davi.trip (discussione | contributi)
Espansione, correzione e aggiunta di fonti e bibliografia
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-buffering]], il [[reyes rendering]], [[ray tracing]] e altri algoritmi.
{{F|computer grafica|febbraio 2014}}
Una '''pipeline grafica''', nella computer grafica tridimensionale, è una [[pipeline dati]] designata alla trasformazione dei modelli tridimensionali del mondo in immagini [[bitmap]] bidimensionali.
 
== Pipeline grafica 3D di base ==
Per realizzare l'[[immagine bitmap]] la pipeline può implementare uno o più algoritmi come lo [[Z-buffering]], il [[reyes rendering]] e il [[ray tracing]] e altri algoritmi.
[[File:Graphicspipeline-fig1.png|miniatura|336x336px|Fig.1 - Sistemi di coordinate 3D e terminologia]]
Qualsiasi utilizzo significativo del computer dedicato allo studio della geometria, implica che noi vogliamo infine visualizzare degli oggetti su un dispositivo grafico. La figura 1 mostra alcune terminologie standard per il primo step di una pipeline grafica tridimensionale, che conduce 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 visivo (''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 visivo e la sistema di coordinate della camera. Il guardare 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 visivo 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 dentro il volume di visualizzazione 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 ricerca di quelle parti di un oggetto è riferito al '''[[clipping]]'''. Per 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 visivo 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" />
 
Lo step 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 in coordinate del dispositivo fisico. A volte il logical screen è già definito in termini di queste coordinate, così 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 pipeline grafica 3D di base può quindi essere riassunta come mostrato nella figura 2.
[[File:Graphicspipeline fig2.png|centro|miniatura|844x844px|Fig.2 - La pipeline grafica 3D di base]]
 
== Implementazioni ==
[[File:Pipeline OpenGL.svg|thumb|upright=1.4|Pipeline OpenGL|429x429px]]
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 diverse pipeline grafiche più o meno avanzate. Sebbene esistano molte implementazioni di una pipeline grafica tutte queste implementazioni suddividono il lavoro in quattro operazioni principali:
 
* [[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.
**[[Ombreggiatura]] (Lighting ande shading (Illumination)Shading): in questa fase vengono calcolati i colori e i riflessi degli oggetti tenendo conto delle proprietà dei singoli poligoni e delle luci incidenti e riflesse.
*[[Proiezione (geometria)|Proiezione]]: L'immagine 3d3D è proiettata sulla superficie 2d2D.
*[[Rasterizzazione]] o Scan Conversion: La scena è convertita da un insieme di vertici ad un insieme di pixels ([[bitmap]] o immagine [[raster]]).
 
== 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 utilizzate le librerie grafiche sebbene queste introducano una leggera penalizzazione delle prestazioni permettano al programma di sfruttare le schede grafiche in commercio senza dover scrivere una versione apposita del programma per ogni tipologia di scheda grafica. Le più diffuse librerie grafiche tridimensionali sono [[OpenGL]] e [[DirectX]].
 
== Schema di funzionamento ==
{{Galleria
Un ipotetico processo di funzionamento potrebbe essere il seguente:
|larghezza=200
|titolo=Pipeline grafica 3D ipotetica
|align=right
|sfondo=
|bordo=grey
|Immagine:Vertex-shader-pipeline-simple.png|
|Immagine:Tessellation-shader-pipeline-simple.png|
|Immagine:Geometry-shader-pipeline-simple.png|
|Immagine:Fragment-shader-pipeline-simple.png|
}}
 
Un ipotetico processo di funzionamento 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
Line 28 ⟶ 46:
# 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.
 
== Note ==
<references />
 
== Bibliografia ==
* [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 ==