Shadow Map und CodeXL

  • Ahoi,
    unser shadow mapping will nicht funktionieren, und wir kommen einfach nicht drauf warum.


    Wir erstellen ein shadowMapFBO, eine shadowMap Textur und laden den depthMapShader. Das passiert einmal vor der Gameloop.


    Dann setzen wir für den ersten Pass das shadowMapFBO und den viewport und rufen glclear usw. auf. Das passiert einmal pro Frame. Direkt danach wird für jedes Objekt in der Szene mit dem depthMapShader in die shadowMap Textur gerendert. Damit ist der erste Pass fertig.


    Beim zweiten Pass wird dann die Szene normal gerendert und im vertex shader

    Code
    1. ShadowCoord = DepthBiasMVP * vec4(vertexPosition_modelspace,1);

    gesetzt und dann im fragment shader verwendet

    Code
    1. float visibility = texture( ShadowMap, vec3(ShadowCoord.xy, (ShadowCoord.z)/ShadowCoord.w) );


    Soweit schaut das eigentlich alles ok aus.


    Ich wollte mir also die depth map mal mit CodeXL anschauen, aber das funktioniert nicht da mir das VS CodeXL Plugin "Texture type is unknown" anzeigt. In den Properties zur Textur steht unter "Internal Pixel Format": "Requested GL_DEPTH_COMPONENT24" und "Used N/A". Das ist übrigens bei allen Texturen der Fall. Kann mir keine mit CodeXL anzeigen lassen. Gerendert werden die Texturen aber richtig.


    Für das einfache shadow mapping haben wir uns mal an diesem Tutorial orientiert: http://www.opengl-tutorial.org…torial-16-shadow-mapping/
    Wenn ich das Tutorial Beispiel ausführe, werden mir die Texturen in CodeXL übrigens richtig angezeigt...


    Kennt sich jemand mit CodeXL aus und kann mir sagen was ich machen muss, damit mir die Texturen angezeigt werden? Das würd das debuggen etwas erleichtern.


    Ansonsten ist der Gruppenname "Mostly_harmless" wenn da ein Tutor vllt kurz drüber schauen könnte.


    Danke.

    Edited once, last by dap ().

  • Ich hab mir das mal kurz angesehen. CodeXL (VS Plugin) funktioniert bei mir einwandfrei. D.h. das ist bei dir ein lokales Problem :-/ Da kann ich nicht viel dazu sagen.


    Die Shadow map ist leer weil ihr die falsche uniform location sucht.
    Ihr habt:

    Code
    1. GLuint depthMatrixID = glGetUniformLocation(depthMapShader, "MVP");


    glGetUniformLocation liefert eigentlich ein GLint zurück und dieses ist -1 falls es die location nicht gibt.
    Es macht Sinn entweder sicher zu sein, dass man die richtige Location hat oder zu prüfen ob es -1 ist.
    Und bei euch ist es -1, weil eurer uniform eigentlich "depthMVP" heißt.


    D.h. ihr könntet folgendes machen bei allen glGetUniformLocation() calls:

    Code
    1. [COLOR=#2b91af]GLint[/COLOR] depthMatrixID = [COLOR=#6f008a]glGetUniformLocation[/COLOR]([COLOR=gray]depthMapShader[/COLOR], [COLOR=#a31515]"depthMVP"[/COLOR]);
    2. [COLOR=#6f008a]assert[/COLOR](depthMatrixID != -1);


    Dann könnt ihr sicher sein, dass die Namen zumindest stimmen.
    --------------


    Wenn man die richtige Uniform-Location nimmt, dann ist auch was in der Depth Map drinnen. Shadows gibt's noch keine.
    Ich hab dann mal aufgehört Fehler zu suchen.


    Um das Shadow Mapping Problem zu finden, würde ich mal ganz simpel anfangen und einfach nur versuchen hard shadows anzuzeigen, keinen sampler2DShadow benutzen, sondern nur einen normalen sampler, etc. Natürlich alle uniforms überprüfen und vielleicht auch einen Debug Context einbauen.
    Und vielleicht startet einmal mit diesem Tutorial. Wenn ihr dann einmal korrekt Shadows angezeigt habt, dann könnt ihr das auf effizient umbauen mit der Bias Matrix und den shadow-sampler und PCF, ...


    -------------------------
    @CodeXL Vielleicht statt CodeXL Nvidia NSight benutzen, oder nach dem Fehler googlen - wie gesagt bei mir funktioniert's. Zum Debuggen kann man auch einfach die Textur auf dem Screen ausgeben.

    Stefan Spelitz
    [Computergraphik UE Tutor 2017SS]

  • Die Shadow map ist leer weil ihr die falsche uniform location sucht.

    Ach, so deppat. Ich wusste ja, dass es wahrscheinlich irgend ne blöde Kleinigkeit ist, aber das is mir net aufgefallen. Danke!


    Wenn man die richtige Uniform-Location nimmt, dann ist auch was in der Depth Map drinnen. Shadows gibt's noch keine.
    Ich hab dann mal aufgehört Fehler zu suchen.

    Das hilft schon sehr viel weiter, vielen Dank!


    Das mit CodeXL ist komisch. Vor allem da es bei anderen Projekten ohne Probleme funktioniert. Aber mal gut zu wissen, dass es da bei dir auch keine Probleme gibt.