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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.