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.
Réponses:
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
la source