DGL
https://delphigl.com/forum/

Shadowmapping probleme
https://delphigl.com/forum/viewtopic.php?f=20&t=10124
Seite 1 von 1

Autor:  Aya [ So Okt 23, 2011 11:30 ]
Betreff des Beitrags:  Shadowmapping probleme

Hi,

ich habe bei meinem ShadowMapping ein kleines Problem mit dem Self-Shadowing. (siehe Anhang)

Dashier ist der Shader code den ich nutze:
Code:
  1.     float shadowMap(vec4 shadowPosition, sampler2D shadowMap, mat4 shadowTexMatrix)
  2.     {
  3.         vec4 shadowTexCoord = shadowTexMatrix * shadowPosition;
  4.         vec4 shadowTexCoordDivW = shadowTexCoord / shadowTexCoord.w;
  5.         shadowTexCoordDivW.z += 0.0005;
  6.         float distanceFromLight = texture2D(shadowMap, shadowTexCoordDivW.st).z;
  7.         if (shadowTexCoord.w > 0.0)
  8.             return distanceFromLight < shadowTexCoordDivW.z ? 0.0 : 1.0;
  9.         return 1.0;
  10.     }


shadowPosition ist ein varying das im VertexShader auf "gl_Vertex" gesetzt wird.
shadowMap ist die shadowMap.. :)

Und shadowTexMatrix ist diese Matrix:
Code:
  1.         static CIMatrix4x4f biasMatrix(0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.5f, 0.5f, 0.5f, 1.0f);
  2.         textureMatrix = biasMatrix * lightProjectionMatrix * lightViewMatrix;


Das merkwürdige ist, in meinem deferred renderer nutze ich die selbe funktion, dort habe ich diese probleme nicht...

Ich habe schon den toleranzwert:

Code:
  1.         shadowTexCoordDivW.z += 0.0005;


höher und niedriger gemacht, hat aber keine wirkliche auswirkung :(

Hat irgendwer eine Idee was das Problem sein könnte?

Aya~

Dateianhänge:
Dateikommentar: ShadowMapping Problem
Screen shot 2011-10-23 at 21.21.42.png
Screen shot 2011-10-23 at 21.21.42.png [ 145.74 KiB | 4702-mal betrachtet ]

Autor:  Schläfer [ Mo Okt 24, 2011 18:21 ]
Betreff des Beitrags:  Re: Shadowmapping probleme

Wieso ist der Schatten eigentlich dunkler als die von Licht abgewandten Teile? Eigentlich sollten die beide gleich beleuchtet sein, da auf beide kein direktes Licht fällt. Außerdem nimmt man doch für die Shadowmap die am nächsten an der Lichtquelle liegenden Pixel, sodass der abgewandte Teil der Kugel eigentlich vollständig dunkel sein müsste.

Autor:  AMD [ Di Okt 25, 2011 21:57 ]
Betreff des Beitrags:  Re: Shadowmapping probleme

Mich würde die Lösung auch mal interessieren.
Bei mir sieht der Code ziemlich ähnlich aus und habe das selbe Problem - aber auch erst seitdem ich die Shadows mit dem FBO mache, vorher bei einer normalen Textur war das nicht der Fall.

Autor:  AMD [ Mi Okt 26, 2011 16:40 ]
Betreff des Beitrags:  Re: Shadowmapping probleme

PushThread() :P

Ich wollte nochmal nachfragen ob irgendjemand die Lösung weiss? Würde mich schon sehr interessieren wie das entsteht!
Bei mir sieht es so ähnlich aus wie bei Aya:
Bild

Dateianhänge:
shadowbug.jpg [113.13 KiB]
Noch nie heruntergeladen

Autor:  Lord Horazont [ Mi Okt 26, 2011 18:10 ]
Betreff des Beitrags:  Re: Shadowmapping probleme

Was Schläfer sagt erscheint mir sinnig. Die Shadowmaps sehen aus, als ob die Auflösung zu gering wäre (stichwort: GL_DEPTH_COMPONENT24 (= gut) vs. GL_DEPTH_COMPONENT (= schlecht)) bzw. als ob mit einem GL_GEQUAL-Tiefentest gerendert würde

greetings

Autor:  AMD [ Mi Okt 26, 2011 18:28 ]
Betreff des Beitrags:  Re: Shadowmapping probleme

Also:
- Meine Depth-Texture hat GL_DEPTH_COMPONENT24
- glDepthFunc(GL_LEQUAL); => Also kein GEQUAL

Wenn ich beim FBO die größe auf 4096x4096 stelle ist die Qualität zwar schon einigermaßen okay aber diese komischen stellen treten leider immer noch auf. Und das 4096x4096 etwas performance benötigt sollte ja klar sein :? Dass das normale Shadow Mapping nicht unbedingt optimal ist für größere Gebiete ist mir bewusst aber naja, denke mal Cascaded Shadow Mapping wäre dort optimal aber dafür habe ich ehrlich gesagt kein gutes Tutorial gefunden im Zusammenhang mit OpenGL - gibt zwar eins von nvidia aber dort sind meiner Meinung nach viel zu viele andere Dinge mit enthalten die den Code viel zu groß und unübersichtlich machen für sowas :?

Edit// Konnte mit folgendes BiasMatrix gefixxt werden:
Code:
  1. biasMatrix(0.5f, 0.0f, 0.0f, 0.0f,
  2.            0.0f, 0.5f, 0.0f, 0.0f,
  3.            0.0f, 0.0f, 0.5f, 0.0f,
  4.            0.5f, 0.501f, 0.5f, 1.0f);


Also in der letzten Zeile der 2. Wert.

Jetzt wäre nur noch ein Weg praktisch scharfe Shadow Maps zu haben aber das wird wohl beim normalen Shadow Mapping auf großen Flächen kompliziert.

Edit2// Nach längerem probieren ist mir aufgefallen, dass die Qualität zwar besser ist aber wenn die Textur kleiner wird (selbst 1024x1024 ist zu klein), dann tritt der Fehler wieder erneut auf! Also keine wirkliche Lösung... :?

Edit3// Okay das Problem liegt (bei mir) am Backface Culling.

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