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].

Esempio di grafica raster
Esempio di grafica raster

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]:

DescrizioneModifica

 
Oggetto 3D rasterizzato

L'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 3DModifica

La 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 triangoloModifica

Una 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]:

  1. 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
  2. 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]:

 
Regola di rasterizzazione top-left
  1. il suo centro giace completamente all'interno del triangolo. o
  2. 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àModifica

 
Esempio di antialiasing

La 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].

NoteModifica

  1. ^ Michael F. Worboys, GIS: A Computer Science Perspective, CRC Press, 30 ottobre 1995, pp. 232–, ISBN 978-0-7484-0065-2.
  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.
  3. ^ (EN) mayankjtp, Line Drawing Algorithm in Computer Graphics, su Tutorial And Example, 20 febbraio 2020. URL consultato il 31 ottobre 2021.
  4. ^ Daroko blog(www.professionalbloggertricks.com), bresenham circles and polygons in computer graphics(Computer graphics…, 27 luglio 2014. URL consultato il 31 ottobre 2021.
  5. ^ Scratchapixel, Rasterization: a Practical Implementation, su Scratchapixel. URL consultato il 31 ottobre 2021.
  6. ^ etymonline.com.
  7. ^ Charlton T. Lewis, Charles Short, A Latin Dictionary, rastrum, su perseus.tufts.edu. URL consultato il 31 ottobre 2021.
  8. ^ cg.ivd.kit.edu (PDF).
  9. ^ (EN) Triangle rasterization in practice, su The ryg blog, 9 febbraio 2013. URL consultato il 31 ottobre 2021.
  10. ^ Rasterization: a Practical Implementation (The Rasterization Stage), su scratchapixel.com. URL consultato il 31 ottobre 2021.
  11. ^ doc.ic.ac.uk (PDF).
  12. ^ (EN) stevewhims, Rasterization Rules - Win32 apps, su docs.microsoft.com. URL consultato il 31 ottobre 2021.
  13. ^ (EN) Rasterisation, in Wikipedia, 16 ottobre 2021. URL consultato il 31 ottobre 2021.
  14. ^ (EN) stevewhims, Rasterization Rules (Direct3D 9) - Win32 apps, su docs.microsoft.com. URL consultato il 31 ottobre 2021.
  15. ^ khronos.org (PDF).
  16. ^ (EN) Daniel De Matteis, Mednafen/Beetle PSX – PGXP arrives! – Libretro, su libretro.com. URL consultato il 31 ottobre 2021.

Voci correlateModifica

Altri progettiModifica