Seite 1 von 1

OpenGL Schadowmap relativ zur kamera

Verfasst: 01.11.2023, 19:26
von Andy90
Hallo, ich habe mir gestern mal das Tutorial für Shadowmaps auf https://learnopengl.com/Advanced-Lighti ... ow-Mapping angeschaut. Soweit ist auch alles klar und ich bekomme es hin, dass meine Objekte Schatten werfen. Jetzt ist ja aber der Bildausschnitt in dem Tutorial fest definiert, wie kann ich es am besten bewerkstelligen das er den Bildausschnitt der Shadowmap abhängig von der Kamera macht? Aktuell verfolge ich den Ansatz, dass ich die Projektion Matrix anhand der Kamera Position definiere also etwa so

Code: Alles auswählen

        public mat4 GenerateLightSpaceMatrix()
        {
            //new vec3(-2f, 4.0f, -1.0f)
            float near_plane = 1.0f, far_plane = 7.5f;

            float left = _camX - 10f;
            float right = _camX + 10f;
            float top = _camY + 10f;
            float bottom = _camY - 10f;

            // Könnte auch funktionieren
            //float top = _camZ + 10f;
            //float bottom = _camZ - 10f;

            mat4 lightProjection = mat4.Ortho(left, right, bottom, top, near_plane, far_plane);
            mat4 lightView = mat4.LookAt(lightPos, new vec3(0.0f, 0.0f, 0.0f), new vec3(0.0f, 1.0f, 0.0f));

            return lightProjection * lightView;
        }
Screenshot 2023-11-01 192118.png
was bis jetzt auch gut funktioniert. Ist das so richtig, oder gibt's da andere Methoden das zu bewerkstelligen?

Re: OpenGL Schadowmap relativ zur kamera

Verfasst: 01.11.2023, 21:19
von Schrompf
So geht's, aber dann hast Du einigen ShadowMap-Platz auf den Bereich hinter der Kamera verschwendet.

Was ich stattdessen empfehle: stelle Dein Frustum auf, also die Pyramide, die das Sichtfeld Deiner Kamera darstellt. Stelle außerdem das Koordinatensystem Deines Lichtes auf, also drei Vektoren entlang und quer zur Lichtrichtung. Bei Dir kommt das Licht anscheinen direkt von oben, da isses einfach. Dann kannst Du alle fünf Ecken Deiner Frustum-Pyramide in dieses Koordinatensystem transformieren und kannst eine BoundingBox aufmachen. Und die ist Deine ShadowMap.

Re: OpenGL Schadowmap relativ zur kamera

Verfasst: 01.11.2023, 22:17
von Andy90
ok das ist ein interessanter Ansatz, vielen dank :) Ich werde das mal ausprobieren. Ich merke schon, Schatten richtig und vor allem gut zu rendern ist eine Wissenschaft für sich :D

Re: OpenGL Schadowmap relativ zur kamera

Verfasst: 02.11.2023, 03:53
von dot
Andy90 hat geschrieben: 01.11.2023, 22:17 Ich merke schon, Schatten richtig und vor allem gut zu rendern ist eine Wissenschaft für sich :D
Es ist und bleibt ein ungelöstes Problem der Computergrafik… ^^

Re: OpenGL Schadowmap relativ zur kamera

Verfasst: 02.11.2023, 08:56
von Schrompf
Ich hab den Verdacht, dass der Wunsch nach Raytraced Shadows in allen möglichen Medien vor allem davon kommt, dass man Cascaded Virtual Moment Shadow Maps mit Normal Dependent Offset und Ketchup und Pommes quasi nie "gelöst" bekommt. Auch Jahre später findet man sich wieder, da doch noch schnell nen PostFx drüber zu jagen, um ein paar Fehlpixel zu fixen oder noch ein Offset bissl feiner einzustellen.

Grundsätzlich aber: bissl Offset gegen Selbstschatten, Augen zu und 64 Samples in ner Schleife im Shader, heutige GPUs können das stressarm, außer MeisterQ's Holz-GPU.