Deferred Rendering: Shadowmapping
-
Komm ich da irgendwie um per-pixel Transformation der Objektkoordinaten in light-space rum? Beim Forward-Rendering konnte man ja das ja einfach pro Vertex 1x im Vertex-Shader machen und dann die interpolierten Texturkoordinaten dem Pixelshader übergeben. Im Moment seh ich aber so eine einfache Möglichkeit nicht wenn meine Vertexdaten in ner Textur liegen auf die ich erst im Pixelshader zugreifen kann.
-
Die Alternative wäre wohl, vor dem deferred Shading für jede Lichtquelle den Schatten wie gewohnt zu rendern und das Ergebnis in einen zusätzlichen Shadow Buffer zu packen. Ich würde vermuten, dass die Projektion aller Pixel in den Lightspace potentiell effizienter ist (Bandbreite, zusätzliche Renderpasses etc.), wenn es sich nicht gerade um triviale Szenen handelt. Was genau du damit meinst, dass deine "Vertexdaten in einer Textur liegen, auf die du erst im PixelShader zugreifen kannst", ist mir nicht wirklich klar...
-
dot schrieb:
Was genau du damit meinst, dass deine "Vertexdaten in einer Textur liegen, auf die du erst im PixelShader zugreifen kannst", ist mir nicht wirklich klar...
Ich mein damit die Positionstextur im GBuffer.
-
TravisG schrieb:
dot schrieb:
Was genau du damit meinst, dass deine "Vertexdaten in einer Textur liegen, auf die du erst im PixelShader zugreifen kannst", ist mir nicht wirklich klar...
Ich mein damit die Positionstextur im GBuffer.
Regel #1: Man speichert die World Position nicht im GBuffer, das kostet unverhältnismäßig viel Speicher und Bandbreite. Die Position lässt sich über die inverse View Projection aus der Tiefe rekonstruieren...
-
TravisG schrieb:
dot schrieb:
Was genau du damit meinst, dass deine "Vertexdaten in einer Textur liegen, auf die du erst im PixelShader zugreifen kannst", ist mir nicht wirklich klar...
Ich mein damit die Positionstextur im GBuffer.
du kannst die world pos als extra layer im gbuffer problemlos ablegen. Alles weitere ist optimierung... And premature optimizations...