Illuminazione rapida con più luci


10

Come posso implementare l'illuminazione rapida con più luci?

Non voglio trattenere il giocatore, può posizionare un numero illimitato e possibilmente sovrapporre (punto) luci nel livello.

Il problema è che gli shader che contengono loop dinamici che sarebbero necessari per calcolare l'illuminazione tendono ad essere molto lenti.

Ho avuto l'idea che, se fosse possibile, durante la compilazione, compilare uno shader n volte dove n è il numero di luci. Se il numero n è noto al momento della compilazione, i loop possono essere srotolati automaticamente. È possibile generare n versioni dello stesso shader con un numero diverso di luci?

In fase di esecuzione potrei quindi decidere quale shader utilizzare per quale parte del livello.


Se le luci vengono aggiunte dinamicamente dal giocatore, come può uno shader "compiletime" essere la risposta corretta?
Seth Battin,

Come ho scritto, il compilatore potrebbe generare shader per 1,2,3, ... luci e in fase di esecuzione potrei decidere quale utilizzare per quale parte del livello
codymanix,

compilare il tempo shader deve sapere dove verranno posizionate le luci, qualsiasi dinamicità delle luci li rovinerà
maniaco del cricchetto

solo il numero di luci dovrebbe essere dinamico. le posizioni saranno fornite come parametro.
codymanix,

1
Sembra che tu abbia la tua risposta. Conosci il numero massimo di luci e la gamma di posizioni possibili.
ashes999,

Risposte:


8

Credo che ciò che stai cercando si chiami Rendering differito. È una tecnica di rendering che si adatta perfettamente a molte luci, così bene che può essere utilizzata per l'illuminazione indiretta dinamica. Ciò significa migliaia di luci sullo schermo.

È fondamentalmente una tecnica in cui per prima cosa esegui il rendering di tutti i tuoi dati geometrici (posizione, normale, profondità) in un buffer di pixel intermedio (chiamato G-Buffer). Quindi in un secondo passaggio si rende una forma leggera insieme ai suoi parametri. Lo shader di questo secondo passaggio prende le informazioni dal buffer G, applica il calcolo della luce, quindi le fonde nell'immagine finale.

Puoi trovare i dettagli di implementazione qui

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.