sampler2DShadow 偏置组件在 GLSL 中不起作用?
sampler2DShadow bias component not working in GLSL?
我正在尝试在 opengl core 3.3 中实现阴影贴图。当我向 GLSL 中的纹理函数发送偏差时,它似乎根本没有做任何事情。我用错了吗?
#version 330
uniform sampler2D diffusetex;
uniform sampler2D normaltex;
uniform sampler2D postex;
uniform sampler2D depthtex;
uniform sampler2DShadow shadowmap;
uniform mat4 shadowmat;
in vec2 uv;
layout (location=0) out vec4 outColor;
void main(){
vec3 normal = normalize(texture(normaltex, uv).xyz);
vec3 world_position = texture(postex, uv).xyz;
vec4 shadowcoord = shadowmat*vec4(world_position, 1);
float shadow = texture(shadowmap, shadowcoord.xyz,0.5);
float luma = max(0.1,shadow);//ambient light
outColor = texture(diffusetex, uv)*luma;
}
我正在使用 linux,nvidia 专有驱动程序和 golang。怀疑它与它有什么关系,但为了以防万一,它就在那里。
如果您试图避免阴影粉刺,则需要将该偏移量添加到您的实际纹理坐标中。纹理查找函数中的可选 [bias]
参数用于 LOD 级别计算,它用于“锐化”(负值)或“软化”(正值值) mipmap 过滤。
在这种情况下,这将正确应用 0.5 的偏差:
vec4 shadowcoord = shadowmat*vec4(world_position, 1);
shadowcoord.z += 0.5;
请记住,在 window-space 中,0.5 是 1/2 的深度范围,并且可能不是一个好的偏差。通常一个好的值会接近 0.001; 0.5 可能会杀死你所有的影子。
我正在尝试在 opengl core 3.3 中实现阴影贴图。当我向 GLSL 中的纹理函数发送偏差时,它似乎根本没有做任何事情。我用错了吗?
#version 330
uniform sampler2D diffusetex;
uniform sampler2D normaltex;
uniform sampler2D postex;
uniform sampler2D depthtex;
uniform sampler2DShadow shadowmap;
uniform mat4 shadowmat;
in vec2 uv;
layout (location=0) out vec4 outColor;
void main(){
vec3 normal = normalize(texture(normaltex, uv).xyz);
vec3 world_position = texture(postex, uv).xyz;
vec4 shadowcoord = shadowmat*vec4(world_position, 1);
float shadow = texture(shadowmap, shadowcoord.xyz,0.5);
float luma = max(0.1,shadow);//ambient light
outColor = texture(diffusetex, uv)*luma;
}
我正在使用 linux,nvidia 专有驱动程序和 golang。怀疑它与它有什么关系,但为了以防万一,它就在那里。
如果您试图避免阴影粉刺,则需要将该偏移量添加到您的实际纹理坐标中。纹理查找函数中的可选 [bias]
参数用于 LOD 级别计算,它用于“锐化”(负值)或“软化”(正值值) mipmap 过滤。
在这种情况下,这将正确应用 0.5 的偏差:
vec4 shadowcoord = shadowmat*vec4(world_position, 1);
shadowcoord.z += 0.5;
请记住,在 window-space 中,0.5 是 1/2 的深度范围,并且可能不是一个好的偏差。通常一个好的值会接近 0.001; 0.5 可能会杀死你所有的影子。