nun macht mir das Shadowmapping doch noch Probleme. Also ich hab das Mapping mit shadow2DProj + sampler2DShadow hinbekommen. Sieht aufgrund der Selbstbeschattung nur nicht wirklich toll aus. Nun wollte ich die Division durch w selber machen.. Die Texturmatrix ist die gleiche. Habe entsprechend diesem Tutorial mein Shader angepasst: http://fabiensanglard.net/shadowmapping/index.php
Vertex:
Code:
#version 120
const int max_lights = 4;
uniform mat4 InvViewMat; uniform mat4 TexGenMats[max_lights]; //Texturprojektionsmatrix, ist die gleiche Matrix wie für meine Lichtproj.
eigentlich hat sich doch nix geändert? Aber es funktioniert nicht. Irgendwie zerhauts da die Texturmatrix. Irgendwo in der Ecke der Szene kann ich meine Schattentextur ganz klein wiederfinden...
Ich dachte das vielleicht die Teilung durch W im Vertexshader besser aufgehoben ist, da dieser ja nur pro Vertex und nicht pro Pixel ausgeführt wird.
Nein ist sie nicht. Zwischen Vertex und Fragmentshader wird bekanntlich linear interpoliert. Das ist nicht kompatibel mit der Division, ich zeig das mal am Beispiel der X-Koordinate: Division im Vertexshader: (1-t)*(x1/w1) + t*(x2/w2) Division im Fragmentshader: ((1-t)*x1+t*x2) / ((1-t)*w1 + t*w2)
Zitat:
Sieht aufgrund der Selbstbeschattung nur nicht wirklich toll aus
Ich würde sagen du musst negative Z-Koordinaten abfangen. Z ist ja die Distanz zur Kamera bzw. in deinem Fall zur Lichtquelle. Z=0 sollte die Near-Plane sein, Z=1 die FarPlane deiner Matrix.
das hat nichts mit dem zu tun was ich selbstbeschattung nenne... (zeig ich später aufn screenshot).. Aktuell wird einfach alles NUR nach hinten projeziert. Die Matrix ist aber noch die selbe wie mit shadow2DProj..
so hier nun mein Problem mit der "Selbstschattierung".. Wenn ich beim Rendern der Tiefenmap Cullface auf GL_FRONT stelle, sehe ich irgendwie nur in einem Ausschnitt meiner Szene einen Schatten..
Wenn ich ohne shadow2Dproj den Schatten proziere, quasi selbst durch w teile projeziert er den Schatten komischerweise nur nach hinten.? Hab schon hin-undher probiert doch kriegs net hin..
Die Selbstschattierung der Objekte passiert ja bei mir schon, sehr schön, über die Beleuchtung..
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Kann sein, dass die Tiefenwerte in der Shadowmap geringfügig kleiner sind als die Vergleichswerte. Das kommt hin und wieder vor, weil sie ja exakt gleich sein sollten, aber du wahrscheinlich mit einfacher Genauigkeit, also nicht exakt rechnest. Und eventuell sogar mit geringerer Genauigkeit speicherst, aber das ist nicht das eigentliche Problem. Normalerweise entstehen da eher Artefakte durch die bilineare Interpolation. Eine mögliche Lösung ist vor dem Vergleich den Wert aus der Shadowmap ein bisschen zu vergrößern, damits sicher davor liegt. Eine andere mögliche Lösung steht in den GPU Gems, dürfte aber nicht ganz so einfach zu implementieren sein (heißt SAVSM, glaub ich. bin grad zu faul ums rauszusuchen)
Kann es vielleicht daran liegen das der Bereich zwischen Near & Far Plane für die Tiefentextur zu groß ist? Ich Rendere diese mit gluPerspective(ProjectorPersp, 1, 1, 300);
Ich habe es mal probiert auf shaderCoord.z bissl was zu addieren dann verschiebt sich logischerweise der Schatten nach hinten. Doch wenn ichs mit einem Wert hinbekommen habe z.b. +=1.455 dann siehts bei nem Objekt welches näher dran ist schon wieder ganz anders aus..
hab ich mir angesehen. Ich hab ja versucht das Shadowmapping selbst zu machen, quasi selber durch w zu teilen (ohne shadow2dProj)doch dann haut die projektion überhaupt nicht mehr hin. Wird quasi nur in die gegenüberliegende Seite projeziert, warum auch immer..
Soweit ich weiss wird auch die Tiefentextur ja zwischen -1 und 1 gespeichert oder? Muss da nich noch irgendwas umrechnen?
Mitglieder in diesem Forum: Bing [Bot] und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.