Frage

Wie ich es verstehe, erfolgt das Shadow-Mapping durch Rendering der Szene aus der Perspektive des Lichts, um eine Tiefenkarte zu erstellen. Dann rendern Sie die Szene aus dem POV der Kamera, und für jeden Punkt (Fragment in GLSL) in der Szene berechnen Sie den Abstand von dort zur Lichtquelle. Wenn es stimmt, was Sie in Ihrer Schattenkarte haben, ist es im Licht, ansonsten ist es im Schatten.

Ich habe gerade durch dieses Tutorial , um eine Vorstellung davon zu bekommen, wie Shadow-Mapping mit ein Punkt / omnidirektionales Licht.

unter Abschnitt 12.2.2 heißt es:

Wir verwenden eine einzelne Schattenkarte für alle Lichtquellen

und dann unter 12.3.6 sagt es:

1) Berechnen Sie den quadratischen Abstand vom aktuellen Pixel in die Lichtquelle.
...
4) Vergleichen Sie den berechneten Entfernungswert mit dem abgerufenen Schattenkarte, um zu bestimmen, ob wir in Schatten sind oder nicht.

das ist ungefähr das, was ich oben genannt habe.

Was ich nicht bekomme, ist, wenn wir alle unsere Lichter in eine Schattenkarte gebacken haben, welches Licht brauchen wir, um die Entfernung zu vergleichen? Die in die Karte gebackene Entfernung sollte nichts entsprechen, weil es eine Mischung aus allen Lichtern ist, nicht wahr?

Ich bin sicher, dass ich etwas vermisse, aber hoffentlich kann jemand das mir erklären.


Wenn wir auch eine einzelne Schattenkarte verwenden, wie mischen wir es für alle Lichtquellen?

Für eine einzelne Lichtquelle speichert die Schattenkarte einfach den Abstand des nächstgelegenen Objekts des Lichts (d. H. Eine Tiefenkarte), aber für mehrere Lichtquellen, was sie enthalten würde?

War es hilfreich?

Lösung

Sie haben den Satz kurz vorzeitig geschnitten:

Wir verwenden eine einzelne Schattenkarte für alle Lichtquellen, wodurch ein Bild erstellt wird mit Multipasse-Rendering und Durchführung eines Passs für jedes Licht Quelle.

Die Shadow Map enthält also die Daten für eine einzelne Lichtquelle gleichzeitig, verwenden jedoch nur eine Karte, da sie jeweils nur ein Licht rendern.

Ich denke, dass dies in Ihre zweite Frage fließt - Licht ist additiv, damit Sie die Ergebnisse von mehreren Lichtern kombinieren, indem Sie sie einfach zusammenbringen. In GPU-Edelsteinen fügen sie direkt in den Rahmenpuffer zusammen, ohne Zweifel aufgrund der relativ begrenzten Anzahl von Speicher-Textur-Sampler, die zu dieser Zeit auf dem GPUs verfügbar sind. Heutzutage möchten Sie wahrscheinlich eine Kombination aus der Kombination in dem Frame-Puffer und direkt im Fragment-Shader durchführen.

Sie wenden in der Regel auch den Test von "Pixel leuchtet, wenn es weniger als oder gleich dem Abstand im Schattenpuffer plus ein wenig", anstatt nicht genau gleich, aufgrund der Floating-Point-Rundungsfehlerakkumulation.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top