Schnelle Beleuchtung mit mehreren Lichtern

10

Wie kann ich eine schnelle Beleuchtung mit mehreren Lichtern implementieren?

Ich möchte den Spieler nicht zurückhalten, er kann eine unbegrenzte Anzahl und möglicherweise überlappende (Punkt-) Lichter in das Level setzen.

Das Problem ist, dass Shader, die dynamische Schleifen enthalten, die zur Berechnung der Beleuchtung erforderlich wären, sehr langsam sind.

Ich hatte die Idee, wenn es zur Kompilierungszeit möglich sein könnte, einen Shader n-mal zu kompilieren, wobei n die Anzahl der Lichter ist. Wenn die Nummer n zur Kompilierungszeit bekannt ist, können die Schleifen automatisch abgewickelt werden. Ist es möglich, n Versionen desselben Shaders mit nur einer unterschiedlichen Anzahl von Lichtern zu generieren?

Zur Laufzeit konnte ich dann entscheiden, welcher Shader für welchen Teil des Levels verwendet werden soll.

Codymanix
quelle
Wie kann ein "Compiletime" -Shader die richtige Antwort sein, wenn die Lichter vom Player dynamisch hinzugefügt werden?
Seth Battin
Wie ich schrieb, konnte der Compiler Shader für 1,2,3, .. Lichter generieren und zur Laufzeit konnte ich entscheiden, welche für welchen Teil des Levels verwendet werden sollte
Codymanix
Compiler für die Kompilierungszeit müssen wissen, wo die Lichter platziert werden sollen. Jede Dynamik der Lichter wird sie ruinieren
Ratschenfreak
Nur die Anzahl der Lichter sollte dynamisch sein. Die Positionen werden als Parameter angegeben.
Codymanix
1
Es hört sich so an, als hätten Sie Ihre Antwort. Sie kennen die maximale Anzahl von Lichtern und den Bereich möglicher Positionen.
Asche999

Antworten:

8

Ich glaube, was Sie suchen, heißt Deferred Rendering. Es handelt sich um eine Rendering-Technik, die mit vielen Lichtern sehr gut skaliert werden kann und so gut für die dynamische indirekte Beleuchtung verwendet werden kann. Das bedeutet Tausende von Lichtern auf dem Bildschirm.

Es ist im Grunde eine Technik, bei der Sie zuerst alle Ihre Geometriedaten (Position, Normal, Tiefe) in einen Zwischenpixelpuffer (den sogenannten G-Puffer) rendern. In einem zweiten Durchgang rendern Sie dann eine Lichtform mit ihren Parametern. Der Shader dieses zweiten Durchgangs nimmt die Informationen aus dem G-Puffer, wendet die Lichtberechnung an und mischt sie dann in das endgültige Bild.

Implementierungsdetails finden Sie hier

Akaltar
quelle