阴影映射:投影世界-space 像素到光照-space
Shadow mapping: project world-space pixel to light-space
我在延迟着色中编写阴影贴图。
这是我的定向光深度图(正交投影):
下面是我的全屏四边形着色器,用于在光视图中渲染像素的深度space:
#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,看起来它在我的场景中重复深度图。我认为我对协调的预测不正确。我想看看从像素到光线的深度是否正确。有人可以给我一些建议吗?
自己解决了,问题是depth saving。我保存了错误的深度值,应该使用 gl_FragCoord.z
代替。
我在延迟着色中编写阴影贴图。
这是我的定向光深度图(正交投影):
下面是我的全屏四边形着色器,用于在光视图中渲染像素的深度space:
#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,看起来它在我的场景中重复深度图。我认为我对协调的预测不正确。我想看看从像素到光线的深度是否正确。有人可以给我一些建议吗?
自己解决了,问题是depth saving。我保存了错误的深度值,应该使用 gl_FragCoord.z
代替。