Gérer de nombreuses lumières dans une scène (avec des shaders)

9

Je suis curieux de savoir comment gérer de nombreuses lumières dans une scène. Étant donné une très grande carte dans un jeu de rôle, avec des donjons (avec des lumières là-dedans), etc. Je connais l'éclairage différé, mais cela ne répond qu'à la façon de rendre de nombreuses lumières. Mais ma question est plus: comment ne pas rendre beaucoup de lumières. Il est évidemment souhaitable de ne rendre que les lumières affectant la scène, mais je ne connais pas de technique / d'algorithme pour l'archiver. Personne ne veut ou n'est même capable de rendre 500 lumières ponctuelles, simplement parce qu'il y a quelque part sur la carte. Mais on ne peut pas simplement prendre une ligne droite entre la lumière et le joueur et tester s'il y a quelque chose entre les deux. La distance ne semble pas non plus être un bon indicateur. (Lumière du soleil?)

tl; dr: Comment savoir quelles lumières affectent la scène pour les rendre uniquement?

blubb
la source
OpenGL ou DirectX?
kravemir
6
en fait, 500 lumières seraient tout à fait possibles avec un éclairage différé, tant que vous ne voulez pas d'ombres pour toutes;)
Par exemple, pour les ligatures ponctuelles et coniques, vous pouvez utiliser l'abattage sélectif - la lumière ponctuelle n'est qu'une sphère. La lumière directionnelle est vue de partout
Kikaimaru
4
@Darkwings Vous décrivez essentiellement ce que Blubb a demandé. Comment marche-t-on? Eh bien, je pense que la solution ici est juste de marcher! (A fonctionné pour moi.) ;-) "vous devez savoir si cette source illumine quelque chose à votre avis." <- C'est exactement ce qu'il demande, il veut savoir comment faire. ^^ Bien que le truc de cône / sphère de Kikaimaru soit probablement utile.
cooky451
1
Pour l'OP, il n'était pas évident de vérifier le tronc de la vue, car il a mentionné la distance. Chaque lumière aura certains paramètres pour le déterminer. Si des lumières directionnelles sont utilisées, elles atteindront partout, les projecteurs auront une zone cible (afin qu'elle puisse être résolue avec une intersection de plan vectoriel) et ainsi de suite. Vous devriez réfléchir davantage aux lignes des lumières que vous souhaitez affecter la scène, étant donné que si vous avez vraiment beaucoup de lumières très proches les unes des autres, vous feriez mieux d'approcher (pour la projection d'ombres). IE: 100 bougies sur un lustre antique peuvent être traitées comme une seule lumière.
Darkwings

Réponses:

5

Encore plus simple que de délimiter des volumes;

Attribuez un rayon à chaque lumière. Lorsqu'il s'agit de rendre votre scène, vérifiez simplement si la distance entre les objets de votre scène et chaque lumière est inférieure au rayon de la lumière. Si c'est le cas, utilisez la lumière, sinon, sautez-la.

Juste une fraction plus compliquée, selon l'importance des performances:

Vous pouvez également effectuer une sorte de vérification de phase large. Définissez simplement une grille spatiale qui stocke les poignées de vos lumières sur une base de cellules de grille, puis effectuez uniquement la vérification de la distance sur les lumières qui se trouvent dans les cellules dans le rayon maximum de vos objets de scène.

Suds
la source
5
+1 -
Cela ressemble étrangement
Un peu tard ... de toute façon, c'est exactement une sphère englobante. En utilisant cette méthode, vous rendrez toujours des lumières qui sont complètement obscurcies par les murs, etc. et donc non pertinentes pour la scène. De plus, toutes les lumières ne vont pas dans toutes les directions.
Darkwings
5

La façon la plus simple à laquelle je peux penser (soyons honnêtes, la seule façon à laquelle j'ai pensé) est de donner à chaque lumière un volume englobant . Si le volume englobant croise le tronc de vue (ou un volume englobant du tronc de vue), appliquez la lumière.

Il peut encore y avoir des lumières qui sont appliquées même si elles n'affectent aucun objet visible, mais c'est simple et rapide. Une disposition intelligente de votre graphique de scène pourrait signifier que quelques vérifications d'intersection éliminent la plupart de vos lumières (tout comme ce qui est fait pour l'élimination des objets).

Quelque chose comme le soleil pourrait ne pas avoir de volume englobant (pour indiquer qu'il devrait toujours être appliqué).

Gyan alias Gary Buyn
la source