A quanto ho capito, la mappatura delle ombre viene eseguita rendendo la scena dalla prospettiva della luce per creare una mappa di profondità. Quindi si ri-renderizza la scena dal POV della telecamera, e per ogni punto (frammento in GLSL) nella scena si calcola la distanza da lì alla sorgente luminosa; se corrisponde a quello che hai nella tua mappa ombra, allora è nella luce, altrimenti è nell'ombra.Come utilizzare una singola mappa shadow per più fonti di luce puntiforme?
Stavo leggendo il numero this tutorial per avere un'idea di come eseguire il mapping ombra con una luce punto/omnidirezionale.
Nella sezione 12.2.2 si dice:
Usiamo una mappa sola ombra per tutte le sorgenti luminose
E poi sotto 12.3.6 si dice:
1) Calcola la distanza quadrata dal pixel corrente alla fonte di luce.
...
4) Confrontare il valore della distanza calcolata con il valore della mappa shadow recuperato per determinare se siamo o meno in ombra.
Che è approssimativamente quello che ho dichiarato sopra.
Quello che non capisco è se abbiamo bruciato tutte le nostre luci in una mappa ombra, quindi a quale luce dobbiamo confrontare la distanza? La distanza indicata nella mappa non dovrebbe corrispondere a nulla, perché è una miscela di tutte le luci, non è vero?
Sono sicuro che mi manca qualcosa, ma spero che qualcuno possa spiegarmelo.
Inoltre, se si utilizza una singola mappa di ombreggiatura, come si fonde con tutte le sorgenti di luce?
Per una singola sorgente di luce la mappa delle ombre memorizza solo la distanza dell'oggetto più vicino alla luce (cioè una mappa di profondità), ma per più fonti di luce, cosa conterrebbe?
Pensavo che il resto di quella frase significasse semplicemente che hanno costruito la mappa delle ombre eseguendo il rendering sulla stessa mappa (forse in modo additivo) per ogni sorgente di luce; non che lo ripuliscano e lo riutilizzino. Questo ha più senso ora ... è un peccato però - Speravo davvero di riuscire a farla franca con una mappa delle ombre: p – mpen
È possibile se si capovolge qualcosa e si usa quello che viene spesso chiamato rendering differito. Si esegue il rendering della scena dalla videocamera alla profondità di output + normali + alcune informazioni sulla superficie per pixel, quindi per ogni luce si disegna un quad a tutto schermo che itera in modo efficace attraverso il rendering della videocamera. Anche se la tua GPU può emettere solo RGB a 8 bit (ancora comune nel mondo mobile) puoi eseguire il primo bit su più trame in più passaggi. – Tommy
Grande. Hai appena aperto una nuova lattina di vermi per me. Sto facendo un gioco, e la maggior parte degli oggetti sono statici (o raramente cambiano), quindi stavo pensando di precomputare le mappe ombra per tutti gli oggetti statici, mantenere una copia e aggiornarla solo per gli oggetti in movimento. Voglio supportare più luci possibili, quindi non credo che ricreare la scena 100 volte da diverse angolazioni 60 volte al secondo sia una possibilità per me. Ma una mappa delle ombre utilizza una trama attiva, non è vero? Devo legarli tutti contemporaneamente per il passaggio finale di rendering, no? – mpen