float my_sample( sampler2DShadow TEXTURE, vec4 sc )
{
#if 1
//gaussian
float shadow = 0.0;
for(int i = -2; i <= 2; ++i)
{
for(int j = -2; j <= 2; ++j)
{
shadow += textureProjOffset(TEXTURE, sc, ivec2(i, j)) * 0.04;
}
}
return shadow;
#else
//return 1;
ivec3 offsetCoord;
offsetCoord.xy = ivec2( mod( gl_FragCoord.xy, OffsetTexSize.xy ) );
float sum = 0.0, shadow = 1.0;
int samplesDiv2 = int(OffsetTexSize.z);
float R = Radius * 1;
// Don't test points behind the light source.
if( sc.z >= 0 )
{
for( int i = 0 ; i < 4; i++ ) {
offsetCoord.z = i;
vec4 offsets = texelFetch(u_shadow_map_Jittering,offsetCoord,0) * R * sc.w;
sc.xy = sc.xy + offsets.xy;
sum += textureProj(TEXTURE, sc);
sc.xy = sc.xy + offsets.zw;
sum += textureProj(TEXTURE, sc);
}
shadow = sum / 8.0;
if( shadow != 1.0 && shadow != 0.0 ) {
for( int i = 4; i < samplesDiv2; i++ ) {
offsetCoord.z = i;
vec4 offsets = texelFetch(u_shadow_map_Jittering, offsetCoord,0) * R * sc.w;
sc.xy = sc.xy + offsets.xy;
sum += textureProj(TEXTURE, sc);
sc.xy = sc.xy + offsets.zw;
sum += textureProj(TEXTURE, sc);
}
shadow = sum / float(samplesDiv2 * 2.0);
}
}
return shadow;
#endif
}
gaussian 阴影
最新推荐文章于 2025-09-10 00:52:10 发布
该代码片段展示了两种不同的阴影投射方法。一种是基于高斯模糊的阴影计算,另一种是使用偏移采样进行阴影映射。在高斯方法中,对纹理进行多次采样并累加以模拟模糊效果。在阴影映射方法中,通过偏移坐标并在多个样本上应用纹理投影来计算阴影。这两种方法都涉及到纹理采样、浮点运算以及对阴影贴图的访问。
3491

被折叠的 条评论
为什么被折叠?



