GDShader的bug?

2024-02-28

在使用shader时,我遇到了一些可能是bug的东西:

我注意到,如果将sampler2D作为参数传递给函数,可能会导致奇怪的重影(锯齿?)。我不知道原因。我试图将“获取法线”的方法封装到函数中,但是这个函数出现了预期之外的问题。

我的令一个函数似乎没有问题。似乎问题出在这个作为参数传入的hint_normal_roughness_texture上。到底是怎么回事?

// 第一种方案
void fragment(){
    ALBEDO=texture(normal_roughness_texture, SCREEN_UV).rgb;
}


// 第二种
vec3 get_normal(sampler2D normal_tex, vec2 screen_uv){
    return texture(normal_tex, screen_uv).rgb;
}
void fragment(){
    ALBEDO = get_normal(normal_roughness_texture, SCREEN_UV).rgb;
}

理论上,上述两种方案的结果应该是一样的,但是事实是,后者明显出现了奇怪的故障。是因为不能把sampler2D作为参数传入函数吗?还是其他地方出了问题?

我不希望这个东西拖累进度,目前暂且把这个sampler2D硬编码到函数里,而不是通过参数传入,似乎就能规避这个bug.