Quali sono i migliori consigli per OpenGL® Depth?

Il buffer di profondità OpenGL® è uno degli strumenti più fraintesi, complessi e in definitiva utili a disposizione di un programmatore di grafica tridimensionale (3D). Esistono diversi modi in cui il buffer può essere ottimizzato in modo da aumentare la frequenza dei fotogrammi per un programma, inclusa l’impostazione corretta dei piani di ritaglio vicino e lontano. Altri suggerimenti includono la cancellazione del buffer tra i rendering e l’evitare le composizioni di scene che possono causare problemi di profondità posizionando gli oggetti troppo vicini tra loro. Alcuni trucchi grafici bidimensionali (2D) possono essere eseguiti in modo semplice ed efficiente utilizzando il buffer di profondità OpenGL®. Anche la scheda grafica utilizzata a volte può essere un problema con la profondità, quindi l’utilizzo dell’impostazione corretta può aiutare ad aumentare la velocità e ridurre i cicli di elaborazione inutili.

Uno dei primi problemi che possono influenzare le prestazioni del buffer di profondità OpenGL®, chiamato anche buffer Z dalla lettera che tradizionalmente contrassegna il piano di profondità cartesiano, è il posizionamento dei piani di ritaglio vicino e lontano. Questi piani definiscono i limiti di ciò che dovrebbe e non dovrebbe essere renderizzato in una scena e i loro valori indicano la distanza dall’osservatore in cui il ritaglio dovrebbe iniziare e finire, rispettivamente. Un pensiero intuitivo sarebbe quello di iniziare il rendering nel punto in cui si trova lo spettatore, impostando il piano vicino a zero, ma questo in realtà non è corretto. Infatti, OpenGL® non consente di azzerare il piano vicino. Se il valore del piano vicino è molto piccolo, ad esempio una frazione di uno, il renderer potrebbe non mostrare nulla o potrebbe non riuscire a ordinare correttamente il buffer di profondità.

Ciò si verifica perché più un oggetto è vicino allo spettatore, più accuratamente OpenGL® calcola la posizione dell’oggetto. Man mano che la distanza dallo spettatore si avvicina allo zero, la precisione calcolata aumenta in modo esponenziale. Ciò rallenta il tempo di rendering e può portare a strani artefatti grafici e altri problemi, a parte il fatto che il livello di precisione calcolato è raramente necessario.

Quando si esegue il rendering di grafica 2D, il buffer di profondità OpenGL® può aiutare a semplificare alcune operazioni. L’utilizzo del buffer di profondità per compensare leggermente i quad che vengono utilizzati come tessere in una composizione può aiutare gli elementi di una scena piastrellata a muoversi agevolmente senza generare strani effetti nell’immagine causati da due poligoni che si sovrappongono sullo stesso piano. Allo stesso modo, gli elementi preparati possono essere nascosti fuori dal campo visivo o dietro il piano di ritaglio lontano in modo che possano essere portati rapidamente nella scena, possibilmente anche utilizzando trasformazioni e rotazioni per dare uno speciale effetto di dissolvenza in entrata o in uscita.

Infine, mentre il buffer di profondità OpenGL® può supportare diverse dimensioni hardware per il buffer, è meglio utilizzare la versione a 16 bit. Questo perché, nella maggior parte delle scene, l’utilizzo di un buffer a 32 bit può rallentare il tempo di rendering. Inoltre, non tutte le schede grafiche supportano buffer di profondità a 32 bit, quindi scendere al minimo comun denominatore significa che più persone saranno in grado di eseguire il programma 3D come è stato scritto.