ALGORITMI DI REAL TIME RENDERING

Uno dei problemi più interessanti in computer graphics e quello del rendering real time, con il quale si intende il processo di resa di un immagine a partire da una descrizione geometrica della scena tridimensionale in questione.

Rimuovere le linee nascoste

Uno dei sotto problemi e quello della determinazione della visibilità o no di una determinata linea e/o faccia. Per questo sono stati presentati diversi che sfruttano tutti il principio di ordinamento

Gli algoritmi in questione sono stati classificati in base allo spazio operativo

OBJECT SPACEIMAGE SPACE
La computazione viene effettuata sugli oggetti 3DLa computazione viene effettuata sull’immagine bidimensionale

Back face culling

Si applica a oggetti 3D convessi e consiste nella computazione della normale di un lato dell’oggetto, se questa e positiva allora la faccia non va disegnata

VANTAGGISVANTAGGI
Aumenta la velocità di rendering rimuovendo circa la metà delle facce, che quindi non verranno processateFunziona solo per superfici chiuse, convesse e senza buchi
Non serve l’ordinamento delle facceNon può essere considerato un vero algoritmo di Hidden Surfaces

Algoritmo del pittore

si ordinano i triangoli dal più lontano al più vicino secondo la distanza dall’osservatore e si rasterizzano in quest’ordine

VANTAGGISVANTAGGI
Si basa su un semplice agoritmo di ordinamento di poligoniE’ difficile definire un criterio di ordinamento
Ridisegna i pixel tante volte
l’ordinamento puo essere costoso

Visibility buffer

Si basa sul concetto di zona di visibilità, dopo aver riordinato i poligoni questi vengono disegnati e si tiene traccia della zona già ricoperta da altri poligoni

VANTAGGISVANTAGGI
Si basa su un semplice algoritmo di ordinamento di poligonidifficile stabilire l’ordinamento
Ogni pixel viene disegnato una sola voltal’ordinamento può essere costoso
maggiore uso della memoria per via della regione di visibilità

Algoritmo z-buffer

E’ l’algoritmo implementato dalle GPU moderne, lavora in image space e si basa su un estensione del frame buffer chiamata z-buffer

A seguito della trasformazione di vista si rasterizza la faccia e per ogni pixel viene presa in considerazione la distanza Z, se questa e minore di quanto presente nello z buffer si disegna il pixel e si aggiorna lo z-buffer di conseguenza

sequenceDiagram
participant algorithm
participant frame_buffer
participant z_buffer
loop face pixels
algorithm ->> algorithm: computa la profondita
algorithm ->> z_buffer: check se la profondita e minore di quanto presente nel buffer
alt Z<0
algorithm ->> frame_buffer: si colora il pixel nel frame buffer
algorithm ->> z_buffer: aggiorna lo z-buffer
end
end

che in pseudo-codice si traduce come segue

void zbuffer() {
	for (y = 0; y < Vymax; y++)
		for(x = 0; x < Vxmax; x++) {
			FrameBuffer(x,y) = BACK_Col;
			ZBuffer(x,y,INF_Val);
		}
		for (every triangle)
			for (all pixel (px,py) of the projected triangle) {
			pZ = computeZ(px,py);
			if (pZ < ZBuffer(px,py)){
				FrameBuffer(px,py) = computeColor(px,py);
				ZBuffer(px,py) = pZ;
			}
		}
	}
}
VANTAGGISVANTAGGI
Non prevede alcun ordinamento, infatti il colore di un pixel e’ determinato dal punto 3D (di Ze minore) di cui lui e’ immagineRichiede spazio di memoria aggiuntivo
Semplice da implementareancora una sorta di ridisegno anche se solo in memoria (copia del frame buffer)

PREVIOUS NEXT