- void main()
- {
- gl_FrontColor = gl_Color;
- gl_TexCoord[0] = gl_MultiTexCoord1;
- gl_TexCoord[1] = gl_MultiTexCoord2;
- gl_Position = ftransform();
- }
DGL https://delphigl.com/forum/ |
|
ShadowMapping - das ewige Problem https://delphigl.com/forum/viewtopic.php?f=20&t=10316 |
Seite 1 von 1 |
Autor: | AMD [ Di Feb 21, 2012 14:08 ] |
Betreff des Beitrags: | ShadowMapping - das ewige Problem |
Hey, Das Thema Schatten ist wohl das schlimmste was mir bis jetzt bei OpenGL begegnet ist. Es ist mir zwar möglich ein ganz normales ShadowMapping durchzuführen aber wenns schon darum geht, das etwas auf Shader auszulagern und dann z.B. PCF anzuwenden hörts auf ![]() Ich zeige daher mal ein paar Codeteile, in der Hoffnung das jemand den Fehler findet (oder die Fehler). VertexShader: Code:
Fragment Shader: Code:
C/C++ Code: Code:
Im Shader halt noch: Code:
Das sollten die wichtigsten Sachen sein. Das im FBO die richtigen Texturen weiss ich sicher, da ich das schon am laufen hatte (nur eben ohne Shader)! Für mich ist es eben wichtig die beiden Texturen in den Shader zu bekommen damit ich dort auch PCF anwenden kann. Falls noch irgendwas fehlt einfach sagen! Wäre über Hilfe sehr dankbar ![]() |
Autor: | Thmfrnk [ Di Feb 21, 2012 18:51 ] |
Betreff des Beitrags: | Re: ShadowMapping - das ewige Problem |
mhh also ich hab das mal so gemacht: Auszug aus Fragmentshader: Code:
VertexShader: Code:
|
Autor: | Thmfrnk [ Di Feb 21, 2012 18:57 ] |
Betreff des Beitrags: | Re: ShadowMapping - das ewige Problem |
und hier noch auszug wie ich die ProjektionsMatrix erstelle und die Objekte in die Map rendere: Code:
hier das Tutorial is auch nich verkehrt: http://fabiensanglard.net/shadowmappingPCF/index.php |
Autor: | AMD [ Di Feb 21, 2012 22:46 ] | ||
Betreff des Beitrags: | Re: ShadowMapping - das ewige Problem | ||
Erstmal danke für die Antwort! Dieses Tutorial auf der Website habe ich mir schonmal angeschaut aber das klappt doch garnicht? Wenn ich die fertige exe downloade und ausführe => verbuggt! Lade den Code und compile es selber => verbuggt! Dort wird nicht mal im Ansatz ein korrekter Schatten angezeigt (siehe Anhang)
|
Autor: | AMD [ Mi Feb 22, 2012 10:39 ] | ||
Betreff des Beitrags: | Re: ShadowMapping - das ewige Problem | ||
Also ich habe den Code mal durchgearbeitet aber letztendlich will es nicht laufen. Ich wollte mir zum Debuggen das FBO anzeigen lassen - also die DepthTexture - doch da ist nicht wirklich viel zu sehen! Habe daher mal ein FBO von mir 1 zu 1 übernommen, was aber komischerweise nix bringt. Hab auch schon andere Parts ausgetauscht aber ebenso ohne Erfolg. Ich packe den Source nochmal in den Anhang, vllt. stößt ja jemand auf ein Problem - so lang ist der Code ja nicht. Ich hatte mir auch mal sein normales ShadowMapping angeschaut und muss sagen, dass es auch dort ein Fehler gibt. Im Fragment Shader will er z.B. eine vec4 Variable an texture2D übergeben - läuft natürlich nicht. Als vec2 mit .st oder texture2DProj und dann vec4 läuft. Fehler sind wohl keine Seltenheit ![]()
|
Autor: | AMD [ Mo Mär 19, 2012 22:02 ] |
Betreff des Beitrags: | Re: ShadowMapping - das ewige Problem |
Ich schieb das Thema nochmal nach oben und zeige mein aktuellen Stand nochmal kurz aber deutlich: Im C++ Code: - Shader wird aktiviert - Szene wird gerendert - Shader deaktiviert Der C++ Code übergibt dem Shader die Tiefentextur sowie die Matrix von der Texture. Diese Matrix setzt sich aus folgenden 3 Dingen zusammen: BiasMatrix * ProjectionMatrix * LightMatrix BiasMatrix sollte klar sein. ProjectionMatrix hat den Inhalt von gluPerspective (also Fov, Ration, Near, Far) LightMatrix enthält die Kameradaten der Lichtquelle (also Ort und Blickrichtung (via gluLookAt). Diese Daten werden jedenfalls an den Shader übergeben. Im VertexShader sieht es so aus: Code:
Einen passenden Fragmentshader kann ich nicht wirklich präsentieren, da ich vieles Probiert habe aber nix klappt. Habe halt lediglich meine uniform sampler2DShadow ShadowMap und eben es mit Shadow2DProj probiert (als Koordinaten gl_TexCoord[1]) genommen - aber es geht halt leider nicht. Anmerkung, vllt. ist es wichtig: Ohne Shader habe ich die Schatten immer mit diesen beiden Zeilen dargestellt: Code:
(war natürlich auch GL_R, GL_Q, GL_T vorhanden). Könnte mir bitte jemand einen korrekten FragmentShader zeigen, also wo einfach nur der Schatten dargestellt wird? Wäre wirklich nett! Bei Fragen steh ich natürlich zur Verfügung ![]() |
Autor: | AMD [ Do Apr 19, 2012 13:48 ] |
Betreff des Beitrags: | Re: ShadowMapping - das ewige Problem |
Ich habe es nun endlich zum laufen gebracht! ![]() Welche Technik wäre denn "state of art", um weiche Kanten zu erzeugen? PCF liefert zwar bei ausreichender samplerate gute Ergebnisse aber die Performance ist nicht so überzeugend. |
Autor: | Schläfer [ Do Apr 19, 2012 22:25 ] |
Betreff des Beitrags: | Re: ShadowMapping - das ewige Problem |
Du könntest dir noch Variance Shadow Maps anschauen. Dabei kann man die Shadowmaps filtern wie man will und benötigt nur noch einen Texturelookup um dann den Schatten darzustellen. Allerdings wird das durch höheren Speicherverbrauch erkauft. Außerdem hat man nicht das Problem mit Bias und inkorrekten Selfshadows (dafür aber ein anderes: Light Bleeding). Eine Möglichkeit für PCF wäre noch es mit Dithering zu verwenden. So kann man die nötigen Texturlookups reduzieren und hat trotzdem noch weiche Schatten (die allerdings aus vielen kleinen Einzelpunkten bestehen). Wenn Geschwindigkeit wichtiger ist, wäre das aber zumindest eine Überlegung wert. |
Autor: | damadmax [ Fr Apr 20, 2012 00:37 ] |
Betreff des Beitrags: | Re: ShadowMapping - das ewige Problem |
AMD hat geschrieben: Ich habe es nun endlich zum laufen gebracht! ![]() Woran lag es denn ? Auf jeden Fall kommt mir folgendes aus dem Vertex Shader merkwürdig vor: Code:
Sollte die Matrix nicht vorne stehen? AMD hat geschrieben: Welche Technik wäre denn "state of art", um weiche Kanten zu erzeugen? PCF liefert zwar bei ausreichender samplerate gute Ergebnisse aber die Performance ist nicht so überzeugend. Ich hatte mich bislang mit 5 Samples zufrieden gegeben und vorhin mal auf 1 Sample mit dithering umgestellt. Nicht der wahnsinn, aber es reicht erstmal. Aber meinen Shader muss ich sowieso nochmal überarbeiten, weil ich an verschiedenen Stellen immer die Kameraposition rausrechnen muss. Du musst das anscheinend nicht. Allerdings komme ich an die Fragmentkoordinaten auch erst im Fragmentshader, da sie ja aus der Positionstextur des Deferredrenderer kommt. |
Autor: | AMD [ Fr Apr 20, 2012 07:09 ] |
Betreff des Beitrags: | Re: ShadowMapping - das ewige Problem |
Danke für die Antworten. Qualität ist zwar nicht unrelevant aber das ganz so wichtig ist es auch nicht. Ich schau mir jedenfalls mal das dithering an. Der Fehler war im Fragmentshader. Es wurde vom shadow2DProj der Wert .w genommen - das klappt auf nvidia Karten ganz gut aber nicht bei AMD/ATI. Nachdem ich es auf .r geändert habe läuft es auf beiden Karten ![]() |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |