|
Riflessioni basate sulla distanza dal piano
|
| Autore |
Messaggio |
enigma
Posting Freak
Messaggi: 1,875
Registrato: Nov 2009
Offline
|
#1
Riflessioni basate sulla distanza dal piano
Sto cercando un metodo elegante, veloce e corretto per ottenere questo tipo ti effetto: sostanzialmente vorrei ottenere un piano (pavimento) che riflette l'ambiente circostante, ma che non si comporti come uno specchio. In questo modo le riflessioni più nitide sono quelle degli oggetti a diretto contatto con il piano che via via sfocano man mano che l'oggetto si allontana (o si innalza). Gli oggetti più lontani non verrebbero nemmeno riflessi o comunque le riflessioni non sarebbero percettibili.
Al momento ho già le riflessioni funzionanti (è presente una seconda camera specchiata rispetto alla prima, viene eseguito un render to texture e il blending del risultato con il piano), ma come dicevo il piano si comporta come uno specchio e quindi riflette tutto. Per gli oggetti più lontani posso banalmente risolvere rendendoli invisibili durante la fase di draw dalla camera riflessa. Ma per il resto? Dopo un po di ricerca e studio sono venute a galla queste due possibili soluzioni:
- Disattivare il rendering degli oggetti più lontani dal piano e applicare un blur alla texture riflessa. Poi procedere normalmente, ovvero blend della texture riflessa con il piano.
- Utilizzare le informazioni di profondità (depth buffer della camera riflessa) in fase di blending tra la texture riflessa e il piano.
Vorrei capire se queste due idee possono darmi l'effetto desiderato e se hanno senso (in particolare la seconda, anche perché poi va capito come usare l'informazione di profondità).
Altre idee?
Grazie.
Andrea Benedetti
twitter | LinkedIn
Il tempo è un grande maestro, ma sfortunatamente uccide tutti i suoi allievi.
|
|
| 28-02-2012 10:19 |
|
MannyB
Posting Freak
Messaggi: 1,550
Registrato: Mar 2011
Offline
|
#2
RE: Riflessioni basate sulla distanza dal piano
puoi anche usare fog nella scena riflessa, ti evita un extra zprepass, o anche ridurre il far plane della camera. Fog dovrebbe darti un effetto migliore
ps: nebbia nel caso non usi fixed pipeline te la ioplementi semplicemente nello shader:
passi come uniform il background color e nello shader blendi il colore degli oggetti con quel colore in base alla distanza dalla camera:
out.color = lerp(object_color, background_color, eye_distance);
Manuele Bonanno
(Questo messaggio è stato modificato l'ultima volta il: 28-02-2012 10:40 da MannyB.)
|
|
| 28-02-2012 10:29 |
|
kunos
Gatto Incavolato
Messaggi: 2,416
Registrato: Jul 2010
Online
|
#3
RE: Riflessioni basate sulla distanza dal piano
Sicuramente per portarti dietro il depth devi farti tutta la pippa dello shadow mapping, quindi portarti dietro anche la matrice per trovarti il depth giusto.. detto questo
I 2 possibili approcci che vedo sono:
1) Creare un riflesso, e poi una versione dello stesso blurrato. Interpolare fra le 2 in base alla distanza dal piano.
2) Crearti una cascata di mipmaps dal render target del riflesso e scegliere il livello da usare in base alla distanza dal piano.
Stefano Casillo
www.assettocorsa.net
www.netkar-pro.com
Twitter
(Questo messaggio è stato modificato l'ultima volta il: 28-02-2012 10:51 da kunos.)
|
|
| 28-02-2012 10:50 |
|
Maialovic
Member
Messaggi: 78
Registrato: Jul 2011
Offline
|
#4
RE: Riflessioni basate sulla distanza dal piano
mah...un'idea malata che mi era bazzigata in testa: definita una distanza max possibile oggetto-piano di riflessione per potere essere riflessa, usare una specie di proiezione simil shadow-mapping, dove a distanza max otterrai solo 1 punto nel piano riflesso, sblurri e sei a posto.
fai quello che ti piace fare, anche se ci saranno ostacoli.....sarà lungo e duro..... ma Fallo
|
|
| 28-02-2012 14:18 |
|