Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 15, 2025 23:02

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Problem mit Shadowmapping
BeitragVerfasst: Do Nov 04, 2010 14:53 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Hallööchen,

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.

varying vec4 shadowCoord[max_lights];
varying vec4 shadowCoordWdiv[max_lights];

void main()
{   
 vec4 posEye =  gl_ModelViewMatrix * gl_Vertex;
 vec4 posWorld = InvViewMat * posEye; 
 
   for (int i=0; i < max_lights; ++i) { 
     shadowCoord[i] = TexGenMats[i] * posWorld;    
      shadowCoordWdiv[i] = shadowCoord[i] / shadowCoord[i].w;
      shadowCoordWdiv[i].z += 0.0005;
   }      
 
   gl_TexCoord[0] = gl_MultiTexCoord0;     
   gl_Position = ftransform();      
}


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.

Fragment:
Code:
#version 120

const int max_lights = 4;

uniform sampler2D shadowMaps0;
uniform sampler2D shadowMaps1;
uniform sampler2D shadowMaps2;
uniform sampler2D shadowMaps3;
uniform sampler2D Texture0;

varying vec4 shadowCoord[max_lights];
varying vec4 shadowCoordWdiv[max_lights];

void main (void)
{
 //Shadowmapping
 
 vec4 OutputColor = vec4(1.0, 1.0, 1.0, 1.0);
 float distanceFromLight[max_lights];
 
 distanceFromLight[0] = texture2D(shadowMaps1, shadowCoordWdiv[0].st).z;
 distanceFromLight[1] = texture2D(shadowMaps1, shadowCoordWdiv[1].st).z;
 distanceFromLight[2] = texture2D(shadowMaps2, shadowCoordWdiv[2].st).z;
 distanceFromLight[3] = texture2D(shadowMaps3, shadowCoordWdiv[3].st).z;

 float shadow = 1.0;
   for (int i=0; i < max_lights; ++i)  {
     if (shadowCoord[i].w > 0.0)
     shadow = distanceFromLight[i] < shadowCoordWdiv[i].z ? 0.5 : 1.0;
    OutputColor *= shadow;
   }
   gl_FragColor = OutputColor ;
}


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...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Shadowmapping
BeitragVerfasst: Do Nov 04, 2010 15:05 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
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

Was spricht den gegen Selbstbeschattung?!

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Shadowmapping
BeitragVerfasst: Do Nov 04, 2010 15:31 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Hast recht. Doch irgendwie wird der schatten in nach hinten projeziert?! Da steht was auf dem Kopf :-D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Shadowmapping
BeitragVerfasst: Do Nov 04, 2010 15:44 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Dann ist Selbstbeschattung der falsche Begriff ;)

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.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Shadowmapping
BeitragVerfasst: Do Nov 04, 2010 16:05 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
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..

Wie krieg ich das jetzt in die andere Richtung?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Shadowmapping
BeitragVerfasst: Sa Nov 06, 2010 21:40 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Shadowmapping
BeitragVerfasst: Mo Nov 08, 2010 15:50 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
vestehe immernoch nicht warum das Schattenwerfende Objekt vom eigenen Schatten überdeckt wird... mhh keiner ne Ahnung?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Shadowmapping
BeitragVerfasst: Mo Nov 08, 2010 17:30 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 11, 2009 08:02
Beiträge: 532
Programmiersprache: pascal (Delphi 7)
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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Shadowmapping
BeitragVerfasst: Di Nov 09, 2010 20:28 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
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..


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Shadowmapping
BeitragVerfasst: Fr Nov 19, 2010 17:21 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
hier nochmal mein Problem mit der Beschattung... Einmal mit und ohne Schatten.

Ich hab schon versucht die Projektionskoordinaten zu verändern, doch irgendwie haut es nie wirklich hin.. Der Schatten stimmt dann nicht mehr.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Shadowmapping
BeitragVerfasst: Fr Nov 19, 2010 18:32 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Check mal meine alte Proseminar-Arbeit im Abschnitt 2.1 => "Verbesserungen"
http://www-users.rwth-aachen.de/martin. ... 8_1350.pdf

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Shadowmapping
BeitragVerfasst: So Nov 21, 2010 15:14 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
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?

Thomas


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Shadowmapping
BeitragVerfasst: So Nov 21, 2010 16:30 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Soweit ich weiss wird auch die Tiefentextur ja zwischen -1 und 1 gespeichert oder?

Tiefenwerte in der Textur liegen zwischen 0 und 1.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Shadowmapping
BeitragVerfasst: So Nov 21, 2010 16:36 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
und die Tiefenwerte im Shader? Liegen die auch zwischen 0..1?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Problem mit Shadowmapping
BeitragVerfasst: So Nov 21, 2010 16:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Die liegen dann wahrscheinlich zwischen -1 und 1. (Würde deine Probleme erklären)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]