Skip to content

Una mia skylight

Tempo fà stavo guardando i vari esempi dell’SDK nVidia, senza cercare niente in particolare, così tanto per passare il tempo. E sono rimasto colpito da un’esempio riguardante l’ambient occlusion. A prima vista non sembra un grande esempio, intanto per avere risultati decenti ci mette molto più del tempo richiesto dal rendering real-time (diciamo 2 sec) e poi il risultato mi sembrea sempre un pò sbagliato…

Questo esempio propone di utilizzare le Shadowmap per calcolare l’ambient occlusion, renderizzando tante volte la scena con le ombre proiettate in diverse direzioni, e poi fa la media dei vari rendering.

Questa tecnica mi ha fatto pensare: e se ci mettessimo pure il calcolo dell’illuminazione dot o qualcosa di ancora più avanzato? e se invece di usare il loro algoritmo buggato per posizionare le luci ne usassi uno migliore che le posiziona tutte equidistanti? e se metessi la possibilità di importare un modello? la risposta a tutte queste domande è “verrebbe fuori qualcosa di figo!” 😀

E se conquistassi il mondo!! vabbé… Comunque oggi non avevo molto da fare ed ho cominciato a fare questo programmino, ho creato in fretta un obj con wings3d, ed ho cominciato il progetto, prima ho fatto il programma che caricava il file obj, poi ho messo le ombre e infine l’accumulazione. Il risultato è nell’immagine a finco dove ci sono 281 luci diverse (tutte bianche) per un totale di circa mezzo secondo di rendering.

Un piccolo aneddoto: quando ho cominciato a guardare l’esempio dell’nvidia non avevo mai sentito parlare di accumulation buffer, il quale si è rilevato invece una cosa molto potente di OpenGL. L’accumulation buffer è una porzione di memoria video contenente un buffer a virgola mobile grande quanto l’area di rendering che puo essere usato per fare semplici operazioni su vari rendering. Ad esempio nel mio programma si renderizza la scena illuminata da una luce e poi si accumula divisa per il numero di rendering da fare così come risultato si ottiene una media dei vari rendering. La cosa sorprendente è che questo accumulation buffer c’è sempre stato! o comunque c’è da molto tempo, da molto prima che si parlasse di texture a virgola mobile o comunque di qualcosa che non sia a 8 bit riguardante il rendering!

Questo mi ha fatto pensare a quando diverso tempo fa sviluppai una tecnica per il dof, che consisteva nel renderizzare 4 volte la stessa scena spostando leggermente la camera per poi combinare i 4 rendering (vedi screen a fianco), bhe ricordo di avere un pò penato con renderware per farlo, e invece con l’accumulation buffer sarebbe stato semplice! Oppure il motion blur, sommando il frame precendete e l’attuale si ottiene un motion blur molto bello a peso quasi nullo! Alla fine credo che l’accumulation buffer sia una cosa snobbata che invece poteva permettere di fare tante cose belle… sarà che sotto DirectX non c’è, ho sempre pensato che l’opengl sia un pò borgottato dai grandi della grafica realtime, ma di questo parlerò un’altra volta.

In ogni caso restare sintonizzati per il rendering con skylight velocissimo!

Be First to Comment

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.


*