Shadow mapping: проецируем пиксель из космоса в светлый космос
Я пишу карты теней в отложенном затенении.
Вот моя карта глубины для направленного света (ортогональная проекция):
https://i.imgur.com/PSVGuRq.png
Ниже представлен мой полноэкранный четырехъядерный шейдер для визуализации глубины пикселя в пространстве светлого обзора:
#version 330
in vec2 texCoord;
out vec3 fragColor;
uniform mat4 lightViewProjMat; // lightView * lightProj
uniform sampler2D sceneTexture;
uniform sampler2D shadowMapTexture;
uniform sampler2D scenePosTexture;
void main() {
vec4 fragPos = texture(scenePosTexture, texCoord);
vec4 fragPosLightSpace = lightViewProjMat * fragPos;
vec3 coord = fragPosLightSpace.xyz / fragPosLightSpace.w;
coord = coord * 0.5 + 0.5;
float lightViewDepth = texture(shadowMapTexture, coord.xy).x;
fragColor = vec3(lightViewDepth);
}
Размер рендера 1280x720, размер карты глубины 512x512, и похоже, что он повторяет карту глубины в моей сцене. Я думаю, что моя проекция координат не верна. Я хочу видеть, правильна ли глубина от пикселя до света. Может ли кто-нибудь дать мне несколько советов?
1 ответ
Решение
Решил сам, проблема экономии глубины. Я сохранил неправильное значение глубины, должен был использовать gl_FragCoord.z
вместо.