在采样纹理时使用GLSL中的floor()函数会留下毛刺

时间:2016-01-22 16:30:44

标签: pixel-shader floor

这是我所看到的问题的一个例子:

https://www.shadertoy.com/view/4dVGzW

我通过从地板纹理坐标采样来对纹理进行采样:

melt

我看到的错误是网格方块之间有1-2条像素线有时

Grid of colours

请注意,我们不仅在网络上使用了GLSL ES,而且还在Unity中使用了HLSL。

是否与#define GRID_SIZE 20.0 void mainImage( out vec4 fragColor, in vec2 fragCoord ) { vec2 uv = fragCoord.xy / iResolution.xy; // Sample texture at integral positions vec2 texUV = floor(uv * GRID_SIZE) / GRID_SIZE; fragColor = texture2D(iChannel0, texUV).rgba; } 和浮点运算有关,我不明白?!我很想知道如何解决这个问题,但为什么它正在发生?

1 个答案:

答案 0 :(得分:3)

原来是使用纹理中的低细节mipmap来表示这些网格线。将纹理上的滤镜设置更改为"最近的"或"线性"过滤而不是" mipmap"修好了。

也可以使用3rd" bias"来调用texture2D。修改它将使用哪个mipmap级别的参数。

感谢shadertoy的评论者回答这个问题!

(如果有人知道的话,不确定如何在没有偏见的情况下为自定义着色器实际选择mipmap级别会感兴趣!)