DGL
https://delphigl.com/forum/

Verbesserung des Dual-Paraboloid Shadow Mappings
https://delphigl.com/forum/viewtopic.php?f=20&t=9468
Seite 1 von 1

Autor:  simon1988 [ Sa Sep 18, 2010 09:48 ]
Betreff des Beitrags:  Verbesserung des Dual-Paraboloid Shadow Mappings

Hallo,

ich habe es soeben geschafft den Dual-Paraboloid Shadow Mapping Algorithmus zu implementieren. Das sieht alles sehr gut aus, allerdings wollte ich mal Fragen welche Verbesserungsvorschläge es gibt, um den Algorithmus zu optimieren.

Es gibt zwei Nachteile:
-Einmal können pixelige Kanten des Schattens entstehen. Dieses wollte ich mit Soft-Shadow Mapping verbessern.
-Der größte Nachteil ist die Clipping Ebene, die hintere und vordere Hemisphäre trennt. Wenn ein Schattenwerfendes Object diese Ebene schneidet, kommt es dort zu Fehlern. (siehe Bild: Meine Clipping Ebene liegt parallel zur Wand) Gibt es Möglichkeiten dies in den Griff zu bekommen? Hier ein paar Möglichkeiten und deren Probleme, die ich damit habe:


1) Die geschickte Wahl der Clipping-Ebene war eine Verbesserungsmöglichkeit. Allerdings hab ich nicht wirklich eine Ahnung wie ich solch eine geschickte Wahl treffen soll? Nach welchen Kriterien?

2) Eventuell eine 2te und dritte Shadowmap um 90° versetzt ? (Nachteil: 4 Renderpasses werden benöptigt)

3) Miteinbezug der "Nachbarpixel". Vielleicht gibt es eine Möglichkeit bei der Clipping-Ebene Informationen vor und hinter der Ebene mit einzubeziehen, um dann zu entscheiden, ob es hier Schattiert ist?


Vielen Dank für die Hilfe. :-)

Dateianhänge:
Dateikommentar: Schattenwerfendes Object (linker Block) scheidet die Clipping-Ebene
SM2.jpg [40.13 KiB]
Noch nie heruntergeladen
Dateikommentar: Kein Schattenwerfendes Object scheidet die Clipping-Ebene
SM1.jpg [42.19 KiB]
Noch nie heruntergeladen

Autor:  sharkman [ Sa Sep 18, 2010 12:54 ]
Betreff des Beitrags:  Re: Verbesserung des Dual-Paraboloid Shadow Mappings

Habs selber noch nie gemacht, weiß also nicht wirklich was, aber:

Das Licht scheint ja mitten im schattenwerfenden Objekt zu sein (bzw sehr nah halt :wink: ). Gibts da eventuell auch schon Probleme mit der NearCP?

Wie renderst du die Shadowmap? Zwei Renderpasses, oder entscheidest du mit einem Geometryshader, auf welche Shadowmap das Dreieck kommt?
Wenn Geometryshader, schiebst du ein Dreieck auf beide Shadowmaps, wenn es die CP dazwischen schneidet? Wenn nicht, würde das nämlich einigermaßen zu dem passen, was am Bild ist.

So, mehr fallt mir nicht ein.

mfg

Autor:  simon1988 [ Sa Sep 18, 2010 13:14 ]
Betreff des Beitrags:  Re: Verbesserung des Dual-Paraboloid Shadow Mappings

ja, bin extra sehr nahe ans objekt ran gegangen. Gut hier könnte man, trotz nahem licht, den renderpunkt immer ein stück vom objekt weg setzten. D.h. so eine Art Kollision bauen, die verhindert, dass es dem Objekt nicht zu Nahe kommt.

Der NearCP bezieht sich aber noch nur auf die gluPerspektive Matrix und setzt so das Frustum. Ich berechne meinen Tiefenwert in der Paraboloiden Map ja selbst mit
fSceneDepth = 2*(fLength-fNear)/(fFar-fNear)-1; fSceneDepth € [-1,1]
Habe sogar eben mal fNear auf 0 gesetzt, was leider auch nichts verbessert hat. Opengl Clippt ja zwischen Vshader und Fshader einfach wenn z nicht zwischen -1 und 1 liegt --> NearCP Wert müsste egal sein, da ich die Projektion selbst durchführe.

Zum Rendervorgang:
Die Clipping-Ebene ist meine xy-Ebene. Zunächst führe ich zwei Rendervorhänge durch und CULL_FACE ist ausgeschaltet. Für den hinteren Rendervorgang übergebe ich dem Shader einfach eine Variable mit dem Wert -1, mit dem der z-Wert des Vertex multipliziert wird.
Das Clipping muss ich manuell durchführen, da ich meinen Vertex für die Paraboloiden projektion normieren muss --> z-Wert ist ja also immer zwischen -1 und 1.
Im Fragmentshader entscheide ich dann mit if (z-Wert<0)discard; ob der Wert erfasst wird. Die Schattentextur ist übrigens in einem Framebuffer gebunden.


edit: fLengt = Länge des Normalisierten Vertex

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/