Ho una scena OpenGL resa con un gruppo di sprite e mi piacerebbe aggiungere automaticamente le ombre su tutte. Ecco una foto che mostra quello che voglio dire:Ombreggiature OpenGL ES per sprite 2D
La scena utilizza proiezione ortogonale, gli sprite sono quad texture, e sto usando il depth buffer di disegnarli anteriore a quella posteriore. Sto lavorando con OpenGL ES 2.0, ma anche i pensieri dei mondi iOS o non ES potrebbero essere apprezzati. Ho gettato alcune idee in giro su come posso fare questo, e mi piacerebbe scoprire quale è la più promettente.
- Draw ogni sprite due volte, la prima normalmente, la seconda con un qualche tipo di ombra Shader un po 'più profondo nella scena. Non sono sicuro se questo è possibile?
- Disegna uno sprite, quindi disegna di nuovo, si oscura e con qualche alfa, più volte con un jitter casuale applicato alle vertici. Questo può sembrare sciocco e non è affatto un'ombra.
- Disegna la scena di base senza sfondo su una trama, quindi sfoca e scurisce per creare una grande ombra esterna. Quindi disegna la scena di base sulla texture dell'ombra esterna e infine sullo sfondo. Questo perderà l'ombra tra gli sprite, comunque.
- SSAO in una passata post-elaborazione. Potrebbe essere il più dinamico e automatico, ma potrebbe sembrare sfocato/sgranato e molto lento.
- Al momento della creazione, generare una trama ombra per ogni sprite. Per il rendering, disegna uno sprite e quindi il suo ombreggiatura texuture un po 'più in profondità nella scena. Penso che mi piacerebbe evitarlo a causa del tempo di caricamento e dei requisiti di memoria extra, ma questo potrebbe essere il più veloce e il migliore?
Non voglio eseguire alcun lavoro con ombre con trame esterne, poiché utilizzo le stesse trame di sprite a scale diverse e le ombre pronte al forno si scalerebbero in modo innaturale.
Quindi, qualcuna di queste è migliore delle altre? Ci sono altre opzioni a cui non sto pensando? Grazie!
Per il # 3, potresti essere interessato alle raccomandazioni di Imagination Technologies per la postelaborazione: http://www.imgtec.com/powervr/insider/docs/PowerVR.Post%20Processing%20Effects%20Development%20Recommendations.1.7f. External.pdf, che include una descrizione di un filtro di fioritura ad alta efficienza. Sostituire il loro filtro passa-alto con la semplice interpretazione di versioni scure degli oggetti dovrebbe produrre una buona ombra rapida. –
Buona lettura, Brad. Posso usare questo metodo se vado con # 3. – Josh