Rasterizzazione
La rasterizzazione è il lavoro di conversione di un'immagine bidimensionale descritta da vettori (in grafica vettoriale), in un'immagine raster o bitmap, ovvero formata da pixel. Questo lavoro è effettuato sia per ottenere un'immagine proiettabile su dispositivi video, come i monitor, sia per la stampa[1].
Il problema principale è di doversi spostare da una descrizione lineare (ad esempio un segmento avente estremi p1 e p2) ad una discreta, ovvero i pixel dell'immagine raster. Questo ha comportato la creazione di vari algoritmi di rasterizzazione (o rastering), sia per oggetti semplici come le linee che per più complessi come i poligoni, ad esempio poligoni colorati internamente[2].
Tra i vari algoritmi troviamo[3][4]:
- Algoritmo di rasterizzazione di linea: trasforma una linea o un segmento.
- Algoritmo di rasterizzazione di poligono: trasforma un poligono.
Descrizione
modificaL'immagine rasterizzata può essere visualizzata su un display di computer, display video o stampante o archiviata in un formato di file bitmap. La rasterizzazione può riferirsi alla tecnica di disegno di modelli 3D o alla conversione di primitive di rendering 2D come poligoni, segmenti di linea in un formato rasterizzato[5].
Il termine deriva dal tedesco Raster ("quadro, schema"), dal latino rāstrum, "raschietto, rastrello"[6][7].
Rasterizzazione di immagini 3D
modificaLa rasterizzazione è una delle tecniche tipiche di rendering di modelli 3D. Rispetto ad altre tecniche di rendering come il ray tracing, la rasterizzazione è estremamente veloce e quindi utilizzata nella maggior parte dei motori 3D in tempo reale. Tuttavia, la rasterizzazione è semplicemente il processo di calcolo della mappatura dalla geometria della scena ai pixel e non prescrive un modo particolare per calcolare il colore di quei pixel. Il colore specifico di ogni pixel è assegnato dall'ombreggiatura (che nelle moderne GPU è completamente programmabile). L'ombreggiatura può essere basata su leggi fisiche, loro approssimazioni o intenti puramente artistici[8].
Rasterizzazione del triangolo
modificaUna rappresentazione comune dei modelli 3D digitali è la forma poligonale. Prima della rasterizzazione, i singoli poligoni vengono scomposti in triangoli, quindi un tipico problema da risolvere nella rasterizzazione 3D è la rasterizzazione di un triangolo. Le proprietà che di solito sono richieste dagli algoritmi di rasterizzazione dei triangoli sono la rasterizzazione di due triangoli adiacenti (cioè quelli che condividono un bordo)[9][10][11]:
- non lascia buchi (pixel non rasterizzati) tra i triangoli, in modo che l'area rasterizzata sia completamente riempita (proprio come la superficie dei triangoli adiacenti). e
- nessun pixel viene rasterizzato più di una volta, ovvero i triangoli rasterizzati non si sovrappongono. Questo per garantire che il risultato non dipenda dall'ordine in cui i triangoli sono rasterizzati. Sovrascrivere i pixel può anche significare sprecare potenza di calcolo su pixel che verrebbero sovrascritti.
Questo porta a stabilire regole di rasterizzazione per garantire le condizioni di cui sopra. Un insieme di tali regole è chiamato regola top-left[12], che afferma che un pixel viene rasterizzato se e solo se[13]:
- il suo centro giace completamente all'interno del triangolo. o
- il suo centro giace esattamente sul bordo del triangolo (o più bordi in caso di angoli) che è (o, in caso di angoli, tutti sono) bordo superiore o sinistro.
Un bordo superiore è un bordo che è esattamente orizzontale e si trova sopra gli altri bordi e un bordo sinistro è un bordo non orizzontale che si trova sul lato sinistro del triangolo.
Questa regola è implementata ad esempio da Direct3D e molte implementazioni OpenGL (anche se la specifica non la definisce e richiede solo una regola coerente)[14][15].
Qualità
modificaLa qualità della rasterizzazione può essere migliorata con l'antialiasing, che crea bordi "uniformi". La precisione sub-pixel è un metodo che tiene conto delle posizioni su una scala più fine rispetto alla griglia di pixel e può produrre risultati diversi anche se i punti finali di una primitiva cadono nelle stesse coordinate di pixel, producendo animazioni di movimento più fluide. Hardware semplice o meno recente, come PlayStation 1, mancava di precisione sub-pixel nella rasterizzazione 3D[16].
Note
modifica- ^ Michael F. Worboys, GIS: A Computer Science Perspective, CRC Press, 30 ottobre 1995, pp. 232–, ISBN 978-0-7484-0065-2.
- ^ Kang-Tsung Chang, Programming ArcObjects with VBA: A Task-Oriented Approach, Second Edition, CRC Press, 27 agosto 2007, pp. 91–, ISBN 978-1-4200-0918-7.
- ^ (EN) mayankjtp, Line Drawing Algorithm in Computer Graphics, su Tutorial And Example, 20 febbraio 2020. URL consultato il 31 ottobre 2021.
- ^ Daroko blog(www.professionalbloggertricks.com), bresenham circles and polygons in computer graphics(Computer graphics…, 27 luglio 2014. URL consultato il 31 ottobre 2021.
- ^ Scratchapixel, Rasterization: a Practical Implementation, su Scratchapixel. URL consultato il 31 ottobre 2021 (archiviato dall'url originale il 31 ottobre 2021).
- ^ etymonline.com.
- ^ Charlton T. Lewis, Charles Short, A Latin Dictionary, rastrum, su perseus.tufts.edu. URL consultato il 31 ottobre 2021.
- ^ cg.ivd.kit.edu (PDF).
- ^ (EN) Triangle rasterization in practice, su The ryg blog, 9 febbraio 2013. URL consultato il 31 ottobre 2021.
- ^ Rasterization: a Practical Implementation (The Rasterization Stage), su scratchapixel.com. URL consultato il 31 ottobre 2021.
- ^ doc.ic.ac.uk (PDF).
- ^ (EN) stevewhims, Rasterization Rules - Win32 apps, su docs.microsoft.com. URL consultato il 31 ottobre 2021.
- ^ (EN) Rasterisation, in Wikipedia, 16 ottobre 2021. URL consultato il 31 ottobre 2021.
- ^ (EN) stevewhims, Rasterization Rules (Direct3D 9) - Win32 apps, su docs.microsoft.com. URL consultato il 31 ottobre 2021.
- ^ khronos.org (PDF).
- ^ (EN) Daniel De Matteis, Mednafen/Beetle PSX – PGXP arrives! – Libretro, su libretro.com. URL consultato il 31 ottobre 2021.
Voci correlate
modificaAltri progetti
modifica- Wikimedia Commons contiene immagini o altri file sulla rasterizzazione