Opengl 方差阴影图深度问题

Opengl 方差阴影图深度问题,opengl,glsl,webgl,shadow-mapping,Opengl,Glsl,Webgl,Shadow Mapping,我一直试图让方差阴影映射在我的webgl应用程序中工作,但我似乎遇到了一个问题,我需要一些帮助。简言之,我的阴影变化的距离似乎比我在那里看到的例子要小得多。也就是说,阴影范围从0到500个单位,但阴影在5个单位之外是黑色的,在10个单位之外几乎不存在。我下面的示例基于以下两个链接: 在这两个例子中,作者都使用聚光灯透视投影将方差值映射到浮点纹理。在我的引擎中,到目前为止,我尝试使用相同的逻辑,除了我使用的是平行光和正交投影。我尝试了这两种方法,结果对我来说似乎总是一样的。我不确定这是否是因为

我一直试图让方差阴影映射在我的webgl应用程序中工作,但我似乎遇到了一个问题,我需要一些帮助。简言之,我的阴影变化的距离似乎比我在那里看到的例子要小得多。也就是说,阴影范围从0到500个单位,但阴影在5个单位之外是黑色的,在10个单位之外几乎不存在。我下面的示例基于以下两个链接:

在这两个例子中,作者都使用聚光灯透视投影将方差值映射到浮点纹理。在我的引擎中,到目前为止,我尝试使用相同的逻辑,除了我使用的是平行光和正交投影。我尝试了这两种方法,结果对我来说似乎总是一样的。我不确定这是否是因为我使用正交矩阵进行投影——我怀疑可能是这样。以下是问题的图片:

请注意,长方体与圆的距离仅为几个单位,但阴影要暗得多,即使摄影机阴影为0.1到500个单位

在光影过程中,我的代码如下所示:

// viewMatrix is a uniform of the inverse world matrix of the camera
// vWorldPosition is the varying vec4 of the vertex position x world matrix
vec3 lightPos = (viewMatrix * vWorldPosition).xyz; 
depth = clamp(length(lightPos) / 40.0, 0.0, 1.0);

float moment1 = depth;
float moment2 = depth * depth;

// Adjusting moments (this is sort of bias per pixel) using partial derivative
float dx = dFdx(depth);
float dy = dFdy(depth);
moment2 += pow(depth, 2.0) + 0.25 * (dx * dx + dy * dy) ;
gl_FragColor = vec4(moment1, moment2, 0.0, 1.0);
然后在我的阴影中经过:

// lightViewMatrix is the light camera's inverse world matrix
// vertWorldPosition is the attribute position x world matrix

vec3 lightViewPos = lightViewMatrix * vertWorldPosition;
float lightDepth2 = clamp(length(lightViewPos) / 40.0, 0.0, 1.0);
float illuminated = vsm( shadowMap[i], shadowCoord.xy, lightDepth2, shadowBias[i] );
shadowColor = shadowColor * illuminated
首先,我应该用正交投影做些什么不同的事情吗(可能不是这样,但我不知道它可能是什么,因为使用上述两种技术:()?如果不是,我能做些什么来获得更均匀的阴影扩散

非常感谢