如何检测阴影贴图纹理GLSL的边缘
我想知道如何在片段着色器中检测阴影贴图纹理的边缘 我在youtube上看了以下教程: 但在那个家伙的情况下,解决方案取决于摄像机的位置。我宁愿不依赖摄像机的位置 问题是: 如果对象移出阴影贴图渲染过程采样的区域,则对象的阴影将被剪裁(正常行为)。 因此,如果我知道当前片段的位置靠近阴影贴图边界,我可以添加某种淡出机制如何检测阴影贴图纹理GLSL的边缘,glsl,fragment-shader,edge-detection,texture2d,shadow-mapping,Glsl,Fragment Shader,Edge Detection,Texture2d,Shadow Mapping,我想知道如何在片段着色器中检测阴影贴图纹理的边缘 我在youtube上看了以下教程: 但在那个家伙的情况下,解决方案取决于摄像机的位置。我宁愿不依赖摄像机的位置 问题是: 如果对象移出阴影贴图渲染过程采样的区域,则对象的阴影将被剪裁(正常行为)。 因此,如果我知道当前片段的位置靠近阴影贴图边界,我可以添加某种淡出机制 干杯并提前表示感谢 好吧,我真的不敢相信,但我自己解决了这个问题,这是一件非常简单的事情: 在“顶点着色器”(vertex shader)中,我从灯光的视点计算顶点位置,然后计算它
干杯并提前表示感谢 好吧,我真的不敢相信,但我自己解决了这个问题,这是一件非常简单的事情: 在“顶点着色器”(vertex shader)中,我从灯光的视点计算顶点位置,然后计算它与纹理边的距离:
vShadowCoord = vec4(uShadowModelViewProjectionMatrix * vec4(vertexPos.xyz, 1.0));
float borderFactorX = abs(0.5 - vShadowCoord.x);
float borderFactorY = abs(0.5 - vShadowCoord.y);
vShadowBorderFactor = max(borderFactorX, borderFactorY) * 2;
现在,vShadowBorderFactor存储一个介于0和1之间的值
我将vShadowBorderFactor传递给片段着色器,然后计算变暗量(通过投射阴影):
然后我将变暗应用于场景的整体颜色向量。瞧
darkening = textureProj(uShadowTexture, vec4(vShadowCoord.xy, vShadowCoord.z - bias, 1.0)) + (vShadowBorderFactor * vShadowBorderFactor);