这是我所看到的问题的一个例子:
https://www.shadertoy.com/view/4dVGzW
我通过从地板纹理坐标采样来对纹理进行采样:
melt
我看到的错误是网格方块之间有1-2条像素线有时。
请注意,我们不仅在网络上使用了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;
}
和浮点运算有关,我不明白?!我很想知道如何解决这个问题,但为什么它正在发生?
答案 0 :(得分:3)
原来是使用纹理中的低细节mipmap来表示这些网格线。将纹理上的滤镜设置更改为"最近的"或"线性"过滤而不是" mipmap"修好了。
也可以使用3rd" bias"来调用texture2D。修改它将使用哪个mipmap级别的参数。
感谢shadertoy的评论者回答这个问题!
(如果有人知道的话,不确定如何在没有偏见的情况下为自定义着色器实际选择mipmap级别会感兴趣!)