Éclairage rapide avec plusieurs lumières

10

Comment mettre en œuvre un éclairage rapide avec plusieurs lumières?

Je ne veux pas restreindre le joueur, il peut placer un nombre illimité et éventuellement des lumières (ponctuelles) qui se chevauchent dans le niveau.

Le problème est que les shaders qui contiennent des boucles dynamiques qui seraient nécessaires pour calculer l'éclairage ont tendance à être très lents.

J'ai eu l'idée que s'il était possible au moment de la compilation de compiler un shader n fois où n est le nombre de lumières. Si le nombre n est connu au moment de la compilation, les boucles peuvent être déroulées automatiquement. Est-il possible de générer n versions du même shader avec juste un nombre de lumières différent?

Au moment de l'exécution, je pouvais alors décider quel shader utiliser pour quelle partie du niveau.

codymanix
la source
Si les lumières sont ajoutées dynamiquement par le joueur, comment un shader "compiletime" peut-il être la bonne réponse?
Seth Battin
Comme je l'ai écrit, le compilateur pouvait générer des shaders pour 1,2,3, .. lumières et au moment de l'exécution, je pouvais décider lequel utiliser pour quelle partie du niveau
codymanix
compiler les shaders de temps doivent savoir où les lumières vont être placées, toute dynamique des lumières les ruinera
ratchet freak
seul le nombre de lumières doit être dynamique. les positions seront fournies en paramètre.
codymanix
1
Il semble que vous ayez votre réponse. Vous connaissez le nombre maximum de lumières et la gamme de positions possibles.
ashes999

Réponses:

8

Je crois que ce que vous recherchez s'appelle le rendu différé. C'est une technique de rendu qui évolue extrêmement bien avec beaucoup de lumières, si bien qu'elle peut être utilisée pour un éclairage indirect dynamique. Cela signifie des milliers de lumières sur l'écran.

Il s'agit essentiellement d'une technique dans laquelle vous rendez d'abord toutes vos données de géométrie (position, normale, profondeur) dans un tampon de pixels intermédiaire (appelé G-Buffer). Ensuite, dans un deuxième passage, vous restituez une forme claire avec ses paramètres. Le shader de cette seconde passe prend les informations du G-Buffer, applique le calcul de la lumière, puis les mélange dans l'image finale.

Vous pouvez trouver les détails d'implémentation ici

akaltar
la source