Shadow-Maps kombinieren?



  • Hallo,

    Beim Cascaded Shadowmapping ist mir aufgefallen, dass dort mehrere Shadow Maps benutzt werden. Wobei eine Shadow Map einen nahen Bereich um die Kamera herum erfässt, die nächste einen größeren usw. (je nachdem wie viele Shadowmaps man nutzt).

    Ich wollte das auch mal probieren und habe daher 2 FBO's, wo jeweils eine Depth-Texture enthalten ist. Einmal ist der FOV vom Lichtpunkt 10, bei der anderen Texture 30.
    Lass ich mir nun beide Texturen ausgeben, so habe ich leider das Problem, dass die Texture mit dem größeren FOV Wert auch im Gebiet der "guten" Texture ist. Optimal wäre jedoch, wenn die "schlechtere" Textur erst dann anfängt, wenn die gute endet. Die Frage ist bloß wie?

    Das Problem lässt sich einigermaßen lösen, wenn man bei der Biasmatrix Wert #13 von 0.5 auf ca. 0.5002 erhöht (Array [0..15]), ist allerdings eher eine Notlösung und verursacht dadurch auch andere Probleme. Habe mir schon einen Code zum Cascaded Shadowmapping angeschaut, konnte aber nicht wirklich erkennen, wie das dort gelöst wird. Hoffe mal mir kann jemand weiterhelfen.

    Beispiel aus meiner Anwendung wie es mit dem "Biasfix" aussieht:
    http://www.abload.de/img/shadowp7j2g.jpg



  • Ups was vergessen:
    Der rote Strich in dem Bild zeigt den Übergang von ShadowMap 1 zu ShadowMap 2.


  • Mod

    CSM werden meist fuer die sonne verwendet, die hat keinen wirklichen FOV, sondern ist orthogonal (beim implementieren, ich spreche nicht von der realitaet 😉 ). Von daher ist es leicht den bereich auszurechnen bis zu dem die erste cascade alles abdeckt und die zweite cascade entsprechend zu verschieben, dass sie dort anfaengt.



  • Hm achso,

    meine Spekulation ging bis jetzt zum glTexEnvi und dann was mit GL_SUBTRACT_ARB. Wäre es denn auch möglich auf diese weise zu realisieren?


  • Mod

    ich dachte es ging dir darum, dass die "schlechtere" textur erst dort anfaeng wo die gute aufhoert.
    wenn es dir nur darum geht eine zu selektieren, wirst du vermutlich nicht drumkommen im shader zu prouefen ob die texturkoordinaten ausserhalbe der "guten" sind und dann von der "schleteren" zu samplen.



  • Nunja, mal angenommen ich lade die große, schlechtere Texture und rechne dann schlechte Texture minus gute Texture. Dann sollte, so wie ich das verstehe, der Teil in der großen/schlechten Texture wie ausgestanzt sein, da wo eben die gute Texture vorhanden war.

    Habe nochmal versucht, es mit einem Bild zu verdeutlichen:
    http://www.abload.de/img/shadowk7kbk.jpg


  • Mod

    du ziehst keine ganze textur ab, sondern nur pixel fuer pixel, da wo die "schlechte" 0 ist, kannst du 0 oder 1 von der "guten" abziehen, es wird 0 bleiben, somit wird in diesem fall die "schlechte" aus der guten "stanzen".



  • Okay, aber es sollte doch trotzdem irgendwie mein Vorhaben zu realisieren sein? Also auch ohne Shader 😠

    Ps. Dein Link von "amazon stole my PS3" geht nicht ^^


  • Mod

    FriendOfShadow schrieb:

    Okay, aber es sollte doch trotzdem irgendwie mein Vorhaben zu realisieren sein? Also auch ohne Shader 😠

    du kannst versuchen in mehreren durchgaengen zu zeichnen, dabei im stencilbuffer immer ausmaskieren was schon eine cascade bekommen hat, und so von der "besten" zur "schlechtesten" textur durchgehen. (natuerlich nur die unmaskierten bereiche nochmal zeichnen mit der neuen shadow map).

    Ps. Dein Link von "amazon stole my PS3" geht nicht ^^

    danke fuer den hinweis, hab ich auch scho gewundert dass die zuschriften ausblieben (sonst hab ich ein paar im monat gehabt), muss ich mir wohl einen neuen account anlegen.
    amazbusiness@hotmail.com wurde scheinbar auch gesperrt.

    aber temporaer geht es jetzt wieder, danke nochmals.

    [edit]so, link gefixt, mal sehen wie lange das haelt :)[/edit]


Anmelden zum Antworten